स्पीच रिकॉग्निशन (ASR) एक स्वचालित वाक् पहचान तकनीक है जो ऑडियो सिग्नल को टेक्स्ट अनुक्रम में बदलती है। आधुनिक सिस्टम डीप लर्निंग का उपयोग करते हैं: एनकोडर (Conformer, Whisper, BiLSTM + CTC) ऑडियो स्पेक्ट्रोग्राम को छिपी अवस्थाओं के अनुक्रम में बदलता है, डिकोडर (CTC greedy decoding, Beam Search, Transformer decoder) टेक्स्ट बनाता है। मोबाइल एप्लिकेशन में स्पीच रिकॉग्निशन का उपयोग वॉयस इनपुट, वॉयस असिस्टेंट, स्वचालित कॉल ट्रांसक्रिप्शन और मोटर विकलांगता वाले लोगों के लिए एक्सेसिबिलिटी सुविधाओं के लिए किया जाता है। Google Cloud Speech-to-Text, 2025 के अनुसार, क्लाउड ASR SNR > 15 dB पर अंग्रेजी में 7% और रूसी में 12% WER प्राप्त करता है।
मुख्य बिंदु
स्वचालित वाक् पहचान (ASR) एक पाइपलाइन है: ऑडियो → प्रीप्रोसेसिंग (16 kHz मोनो, शोर में कमी, VAD — वॉइस एक्टिविटी डिटेक्शन) → फीचर एक्सट्रैक्शन (MFCC, LogMel FilterBank) → एकॉस्टिक मॉडल (तंत्रिका नेटवर्क: CTC / RNNT / Transducer) → भाषा मॉडल (LM) → डिकोडिंग (टेक्स्ट)। आधुनिक एंड-टू-एंड मॉडल (Whisper, Google USM, Conformer CTC) एकॉस्टिक + भाषा मॉडल को एक Transformer में जोड़ते हैं, जिससे पाइपलाइन सरल हो जाती है और सटीकता बढ़ जाती है।
मोबाइल उपकरणों के लिए ASR आर्किटेक्चर: CTC (Connectionist Temporal Classification) — तेज़, ऑडियो-टेक्स्ट संरेखण की आवश्यकता नहीं, Vosk और Android मूल में उपयोग किया जाता है। RNNT (Recurrent Neural Network Transducer) — स्ट्रीमिंग ASR, कम विलंबता (Google USM)। Conformer — CNN + Transformer का हाइब्रिड, बेहतर सटीकता लेकिन भारी: Whisper Medium (769M पैरामीटर) — 30–60x विलंबता। ऑन-डिवाइस के लिए CTC प्राथमिकता है: Vosk CTC मॉडल 50–100 MB लेते हैं, विलंबता 0.3–0.8x रियल-टाइम।
ASR मीट्रिक्स: WER (वर्ड एरर रेट) — संदर्भ के सापेक्ष प्रतिस्थापित, हटाए और सम्मिलित शब्दों का प्रतिशत। Google Cloud ASR — 7% WER (EN), 12% (RU)। Vosk — 13% (RU), 9% (EN)। Whisper Small — 6% (EN), 10% (RU)। CER (कैरेक्टर एरर रेट) — समान, वर्ण स्तर पर। रियल-टाइम फ़ैक्टर (RTF) — प्रसंस्करण समय / ऑडियो अवधि। RTF < 1 — रियल टाइम से तेज़। RTF < 0.3 — रियल-टाइम ASR। वॉयस इनपुट के लिए RTF < 1 आवश्यक, ट्रांसक्रिप्शन के लिए RTF < 3।
| ASR समाधान | WER (EN) | WER (RU) | RTF | ऑन-डिवाइस |
|---|---|---|---|---|
| Google Cloud ASR | 7% | 12% | 0.3 | नहीं |
| Android SpeechRecognizer | 8% | 13% | 0.5–1 | हाँ (हाइब्रिड) |
| SFSpeechRecognizer | 7% | 12% | 0.3–0.8 | हाँ (iOS 17 से) |
| Vosk (vosk-model-small-ru) | 9% | 13% | 0.3–0.8 | हाँ |
| Whisper Small | 6% | 10% | 2–6 | हाँ |
VAD (वॉइस एक्टिविटी डिटेक्शन) — वॉइस एक्टिविटी का पता लगाना, भाषण को मौन और शोर से अलग करना। WebRTC VAD मोबाइल ASR के लिए मानक है: 30 ms फ्रेम, तीन मोड (0, 1, 2 — रूढ़िवादी से आक्रामक तक)। VAD RTF को 1.5–3x तक कम करता है (गैर-भाषण खंडों को छोड़ता है)। Silero VAD (MIT) एक तंत्रिका VAD है, जो WebRTC (94% बनाम 85% ROC AUC) से अधिक सटीक है, 5–10 ms विलंबता, TFLite और Core ML। प्रोडक्शन ASR के लिए, VAD → ASR कैस्केड का उपयोग करें: यह गलत सकारात्मकता को कम करता है और प्रसंस्करण को गति देता है।
Android SpeechRecognizer वाक् पहचान के लिए Android SDK में निर्मित एक वर्ग है। यह दो मोड में काम करता है: क्लाउड (Google सर्वर) — उच्च सटीकता, इंटरनेट की आवश्यकता; ऑन-डिवाइस (Android 10+ से) — GBoard एम्बेडेड ASR मॉडल, 20+ भाषाएँ, WER 15–18%। SpeechRecognizer भाषण के दौरान मध्यवर्ती परिणाम (आंशिक परिणाम) और अंतिम टेक्स्ट लौटाता है। RecognizerIntent.EXTRA_LANGUAGE के माध्यम से 60+ भाषाओं का समर्थन करता है। वॉयस इनपुट के लिए अनुशंसित — तेज़ एकीकरण, मुफ्त।
SpeechRecognizer API: SpeechRecognizer.createSpeechRecognizer(context) के माध्यम से निर्माण। RecognizerIntent.ACTION_RECOGNIZE_SPEECH के साथ Intent जिसमें एक्स्ट्रा हैं: LANGUAGE_MODEL_FREE_FORM (मुक्त टेक्स्ट) या LANGUAGE_MODEL_WEB_SEARCH (खोज क्वेरी)। RecognitionListener के माध्यम से परिणाम: onReadyForSpeech → onBeginningOfSpeech → onRmsChanged → onPartialResults → onResults। निरंतर पहचान (हमेशा सुनने का मोड) के लिए — onResults के बाद पहचानकर्ता को पुनरारंभ करें। बैटरी बचाने के लिए, onDeviceOnly = true का उपयोग करें।
// Android SpeechRecognizer
val recognizer = SpeechRecognizer.createSpeechRecognizer(context)
recognizer.setRecognitionListener(object : RecognitionListener {
override fun onResults(results: Bundle) {
val text = results
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
?.firstOrNull() ?: ""
showResult(text)
}
override fun onPartialResults(partialResults: Bundle) {
val partial = partialResults
.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION)
?.firstOrNull() ?: ""
showPartial(partial)
}
})
val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
putExtra(RecognizerIntent.EXTRA_LANGUAGE, "ru-RU")
}
recognizer.startListening(intent)
Android पर ऑन-डिवाइस बनाम क्लाउड: ऑन-डिवाइस बिना इंटरनेट के काम करता है (Android 10+, Pixel 4+, Samsung S20+)। क्लाउड अधिक सटीक है (Google Neural Network ASM Model) लेकिन विलंबता अधिक है (300–800 ms नेटवर्क सहित)। वॉयस इनपुट के लिए, हाइब्रिड दृष्टिकोण का उपयोग करें: नेटवर्क न होने पर ऑन-डिवाइस पर फ़ॉलबैक के साथ क्लाउड। Android SpeechRecognizer RecognizerIntent.EXTRA_PREFER_OFFLINE के आधार पर स्वचालित रूप से मोड चुनता है। अधिकतम गोपनीयता के लिए — onDeviceOnly = true सेट करें (लेकिन रूसी के लिए सटीकता 15–18% WER है)।
SFSpeechRecognizer iOS, macOS और watchOS पर वाक् पहचान के लिए Apple का फ्रेमवर्क है। iOS 10 से उपलब्ध। ऑन-डिवाइस मोड — iOS 17 से (स्थानीय मॉडल, इंटरनेट की आवश्यकता नहीं)। 60+ भाषाओं का समर्थन करता है। सटीकता: WER 7–12% (ऑन-डिवाइस — 12–15%)। SFSpeechRecognizer Speech.framework के माध्यम से उपलब्ध है — किसी अतिरिक्त SDK की आवश्यकता नहीं। SFSpeechRecognizer.requestAuthorization के माध्यम से अनुमति अनुरोध।
SFSpeechRecognizer API: SFSpeechRecognizer(locale: Locale(identifier: "ru_RU")) → SFSpeechAudioBufferRecognitionRequest (लाइव ऑडियो) या SFSpeechURLRecognitionRequest (ऑडियो फ़ाइल)। SFSpeechRecognitionTaskDelegate (didHypothesizeTranscription — आंशिक, didFinishRecognition — अंतिम) के साथ recognitionTask(with:delegate:) के माध्यम से स्ट्रीमिंग। ऑन-डिवाइस मोड: request.requiresOnDeviceRecognition = true। iOS 15+ के लिए: request.shouldReportPartialResults = true (कम विलंबता के साथ स्ट्रीमिंग परिणाम)।
let recognizer = SFSpeechRecognizer(locale: Locale(identifier: "ru_RU"))
guard recognizer.isAvailable else { return }
let request = SFSpeechAudioBufferRecognitionRequest()
request.requiresOnDeviceRecognition = true
request.shouldReportPartialResults = true
recognitionTask = recognizer.recognitionTask(with: request) { result, error in
if let result = result {
let text = result.bestTranscription.formattedString
let isFinal = result.isFinal
DispatchQueue.main.async {
textView.text = text
}
}
}
audioEngine.inputNode.installTap(config: bufferConfig) { buffer, _ in
request.append(buffer)
}
audioEngine.prepare()
try audioEngine.start()
SFSpeechRecognizer बनाम Android SpeechRecognizer: SFSpeechRecognizer में बिना पुनरारंभ के मूल स्ट्रीमिंग है (Android को बार-बार startListening की आवश्यकता होती है)। iOS पर ऑन-डिवाइस iOS 17 से उपलब्ध है (Android — Android 10 से)। दोनों को उपयोगकर्ता अनुमति की आवश्यकता है (iOS के लिए NSMicrophoneUsageDescription + NSSpeechRecognitionUsageDescription, Android के लिए RECORD_AUDIO)। SFSpeechRecognizer अंग्रेजी में अधिक सटीक है (ऑन-डिवाइस), Android SpeechRecognizer रूसी में अधिक सटीक है (क्लाउड)। iOS 17 से पहले, ऑन-डिवाइस उपलब्ध नहीं है — इंटरनेट की आवश्यकता है। iOS 17+ के लिए, ऑन-डिवाइस रूसी के लिए WER 12–14% देता है।
Vosk Alpha Cephei द्वारा ऑफलाइन वाक् पहचान के लिए एक ओपन-सोर्स ASR लाइब्रेरी है। यह Kaldi ASR टूलकिट + CTC मॉडल पर आधारित है। 20+ भाषाओं का समर्थन करती है: रूसी, अंग्रेजी, जर्मन, फ्रेंच, स्पेनिश, चीनी, अरबी। मॉडल 50 MB (छोटा — 50 MB, ru) से 1.2 GB (बड़ा — 1.2 GB, en) तक। Vosk Android (JNI), iOS (C++ रैपर), Linux, Windows, Raspberry Pi पर काम करता है। RTF: फ्लैगशिप उपकरणों पर 0.3–0.8। Vosk पूर्ण ऑफलाइन ASR के लिए सबसे अच्छा विकल्प है।
Vosk API: VoskWaveformModelLoader (मॉडल लोडिंग) → VoskWaveformRecognizer (पहचानकर्ता निर्माण) → recognizer.createGrammar(list) या recognizer.getResult() / recognizer.getPartialResult()। व्याकरण समर्थन (निश्चित कमांड सेट) — GrammarRecogniser — RTF 0.1–0.3 देता है (3x तेज़)। वॉयस इनपुट के लिए, मुक्त पहचान (getResult) का उपयोग करें। वॉयस कमांड के लिए — GrammarRecogniser (कमांड पर 99% सटीकता)। Vosk स्पीकर आइडेंटिफिकेशन (आवाज वेक्टर विश्लेषण) का भी समर्थन करता है।
// Vosk offline ASR
val model = VoskModel("model/vosk-model-small-ru-0.22")
model.load()
val recognizer = VoskRecognizer(model, 16000.0f)
recognizer.setWords(true)
audioRecord.startRecording()
while (isListening) {
val buffer = ByteArray(3200) // 100ms audio
audioRecord.read(buffer, 0, buffer.size)
if (recognizer.acceptWaveform(buffer)) {
val result = recognizer.result // JSON
text += JSONObject(result).getString("text")
}
}
Vosk बनाम क्लाउड ASR: Vosk पूरी तरह से ऑफलाइन है — गोपनीयता, शून्य विलंबता, मुफ्त। क्लाउड (Google, Yandex) जटिल परिदृश्यों (शोर, उच्चारण) में अधिक सटीक है — WER 3–5% कम। Vosk इसके लिए आदर्श है: बिना इंटरनेट के वॉयस इनपुट, एक्सेसिबिलिटी ऐप्स, कॉल ट्रांसक्रिप्शन (गोपनीयता)। क्लाउड ASR वॉयस असिस्टेंट के लिए है जहाँ सटीकता गोपनीयता से अधिक महत्वपूर्ण है। अनुशंसा: ऑफलाइन के लिए Vosk, ऑनलाइन के लिए SFSpeechRecognizer (iOS) / SpeechRecognizer (Android) — विभिन्न परिदृश्यों के लिए दृष्टिकोणों को संयोजित करें।
Whisper वाक् पहचान के लिए OpenAI का एक मॉडल है, जिसे 680,000 घंटे के ऑडियो (बहुभाषी, 99 भाषाएँ) पर प्रशिक्षित किया गया है। आकारों में उपलब्ध: tiny (39M, WER 10% EN, 15% RU), small (244M, WER 6% EN, 10% RU), medium (769M, WER 4.5% EN, 8% RU)। Whisper Core ML (iOS, ANE) और TFLite (Android, GPU) के माध्यम से मोबाइल उपकरणों पर चलता है। Whisper tiny: CPU पर RTF 4–10, GPU पर RTF 0.5–2 (Android)। Whisper small: GPU पर RTF 2–6। Whisper medium — RTF 8–15, केवल गैर-रियल-टाइम के लिए।
iOS पर Whisper (Core ML): Apple MLX Whisper — Core ML और MLX (Apple Neural Engine) के लिए Whisper का कार्यान्वयन। iPhone 15 Pro पर Whisper tiny Core ML: RTF 0.3–0.8 (रियल-टाइम से तेज़!)। Whisper small Core ML: RTF 1–3। Whisper Core ML A17 Pro (Neural Engine 35 TOPS) पर ANE का उपयोग करता है। Hugging Face Transformers → coremltools-whisper के माध्यम से Core ML में निर्यात। स्ट्रीमिंग के लिए, WhisperStitcher (चंकिंग + स्टिचिंग) का उपयोग करें। iOS पर Whisper सबसे सटीक ऑन-डिवाइस ASR है (WER 6% EN, 10% RU)।
// Whisper Core ML on iOS
import MLXWhisper
let model = try WhisperModel(from: "whisper-tiny")
let audio = try AudioUtils.loadAudio(url: audioURL)
let segments = try model.transcribe(audio: Audio, options: TranscribeOptions(
language: "ru",
wordTimestamps: true,
temperature: 0.0
))
for segment in segments {
print(segment.text) // final text with timestamps
}
Whisper बनाम Vosk: Whisper अधिक सटीक है (6% बनाम 9% WER EN), 99 भाषाओं का समर्थन करता है, भाषा पहचान, विराम चिह्न और भावना पहचान शामिल करता है। Whisper भारी है (39M–769M बनाम 50M Vosk), रियल-टाइम में धीमा (RTF 0.5–6 बनाम 0.3–0.8)। Whisper tiny गति में Vosk के बराबर है (RTF 0.5–2 GPU)। Vosk हल्का, तेज़, स्ट्रीमिंग रियल-टाइम के लिए बेहतर है। Whisper एक बार के ट्रांसक्रिप्शन के लिए है जहाँ सटीकता गति से प्राथमिकता रखती है। Vosk रियल-टाइम वॉयस इनपुट के लिए है। अंतिम टेक्स्ट के लिए Whisper का उपयोग करें, इंटरैक्टिव उपयोग के लिए Vosk का।
वॉयस टेक्स्ट इनपुट — ASR का सबसे व्यापक उपयोग: संदेश, खोज क्वेरी, नोट्स निर्देशित करना। आवश्यकता: RTF < 1 (रियल टाइम), आंशिक परिणाम (बोलते समय टेक्स्ट देखना)। Android Gboard और iOS कीबोर्ड में अंतर्निर्मित ASR है (ऑन-डिवाइस, WER 12–18%)। कस्टम कार्यान्वयन के लिए, Android SpeechRecognizer / SFSpeechRecognizer का उपयोग करें। अधिकतम सटीकता के लिए — क्लाउड ASR + Vosk फ़ॉलबैक। रूसी में 98% सटीकता के साथ वॉयस इनपुट के लिए — Vosk (ऑफलाइन) + Yandex SpeechKit (ऑनलाइन) को संयोजित करें।
कॉल और मीटिंग ट्रांसक्रिप्शन — स्वचालित ट्रांसक्रिप्ट निर्माण के लिए ASR। आवश्यकताएँ: कोई विलंबता आवश्यकता नहीं, WER < 10%, स्पीकर डायराइज़ेशन (कौन बोल रहा है)। Whisper Small (ऑफलाइन) + pyannote-audio (डायराइज़ेशन) ट्रांसक्रिप्शन के लिए मानक स्टैक है। iOS पर — Whisper Core ML (RTF 1–3, WER 6–10%)। Android पर — Whisper TFLite (RTF 2–6, WER 8–12%) या Google Cloud ASR + डायराइज़ेशन। गोपनीयता के लिए (कॉल सर्वर पर नहीं जाती) — डिवाइस पर Whisper। डायराइज़ेशन सटीकता: 80–90% DER।
वॉयस असिस्टेंट — Siri (SFSpeechRecognizer), Google Assistant (Android SpeechRecognizer), Alexa (ऑन-डिवाइस ASR)। कस्टम असिस्टेंट: ASR → NLU (प्राकृतिक भाषा समझ) → कार्रवाई → TTS। ASR पहला चरण है — यह पूरी श्रृंखला की सटीकता निर्धारित करता है। NLU के लिए, RASA, Snips NLU (ऑन-डिवाइस), या क्लाउड NLU (Dialogflow, Amazon Lex) का उपयोग करें। TTS के लिए: Android TTS / iOS AVSpeechSynthesizer। एक ऑन-डिवाइस वॉयस असिस्टेंट (Vosk + RASA + TTS) पूरी तरह से निजी है, बिना इंटरनेट के काम करता है, प्रति अनुरोध विलंबता < 2 सेकंड।
// Voice assistant with Android SpeechRecognizer + TTS
recognizer.setRecognitionListener(object : RecognitionListener {
override fun onResults(results: Bundle) {
val query = results.getStringArrayList(
SpeechRecognizer.RESULTS_RECOGNITION
)?.firstOrNull() ?: return
val intentResult = nluService.classify(query)
textToSpeech.speak(intentResult.response)
executeAction(intentResult.action)
}
})
मोटर विकलांगता वाले लोगों के लिए एक्सेसिबिलिटी — स्पीच रिकॉग्निशन ऐप को आवाज से नियंत्रित करने की अनुमति देता है: संपर्क खोलना, संदेश भेजना, नंबर डायल करना। Android Voice Access और iOS Switch Control + VoiceOver अंतर्निर्मित समाधान हैं। कस्टम कार्यान्वयन के लिए: GrammarRecogniser (Vosk) एक निश्चित कमांड सेट (50–100 वाक्यांश) के साथ — RTF 0.1–0.3, 99% सटीकता। Vosk Grammar BNF प्रारूप में व्याकरण को परिभाषित करने की अनुमति देता है। एक्सेसिबिलिटी के लिए गति महत्वपूर्ण है — Vosk Grammar मुक्त पहचान से 5x तेज़ है और कम बैटरी खपत करता है।
अक्सर पूछे जाने वाले प्रश्न
शोर दमन का उपयोग करें (WebRTC NS — Android में निर्मित, iOS AVAudioSession)। गैर-भाषण खंडों को काटने के लिए VAD लागू करें। बीमफॉर्मिंग (दिशात्मक रिकॉर्डिंग) या मल्टी-माइक्रोफोन ऐरे वाले माइक्रोफोन के माध्यम से SNR बढ़ाएँ। Whisper शोर के प्रति अधिक प्रतिरोधी है (शोर के साथ 680K घंटे पर प्रशिक्षित)। WebRTC के माध्यम से शोर दमन के साथ Vosk 50 dB शोर पर +5% WER देता है। प्रोडक्शन के लिए, अपने एप्लिकेशन की शोर स्थितियों के साथ परीक्षण करें।
हाँ, iOS 17 से SFSpeechRecognizer ऑन-डिवाइस मोड (requiresOnDeviceRecognition = true) का समर्थन करता है। iOS 16 और पुराने पर, ऑन-डिवाइस उपलब्ध नहीं है — Siri/Gboard ASR के लिए इंटरनेट की आवश्यकता है। विकल्प: C++ रैपर के माध्यम से Vosk (ऑफलाइन, WER 12–15%), Whisper Core ML (ऑफलाइन, WER 6–10%, विलंबता 2–6x)। iOS 16- पर वॉयस इनपुट के लिए Vosk का उपयोग करें। Whisper Core ML ऑडियो फ़ाइल ट्रांसक्रिप्शन (रियल-टाइम नहीं) के लिए है। सभी समाधान पूरी तरह से निजी हैं और बिना इंटरनेट के काम करते हैं।
Android SpeechRecognizer RecognizerIntent.EXTRA_LANGUAGE के माध्यम से 60+ भाषाओं का समर्थन करता है। पूरी सूची डिवाइस पर Locale.getAvailableLocales() द्वारा निर्धारित की जाती है। रूसी, अंग्रेजी, जर्मन, फ्रेंच, स्पेनिश, इतालवी हमेशा उपलब्ध हैं। चीनी, जापानी, कोरियाई डिवाइस मॉडल पर निर्भर करते हैं। ऑन-डिवाइस मोड (Android 10+) — 20+ भाषाएँ। Vosk (20 भाषाएँ) और SFSpeechRecognizer (60 भाषाएँ) के विपरीत, Android SpeechRecognizer Google Play Services संस्करण पर निर्भर करता है।
मॉडल अनुकूलन का उपयोग करें: डोमेन ऑडियो के 100+ घंटे पर Whisper फ़ाइन-ट्यूनिंग (Hugging Face Trainer)। Vosk — भाषा मॉडल (ARPA प्रारूप) को डोमेन टेक्स्ट कॉर्पस (100K+ वाक्य) से बदलें। Google Cloud ASR — phrase hints (डोमेन शब्द, DL=0/1/2)। SFSpeechRecognizer — SFSpeechRecognitionTaskDelegate contextualStrings (संकेत स्ट्रिंग की सरणी) के साथ। डोमेन अनुकूलन विशिष्ट शब्दावली के लिए सटीकता में 15–30% WER सुधार करता है। न्यूनतम: ट्रांसक्रिप्शन के साथ 500 डोमेन ऑडियो फ़ाइलें।
WER = (S + D + I) / N, जहाँ S — प्रतिस्थापन, D — विलोपन, I — सम्मिलन, N — संदर्भ टेक्स्ट में शब्दों की संख्या। उदाहरण: संदर्भ = “नमस्ते कैसे हो”, भविष्यवाणी = “नमस्ते क्या कर रहे हो” → S=1 (कैसे→क्या), D=1 (हटाया “हो”?), I=0 → WER = 2/3 = 66%। गणना के लिए jiwer लाइब्रेरी (Python) या WER Calculator (JavaScript) का उपयोग करें। CER वर्ण स्तर पर समान है। रूसी के लिए, CER शब्दों की लंबाई के कारण WER से 20–30% कम है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें