समस्या का विवरण
मैं एक हार्डवेयर प्रोजेक्ट के हिस्से के रूप में वॉइस रिकग्निशन का उपयोग करना चाहता हूं, जिसे मैं पूरी तरह से स्व-युक्त होना चाहता हूं (मैं छोटी कम शक्ति का उपयोग कर रहा हूं, कम गति वाले उपकरण जैसे कि Arduino's और Raspberry Pi's, Kinects आदि, कोई भी पारंपरिक कंप्यूटर नहीं चल रहा है एक OS शामिल है। इसलिए एक बंद / स्वयं युक्त परियोजना)।
आवाज पहचान आप चाहते हैं परिष्कार के स्तर के आधार पर बहुत जटिल हो सकता है। मेरे पास वही है जो मेरा मानना है कि आवश्यकताओं का तुलनात्मक सरल सेट है। मैं केवल अपनी खुद की आवाज पहचानना चाहता हूं, और मेरे पास 20 या उससे छोटे शब्द हैं, जिन्हें मैं पहचानना चाहता हूं। इस प्रकार मुझे जटिल भाषण-से-पाठ और आवाज मान्यता पुस्तकालयों या किसी भी उत्कृष्ट 3 पार्टी सॉफ्टवेयर की आवश्यकता नहीं है जो मुझे इंटरनेट खोज इंजन के माध्यम से मिलें (इनमें कोई कमी नहीं है!)। मेरा मानना है कि मेरी आवश्यकताएं "सरल पर्याप्त" (कारण के भीतर) हैं जो मैं अपने समाधान का कोड कर सकता हूं। मैं सोच रहा हूं कि क्या किसी ने भी इस तरह की अपनी प्रक्रिया लिखी है, और क्या मेरा तरीका व्यापक रूप से त्रुटिपूर्ण है? क्या गणित के उच्च स्तर की आवश्यकता के बिना ऐसा करने का एक बेहतर तरीका है या एक जटिल एल्गोरिदम लिखना है? यही वह समाधान है जो मैंने नीचे सोचने की कोशिश की है।
समाधान का वर्णन
मैं सी में यह लिख रहा हूं, लेकिन मैं एक भाषा अज्ञेय प्रक्रिया पर चर्चा करना चाहता हूं, जो इस प्रक्रिया पर ध्यान केंद्रित करता है। तो चलो अनदेखा कर देते हैं कि अगर हम कर सकते हैं।
1 है। मैं बोले जा रहे लोगों से मेल करने के लिए अपने शब्दों के शब्दकोश को पूर्व-रिकॉर्ड करूंगा। हम कल्पना कर सकते हैं कि मेरे पास मेरे 20 अलग-अलग शब्दों की 20 रिकॉर्डिंग हैं, या शायद छोटे वाक्यांश या दो या तीन शब्दों के वाक्य हैं। मेरा मानना है कि यह दो रिकॉर्डिंग फ़ाइलों की तुलना करने की प्रक्रिया को वास्तव में ऑडियो को टेक्स्ट में परिवर्तित करने और दो स्ट्रिंग्स की तुलना करने की प्रक्रिया को आसान बनाता है।
२।एक माइक्रोफोन मेरे कोड को चलाने वाले मेरे हार्डवेयर डिवाइस से जुड़ा है। [1]। कोड लगातार निश्चित लंबाई के नमूने ले रहा है, उदाहरण के लिए लंबाई में 10msec और एक गोलाकार लॉग शैली में उदाहरण के लिए लगातार 10 नमूने संग्रहीत करने का कहना है। [2]। (मैं अपने सिर के ऊपर से इन आंकड़ों का आविष्कार कर रहा हूं ताकि वे इस प्रक्रिया का वर्णन करने के लिए केवल उदाहरण हैं)।
[१] यह संभवत: एक बैंड-पास फिल्टर और ऑप-एम्प के माध्यम से जुड़ा होगा, जैसा कि शब्दकोश रिकॉर्डिंग बनाया जाएगा, संग्रहीत और एकत्र ऑडियो नमूनों को छोटा रखने के लिए।
[२] मुझे यकीन नहीं है कि मैं एक नमूना कैसे लूंगा, मुझे एक विधि पर काम करने की आवश्यकता है, हालांकि मैं एक संख्यात्मक आंकड़ा (पूर्णांक / फ्लोट / डबल) का उत्पादन कर रहा था जो १० एमएमसी नमूने के ऑडियो का प्रतिनिधित्व करता है (शायद एक सीआरसी मान या ऑडियो नमूने के एमडी 5 योग), या आंकड़ों की एक धारा (शायद आवृत्तियों के ऑडियो रीडिंग की एक धारा)। अंततः एक "नमूना" एक संख्यात्मक आंकड़ा या आंकड़े होंगे। यह हिस्सा बहुत अधिक हार्डवेयर से जुड़ा होने वाला है इसलिए वास्तव में यहाँ चर्चा के लिए नहीं है।
३। कोड यह देखता है कि यह लगातार 10 नमूने संग्रहीत है और किसी शब्द या वाक्यांश को इंगित करने के लिए वॉल्यूम में वृद्धि के लिए लग रहा है (मौन से विराम) और फिर उदाहरण के लिए 500 नमूने कहने के लिए लगातार नमूना संग्रह बढ़ रहा है। इसका मतलब है कि यह 10 मिसे नमूने में 5 सेकंड के ऑडियो को कैप्चर करेगा।
यह ये नमूने या "स्लाइस" हैं जिनकी तुलना संग्रहीत ध्वनि और कैप्चर की गई ध्वनि के बीच की जाती है। यदि कैप्चर किए गए नमूनों का उच्च प्रतिशत समान संग्रहीत लोगों से मेल खाता है, तो कोड उसी शब्द को मानता है।
The start of a store recording of the world "hello" for example,
stored words are split into 10 msec samples also
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming audio (me saying "hello") with some "blank" samples
at the start to symbolise silence
Incoming Sample No | 1| 2| 3| 4| 5| 6| 7| 8| 9|10| 11|12|
Incoming Sample Value | | | |20|27|38|46|16|59|77|200|78|
४। एक बार जब कोड ने एक पूर्ण नमूना स्ट्रीम एकत्र कर लिया है, तो यह निम्न ऑडियो रिकॉर्डिंग का उत्पादन करने के लिए प्रारंभ में रिक्त नमूनों को काट देता है। यह नमूना सेट को पीछे की ओर भी ले जा सकता है और संग्रहीत नमूने के साथ बेहतर संरेखित करने के लिए कुछ स्थानों को आगे पीछे कर सकता है।
यह नीचे की तरह एक नमूना सेट का उत्पादन करता है:
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming Sample No |-1| 1| 2| 3| 4| 5| 6| 7| 8|
Incoming Sample Value |20|27|38|46|16|59|81|201|78|
५। मेरा मानना है कि प्रत्येक नमूना कितना पास होना चाहिए, इसका प्रतिशत मूल्य है, इसलिए नमूना 7 1 के मूल्य से भिन्न होता है जो कि% 1 से कम है, और नमूनों की कुल संख्या के लिए प्रतिशत मूल्य जो उनके नमूना मिलान प्रतिशत के भीतर होना चाहिए। कोड में सटीकता का आसानी से ट्यून करने योग्य स्तर है।
मैंने पहले कभी ऑडियो के साथ ऐसा कुछ नहीं किया, यह बहुत काम आ सकता है। यही कारण है कि मैं यह प्रश्न पूछ रहा हूं, यदि आप पहले से ही इस प्रश्न का उत्तर स्पष्ट जानते हैं (जो कभी भी उत्तर हो सकता है)। मुझे उम्मीद है कि यह एक कम्प्यूटेशनल रूप से बड़े पैमाने पर कार्य नहीं होगा क्योंकि कुछ हार्डवेयर जो मैं उपयोग कर रहा हूं, वे कम सेकंड सामान होंगे। सैकड़ों मेगाहर्ट्ज़ में (शायद 1Ghz एक ओवर-क्लॉक्ड रास्प पाई का उपयोग करके)। इसलिए यह कम कम्प्यूटेशनल शक्ति का उपयोग करते हुए ऑडियो नमूनों का मिलान करने के लिए एक कच्चा तरीका है। मैं तात्कालिक परिणामों के लिए लक्ष्य नहीं बना रहा हूं, लेकिन अवधारणा के एक सभ्य प्रमाण के लिए 30 सेकंड से भी कम समय।
PS मुझे "ऑडियो", "ऑडियो रिकॉग्निशन", "वॉयस", "वॉयस रिकॉग्निशन" आदि जैसे नए टैग के साथ इसे टैग करने का रेप नहीं है