हमारी सीरीज़ ए फंडिंग (Series A Funding) की घोषणा

हमारी सीरीज़ ए फंडिंग (Series A Funding) की घोषणा

एक वेब ऐप में स्पीच रिकग्निशन को कैसे एकीकृत करें?

Listen to the article
2:00

Summarize with AI

हमारे साथ अपने संपर्क केंद्रों (कॉन्टैक्ट सेंटर्स) को स्वचालित करें

तेज़ लेटेंसी, मजबूत सुरक्षा और असीमित स्पीच जनरेशन का अनुभव करें।

एक वेब ऐप में स्पीच रिकग्निशन (आवाज़ पहचान) को कैसे एकीकृत करें?
एक वेब ऐप में स्पीच रिकग्निशन (आवाज़ पहचान) को कैसे एकीकृत करें?

एक वेब ऐप के लिए स्पीच रिकग्निशन: वेब स्पीच API बनाम स्ट्रीमिंग ASR, रीयल-टाइम अंतरिम परिणाम, अनुमतियां, गोपनीयता और प्रोडक्शन से जुड़ी वे गलतियां जिनसे बचना चाहिए।

वेब ऐप में स्पीच रिकग्निशन (आवाज पहचान) को शामिल करना किसी लाइब्रेरी को जोड़ने से कहीं अधिक आपके ट्रेड-ऑफ (समझौतों) को चुनने के बारे में है। आपको यह तय करना होगा कि ऑडियो कहाँ कैप्चर किया जाए, ट्रांसक्रिप्शन कहाँ चले, परिणाम आपके बैकएंड पर वापस कैसे जाएँ, और आप वास्तविक बातचीत के उलझे हुए हिस्सों से कैसे निपटें: जैसे लहजे (accents), पृष्ठभूमि का शोर, और लेटेंसी स्पाइक्स। यह लेख उन विकल्पों को एक व्यावहारिक क्रम में प्रस्तुत करता है, ब्राउज़र-नेटिव विकल्पों से लेकर प्रोडक्शन-ग्रेड ASR APIs तक, जिसका उद्देश्य कुछ ऐसा तैयार करना है जो वेब डेमो से बाहर भी टिक सके।

यह समझना कि आप वास्तव में क्या बना रहे हैं

कोड को छूने से पहले, इस बात को लेकर स्पष्ट हो जाएं कि आप क्या बना रहे हैं और यह कहाँ चलेगा। यदि आप इस बात की तकनीकी समझ चाहते हैं कि ऑटोमैटिक स्पीच रिकग्निशन (ASR) क्या है, तो इसका संक्षिप्त रूप यह है: ASR आने वाले ऑडियो सिग्नल पर एकॉस्टिक और लैंग्वेज मॉडल लागू करके उसे टेक्स्ट में बदल देता है। एक वेब ऐप में, यह पाइपलाइन आपकी सीमाओं के आधार पर ब्राउज़र में, सर्वर पर, या दोनों के बीच विभाजित होकर रह सकती है।

शुरुआत में ही शब्दावली को स्पष्ट कर लेना भी मददगार होता है। उत्पाद से जुड़ी बातचीत में वॉयस रिकग्निशन बनाम स्पीच रिकग्निशन अक्सर आपस में मिल जाते हैं, लेकिन वे अलग-अलग समस्याओं का समाधान कर रहे हैं। वॉयस रिकग्निशन पहचान (कौन बोल रहा है) से संबंधित है। स्पीच रिकग्निशन सामग्री (क्या कहा गया था) से संबंधित है। यदि आपके वेब ऐप को सर्च, डिक्टेशन या वॉयस कमांड की आवश्यकता है, तो स्पीच रिकग्निशन ही वह चीज़ है जिसे आप ढूंढ रहे हैं।



दो अलग-अलग ASR पाइपलाइन — प्रत्येक में अलग लेटेंसी, सटीकता और इंफ्रास्ट्रक्चर से जुड़े समझौते हैं।

ब्राउज़र-नेटिव और सर्वर-साइड रिकग्निशन के बीच चयन करना इसके बाद के हर आर्किटेक्चरल निर्णय को दिशा देता है।

विकल्प 1: वेब स्पीच API (ब्राउज़र-नेटिव)

वेब स्पीच API (Web Speech API) वेब के पास मौजूद इन-बिल्ट "बस इसे काम पर लगाओ" स्पीच रिकग्निशन विकल्प के सबसे करीब है। MDN वेब डॉक्स इसके दो हिस्सों का वर्णन करता है: टेक्स्ट-टू-स्पीच के लिए SpeechSynthesis, और एसिंक्रोनस स्पीच-टू-टेक्स्ट के लिए SpeechRecognition। यदि आप एक प्रोटोटाइप बना रहे हैं या कोई ऐसी सुविधा पेश कर रहे हैं जहाँ आप ब्राउज़र की कमियों के साथ काम चला सकते हैं, तो एक वर्किंग डेमो बनाने का यह सबसे तेज़ रास्ता है।

यहाँ एक छोटा सा उदाहरण दिया गया है जो बटन क्लिक करने पर सुनना शुरू करता है और ट्रांसक्रिप्ट प्रिंट करता है:

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition);
recognition.lang = 'en-US';
recognition.interimResults = true;
recognition.maxAlternatives = 1;

document.getElementById('startBtn').addEventListener('click', () => {
  recognition.start();
});

recognition.onresult = (event) => {
  const transcript = event.results[0][0].transcript;
  document.getElementById('output').textContent = transcript;
};

recognition.onerror = (event) => {
  console.error('Recognition error:', event.error);
};
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition);
recognition.lang = 'en-US';
recognition.interimResults = true;
recognition.maxAlternatives = 1;

document.getElementById('startBtn').addEventListener('click', () => {
  recognition.start();
});

recognition.onresult = (event) => {
  const transcript = event.results[0][0].transcript;
  document.getElementById('output').textContent = transcript;
};

recognition.onerror = (event) => {
  console.error('Recognition error:', event.error);
};
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition);
recognition.lang = 'en-US';
recognition.interimResults = true;
recognition.maxAlternatives = 1;

document.getElementById('startBtn').addEventListener('click', () => {
  recognition.start();
});

recognition.onresult = (event) => {
  const transcript = event.results[0][0].transcript;
  document.getElementById('output').textContent = transcript;
};

recognition.onerror = (event) => {
  console.error('Recognition error:', event.error);
};

इसमें किया जाने वाला समझौता कोई छोटा नहीं है। क्रोम में, वेब स्पीच API प्रोसेसिंग के लिए ऑडियो को एक रिमोट सर्वर पर भेजता है, इसलिए यह ऑफलाइन काम नहीं करेगा। इसका सपोर्ट भी असमान है: फ़ायरफ़ॉक्स बिना किसी फ़्लैग के SpeechRecognition का समर्थन नहीं करता है, और सफारी ऐतिहासिक रूप से पीछे रहा है। W3C स्पीच API कम्युनिटी ग्रुप को मार्च 2023 में बंद कर दिया गया था, लेकिन अन्य समूहों द्वारा मानकीकरण को आगे बढ़ाया जा रहा है। 


WebSocket के माध्यम से ऑडियो स्ट्रीमिंग आपको प्रोडक्शन-ग्रेड सटीकता के साथ रीयल-टाइम ट्रांसक्रिप्शन प्रदान करती है।

यदि आप वास्तविक उपयोगकर्ताओं के लिए स्पीच रिकग्निशन पेश कर रहे हैं, तो एक समर्पित ASR API आमतौर पर अधिक स्थिर आधार होता है। आपको सभी ब्राउज़रों में लगातार सटीकता मिलती है, ऑडियो पाइपलाइन पर अधिक नियंत्रण मिलता है, और लहजे और शोर जैसी सामान्य चुनौतियों से निपटने का बेहतर मौका मिलता है क्योंकि इन मॉडलों को उलझे हुए, वास्तविक दुनिया के ऑडियो के लिए प्रशिक्षित किया जाता है। बुनियादी पैटर्न सीधा है: MediaRecorder के साथ ब्राउज़र में ऑडियो कैप्चर करें, फिर इसे अपने एंडपॉइंट पर स्ट्रीम करें।

कैप्चर लूप आमतौर पर इस तरह शुरू होता है:

```javascriptasync function startCapture { const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); const mediaRecorder = new MediaRecorder(stream, { mimeType: 'audio/webm' }); const socket = new WebSocket('wss://your-asr-endpoint/stream'); socket.onopen = => mediaRecorder.start(250); // send chunks every 250ms mediaRecorder.ondataavailable = (event) => { if (event.data.size > 0 && socket.readyState === WebSocket.OPEN) { socket.send(event.data); } }; socket.onmessage = (event) => { const result = JSON.parse(event.data); document.getElementById('output').textContent = result.transcript; };}```

इस सेटअप की एक अच्छी विशेषता यह है कि आपका फ्रंटेंड किसी एक रिकग्निशन इंजन से बंधा नहीं होता है। ब्राउज़र ऑडियो कैप्चर करता है; एंडपॉइंट रिकग्निशन का काम करता है। यदि आप बाद में प्रदाता बदलने या सेवाओं के बीच माइग्रेट करने का निर्णय लेते हैं, तो कैप्चर लॉजिक काफी हद तक समान रहता है।

सही API चुनना: एक व्यावहारिक तुलना

आपका ASR API का चयन हर जगह दिखाई देता है: सटीकता, लेटेंसी, कीमत, और आपको ऑडियो हैंडलिंग पर कितना नियंत्रण मिलता है। नीचे दी गई तालिका उन आयामों को दर्शाती है जिन्हें आपको एकीकरण करने और उसके अनुसार अपना UI बनाने से पहले जांचना चाहिए।

प्रदाता

स्ट्रीमिंग सपोर्ट

ऑफलाइन / ऑन-डिवाइस

मुख्य ताकत

मूल्य निर्धारण मॉडल

Smallest.ai Pulse

हाँ (WebSocket)

नहीं (क्लाउड)

WebSocket के माध्यम से लो-लेटेंसी स्ट्रीमिंग स्पीच रिकग्निशन

Smallest.ai मूल्य निर्धारण देखें

वेब स्पीच API (ब्राउज़र)

आंशिक (अंतरिम परिणाम)

नहीं (क्रोम सर्वर पर भेजता है)

कोई सेटअप नहीं और कोई API की (key) की आवश्यकता नहीं

मुफ़्त (ब्राउज़र-नेटिव)

जेनेरिक क्लाउड ASR

हाँ

प्रदाता पर निर्भर करता है

व्यापक भाषा कवरेज के साथ बड़ा इकोसिस्टम

प्रति-मिनट या प्रति-अनुरोध भुगतान

ऑन-डिवाइस WASM मॉडल

हाँ (स्थानीय)

हाँ

गोपनीयता और कोई नेटवर्क निर्भरता नहीं

मुफ़्त (केवल कंप्यूटिंग लागत)

रीयल-टाइम ट्रांसक्रिप्शन और अंतरिम परिणामों को संभालना

रीयल-टाइम ट्रांसक्रिप्शन वह जगह है जहाँ कई एकीकरण "आसान" नहीं रह जाते हैं। उपयोगकर्ता उम्मीद करते हैं कि टेक्स्ट उनकी आवाज़ के साथ तालमेल बनाए रखे, न कि एक अजीब पड़ाव के बाद दिखाई दे। उस उम्मीद पर खरा उतरने के लिए, आपके API को अंतरिम (आंशिक) परिणाम स्ट्रीम करने की आवश्यकता होगी, और आपके UI को उन अपडेट्स को एक प्राथमिक अवस्था (first-class state) के रूप में मानना होगा, न कि किसी बाद के विचार के रूप में। 

पैटर्न जो आमतौर पर अच्छा काम करते हैं:

रीयल-टाइम ट्रांसक्रिप्ट प्रदर्शन के लिए UI पैटर्न:

  • अपेंड-एंड-रिप्लेस (जोड़ना और बदलना): एक पुष्ट (confirmed) ट्रांसक्रिप्ट स्ट्रिंग और एक अलग अंतरिम स्ट्रिंग रखें। दोनों को रेंडर करें ताकि उपयोगकर्ता को स्थिर टेक्स्ट के साथ-साथ प्रगति पर चल रहा वाक्यांश भी दिखाई दे।

  • डिबाउंस्ड कमिट: स्थायी ट्रांसक्रिप्ट में केवल तभी जोड़ें जब कोई मौन का अंतराल हो या जब API किसी हिस्से को अंतिम के रूप में चिह्नित करे। यह स्क्रीन की थिरकन (flicker) और रीफ्लो को कम करता है।

  • शब्द-स्तरीय विश्वास का रंग (Word-level confidence coloring): यदि आपका प्रदाता प्रति-शब्द विश्वास स्कोर प्रदान करता है, तो UI में अनिश्चितता को उजागर करें ताकि उपयोगकर्ताओं को पता चल सके कि क्या दोबारा जांचना है।

  • स्क्रॉल लॉक: डिफ़ॉल्ट रूप से नवीनतम लाइन पर ऑटो-स्क्रॉल करें, लेकिन जब उपयोगकर्ता पहले के टेक्स्ट की समीक्षा करने के लिए ऊपर स्क्रॉल करे तो इस लॉक को अक्षम कर दें।


अंतरिम परिणामों को अंतिम परिणामों से अलग रखने से वह थिरकन (flickering) रुकती है जो लाइव ट्रांसक्रिप्शन के दौरान उपयोगकर्ताओं को परेशान करती है।

अनुमतियाँ, गोपनीयता और त्रुटि प्रबंधन (Error Handling)

माइक्रोफ़ोन एक्सेस अनुमति-आधारित होता है और इसके पीछे अच्छे कारण हैं। आप getUserMedia के माध्यम से इसका अनुरोध करते हैं, और ब्राउज़र उम्मीद करते हैं कि यह कॉल किसी उपयोगकर्ता जेस्चर द्वारा ट्रिगर की जाएगी; पेज लोड होने पर संकेत देने के प्रयासों को आमतौर पर ब्लॉक कर दिया जाता है। HTTPS के विषय में भी कोई समझौता नहीं किया जा सकता क्योंकि माइक्रोफ़ोन एक्सेस केवल सुरक्षित संदर्भों तक सीमित है। अनुमति तब मांगें जब उपयोगकर्ता "रिकॉर्ड" पर टैप करे, उससे एक पल पहले भी नहीं। यदि उपयोगकर्ता को अभी तक यह समझ नहीं आया है कि आपको माइक की आवश्यकता क्यों है, तो उनके मना करने की संभावना अधिक है।

त्रुटि प्रबंधन (error handling) को फीचर के एक हिस्से के रूप में देखें, न कि किसी बाद के सफाई कार्य के रूप में। स्पीच रिकग्निशन वेब ऐप के लिए सामान्य विफलता के तरीके अनुमानित हैं: अनुमति अस्वीकृत (माइक ब्लॉक), नेटवर्क व्यवधान (सत्र के बीच में WebSocket का टूटना), नो-स्पीच टाइमआउट (मौन के कारण रुक जाना), और ऑडियो फॉर्मेट बेमेल (MediaRecorder ऐसा कोडेक तैयार करता है जिसे आपका एंडपॉइंट अस्वीकार कर देता है)। प्रत्येक मामले के लिए उपयोगकर्ता के सामने एक स्पष्ट संदेश प्रदर्शित होना चाहिए, क्योंकि "कुछ गलत हो गया" उपयोगकर्ता को यह नहीं बताता कि आगे क्या करना है।

गोपनीयता के मामले में, स्पष्टता चतुराई से बेहतर है। जब माइक्रोफ़ोन सक्रिय हो तो इसे स्पष्ट करें, स्क्रीन पर एक निरंतर रिकॉर्डिंग संकेतक रखें, और थामने (stop) का एक ऐसा नियंत्रण प्रदान करें जिसे अनदेखा करना कठिन हो। यदि आप ट्रांसक्रिप्ट संग्रहीत करते हैं, तो अपनी गोपनीयता नीति में ऐसा कहें और उपयोगकर्ताओं को अपना डेटा हटाने का एक तरीका दें।


गोपनीयता को प्राथमिकता देने वाला कार्यान्वयन पहली बातचीत से ही उपयोगकर्ता का विश्वास बनाता है।

बैकएंड एकीकरण और पोस्ट-प्रोसेसिंग

ASR आउटपुट शायद ही कभी उसी रूप में उपयोग के लिए तैयार होता है। अधिकांश ऐप्स को ट्रांसक्रिप्ट को उपयोगी बनाने से पहले कुछ पोस्ट-प्रोसेसिंग की आवश्यकता होती है: विराम चिह्न लगाना (punctuation restoration), वक्ता की पहचान करना (speaker diarization), या कस्टम शब्दावली का समर्थन, जो इस बात पर निर्भर करता है कि आपका प्रदाता क्या और किस स्तर पर प्रदान कर रहा है। यदि आप बैकएंड पर पायथन (Python) में स्पीच रिकग्निशन लागू कर रहे हैं, तो आप रॉ टेक्स्ट को साफ, सामान्य और व्यवस्थित करने के लिए NLP लाइब्रेरीज़ के एक विस्तृत समूह का उपयोग कर सकते हैं।

यदि आपके ऐप को ट्रांसक्रिप्ट के साथ कुछ करने की आवश्यकता है (न कि केवल इसे प्रदर्शित करने की), तो इंटेंट पार्सिंग (इरादा समझना) अगली परत है। कमांड-स्टाइल इंटरफेस के लिए, कीवर्ड मिलान पर्याप्त हो सकता है। अधिक संवादात्मक प्रवाह के लिए, एक लैंग्वेज मॉडल की परत ट्रांसक्रिप्ट की व्याख्या कर सकती है और उसे सही क्रिया की ओर भेज सकती है। एंड-टू-एंड का रास्ता आमतौर पर इस तरह दिखता है: ऑडियो कैप्चर (ब्राउज़र) -> ASR (API) -> इंटेंट पार्सिंग (LLM या रूल्स इंजन) -> एक्शन (आपका ऐप लॉजिक)।


पोस्ट-प्रोसेसिंग एक रॉ ट्रांसक्रिप्ट को आपके एप्लिकेशन के लिए व्यवस्थित और काम में आने वाले डेटा में बदल देती है।

सामान्य गलतियाँ और उनसे कैसे बचें

गलती

यह क्यों होता है

इसे कैसे ठीक करें

पेज लोड होने पर माइक्रोफ़ोन का अनुरोध करना

यह मान लेना कि अनुमति पहले ही मांगी जानी चाहिए

केवल एक स्पष्ट उपयोगकर्ता कार्रवाई के बाद getUserMedia को कॉल करें

असमर्थित ब्राउज़रों के लिए कोई फॉलबैक नहीं होना

विकास और क्यूए (QA) केवल क्रोम में होता है

समर्थन का पता लगाएं और टेक्स्ट इनपुट का विकल्प प्रदान करें

असंपीड़ित PCM ऑडियो भेजना

MediaRecorder डिफ़ॉल्ट अलग-अलग ब्राउज़र में भिन्न होते हैं

mimeType को स्पष्ट रूप से सेट करें; पेलोड को कुशल रखने के लिए Opus या WebM का उपयोग करें

WebSocket रीकनेक्शन को अनदेखा करना

नेटवर्क के टूटने को घातक त्रुटि मानना

एक्सपोनेंशियल बैकऑफ़ के साथ सत्र को फिर से शुरू करने का लॉजिक जोड़ें

अंतरिम परिणामों को अंतिम के रूप में प्रदर्शित करना

एकल टेक्स्ट फ़ील्ड को रेंडर करना अधिक सरल होता है

कम्पोनेंट स्टेट में अंतरिम और अंतिम अवस्था को अलग-अलग ट्रैक करें

सब कुछ एक साथ लाना: प्रोटोटाइप से प्रोडक्शन तक

तेज़ कनेक्शन वाले शांत कार्यालय में काम करने वाला स्पीच रिकग्निशन वेब ऐप और वास्तविक उपयोगकर्ताओं के लिए काम करने वाला ऐप, दोनों बहुत अलग चीज़ें हैं। प्रोडक्शन के लिए तैयार होने का मतलब है विभिन्न लहजों, पृष्ठभूमि के शोर और अस्थिर नेटवर्क पर परीक्षण करना। इसका मतलब यह भी है कि जब आपका API डाउन हो तो काम सुचारू रखने की योजना बनाना, और जेनेरिक बेंचमार्क पर भरोसा करने के बजाय अपनी डोमेन शब्दावली पर वर्ड एरर रेट (WER) को मापना।

वेब स्पीच API आंतरिक टूल, डेमो और उन वातावरणों के लिए बढ़िया है जहाँ आप ब्राउज़र को नियंत्रित करते हैं। एक बार जब आप ग्राहकों के सामने पेश की जाने वाली कोई चीज़ बना रहे होते हैं, तो एक समर्पित ASR API आमतौर पर सटीकता, विश्वसनीयता और कस्टमाइज़ेशन की आवश्यकताओं पर अधिक नियंत्रण प्रदान करता है। ऊपर दिया गया WebSocket स्ट्रीमिंग पैटर्न संगत एंडपॉइंट्स पर पोर्टेबल है, इसलिए आपके द्वारा अभी किया गया एकीकरण का प्रयास बाद में प्रदाता बदलने पर व्यर्थ नहीं जाएगा।

अधिकांश टीमें पहले सफल ट्रांसक्रिप्शन पर नहीं अटकतीं। वे उसके बाद आने वाली हर चीज़ पर अटक जाती हैं: जैसे लेटेंसी का अजीब लगना, विशिष्ट शब्दों पर सटीकता का गिर जाना, और ऐसे मामले जो केवल वास्तविक दुनिया में सामने आते हैं। यही वह अंतर है जिसे API की गुणवत्ता और डोमेन सपोर्ट को भरना होता है। Smallest.ai का Pulse स्पीच-टू-टेक्स्ट API उसी प्रोडक्शन चरण के लिए डिज़ाइन किया गया है: WebSocket पर लो-लेटेंसी स्ट्रीमिंग ट्रांसक्रिप्शन, प्रोडक्शन स्पीच रिकग्निशन वर्कफ़्लो के लिए समर्थन, और एक ऐसा इंटीग्रेशन मॉडल जो फ्रंटएंड रीराइट किए बिना यहाँ वर्णित आर्किटेक्चर से मेल खाता है। यदि आप प्रोटोटाइप से आगे बढ़ने के लिए तैयार हैं, तो Smallest.ai मूल्य निर्धारण देखें या अधिक तकनीकी वॉयस AI नोट्स के लिए हमारा ब्लॉग ब्राउज़ करें।

Frequently asked questions

Frequently asked questions

किसी वेब ऐप में स्पीच रिकग्निशन जोड़ने का सबसे आसान तरीका क्या है?

क्या वेब ऐप में स्पीच रिकॉग्निशन (आवाज पहचानने) के लिए HTTPS की आवश्यकता होती है?

मैं अपने वेब ऐप में अलग-अलग लहजों (accents) और बैकग्राउंड के शोर से कैसे निपटूं?

क्या मैं किसी बाहरी सर्वर पर ऑडियो भेजे बिना वेब ऐप में स्पीच रिकग्निशन (आवाज पहचान) का उपयोग कर सकता हूँ?

Smallest.ai Pulse की तुलना ब्राउज़र के इन-बिल्ट स्पीच रिकग्निशन (आवाज़ पहचानने की तकनीक) से कैसे की जा सकती है?

Summarize with AI