सिरी "बोर्ड पर" के साथ iPhone 4S की रिहाई के बाद, एप्पल के बाकी गैजेट्स के मालिकों को थोड़ा बचा हुआ लगा। यहां तक कि Apple ने अपने नए iPad में सिरी को शामिल नहीं किया। दुनिया भर के डेवलपर्स ने सिरी को अन्य उपकरणों में पोर्ट करने या समान समकक्ष लिखने का प्रयास किया है। और केवल रूसी-भाषा ऐप स्टोर चुप था। शायद सभी डेवलपर्स बहुत व्यस्त हैं, मैंने सोचा, और इस कष्टप्रद गलतफहमी को ठीक करने का फैसला किया ...
अस्वीकरण:
1. "एनालॉग" शब्द उद्धरण चिह्नों में व्यर्थ नहीं है। मेरा आवेदन सिरी के लिए थोड़ा सा अनुरूप नहीं है, लेकिन एक शौकिया शिल्प है। मैं समझता हूं कि सिरी के समान कुछ बनाने के लिए, आपको विशाल संसाधनों और बहुत सारे पैसे की आवश्यकता है।
2. हाँ, मुझे पता है कि Apple बताता है कि यह 4S में निर्मित कुछ विशेष शोर में कमी चिप के कारण अन्य iPhones का समर्थन नहीं करता है। लेकिन मैं दृढ़ता से इस पर विश्वास नहीं करता, सबसे अधिक संभावना है कि उनके सर्वर 4 एस से लोड का सामना नहीं करते हैं। और अगर आप सभी Apple गैजेट्स को सिरी से जोड़ते हैं, तो सर्वर क्रैश हो जाते हैं।
3. एप्लिकेशन को केवल मनोरंजन के लिए बनाया गया था और किसी भी व्यावहारिक लक्ष्य का पीछा नहीं किया था। और इसके अलावा, मुख्य काम भी काम किया।
7 दिन में क्यों?
शुरू में, मैंने कई कारणों से इस परियोजना पर बहुत समय नहीं बिताने का फैसला किया। सबसे पहले, मैंने बहुत सारे लेख पढ़े जहां लिखा गया था कि ऐप्पल स्टोर में ऐप्पल सिरी के समान कार्यक्रमों को याद नहीं करता है। इसके अलावा, वह ऐप स्टोर से मौजूदा लोगों को हटाने की कोशिश कर रहा है, उदाहरण के लिए एवी। इसलिए, एक उच्च संभावना है कि मेरा कार्यक्रम याद नहीं होगा। जैसा कि यह मेरे द्वारा लिखित rutracker.org के लिए क्लाइंट के साथ हुआ था। मैंने 4 बार 4 बार समीक्षा के लिए आवेदन भेजा, सेंसर ने मुझे जो कुछ भी बताया, उसे ठीक किया, लेकिन यह कार्यक्रम ऐप स्टोर में नहीं आया (मैंने बाद में इस व्यवसाय पर थूक दिया और w3bsit3 -dns.com पर स्ट्रिप-डाउन संस्करण पोस्ट किया, इसलिए मैंने काम नहीं खोया)। दूसरे, निश्चित रूप से, मेरे पास पूरा कार्यक्रम लिखने के लिए संसाधन नहीं हैं।
पहला दिन। डिज़ाइन
सबसे पहले, मैंने सोचा कि एप्लिकेशन लॉजिक को स्वयं। स्वाभाविक रूप से, पाठ रूपांतरण के लिए भाषण और भाषण के सभी पाठ सर्वर पर किए जाने चाहिए। और आवेदन केवल एक इंटरफ़ेस है। इस मामले में, समाधान सबसे कमजोर उपकरणों पर भी काम करेगा, साथ ही क्रॉस-प्लेटफॉर्म भी होगा। एंड्रॉइड और विंडोज फोन पर पोर्टेबिलिटी के लिए, आपको बस इन प्लेटफार्मों पर एक इंटरफ़ेस लिखना होगा।
इस प्रकार, आवेदन तर्क इस प्रकार है:
ए) हम वार्ताकार के भाषण को रिकॉर्ड करते हैं और इसे मान्यता के लिए सर्वर पर प्रसारित करते हैं;
बी) हम सर्वर से मान्यता प्राप्त लाइन प्राप्त करते हैं, और हम आसान प्रारंभिक प्रसंस्करण करते हैं। ये सबसे आम सवालों के जवाब हैं, मैट और शाप को काटते हैं, यांडेक्स खोज और मौसम पूर्वानुमान खोज के लिए अवरोधन शब्द हैं। अन्य आदेश जैसे एसएमएस या चेक मेल भेजते हैं, अब तक समीक्षा के माध्यम से नहीं जाने की आशंका के कारण एम्बेड नहीं करने का निर्णय लिया गया;
सी) हम मान्यता के लिए हमारे सर्वर को फ़िल्टर्ड लाइन भेजते हैं। और हम जवाब के साथ एक पंक्ति में प्रतिक्रिया करते हैं;
डी) भाषण में रूपांतरण के लिए सर्वर को एक प्रतिक्रिया भेजें, एमपी 3 स्ट्रीम का लिंक प्राप्त करें और प्रतिक्रिया खेलें;
हां, यह धीरे-धीरे निकलता है, लेकिन अभी तक मुझे एक और विकल्प नहीं दिखता है, सिवाय एक सर्वर पर यह सब मिलाने के। लेकिन यह लागत का एक पूरी तरह से अलग क्रम है: एक समर्पित शक्तिशाली सर्वर सबसे अधिक संभावना नहीं है; पाठ को भाषण में परिवर्तित करने के लिए एक भाषण मान्यता इंजन की खरीद और लाइसेंस आदि, तो आइए अब हम इस तरह के तर्क पर ध्यान दें।
दूसरा दिन। खोज इंजन
मुझे इंजन की तलाश है। यह कोई छोटी समस्या नहीं थी। सबसे पहले, उनमें से अधिकांश का भुगतान किया जाता है और प्रति 1000 शब्दों पर $ 50 से कम नहीं होता है, दूसरी बात, बहुत कम राशि रूसी भाषण को पहचानती है, और तीसरी बात, जो रूसी को पहचानते हैं उनकी गुणवत्ता बस भयानक है।
मैं ispeech.org इंजन पर रुक गया। सबसे पहले, यह आपको एक बार में "भाषण से पाठ" और "पाठ से भाषण" के दो रूपांतरण करने की अनुमति देता है। दूसरे, इसमें आईफोन के लिए एसडीके है और इस एसडीके का उपयोग करते समय, एक कुंजी और मान्यता मुफ्त है, और मुफ्त है। स्वाभाविक रूप से, "गेंदों" के लिए मुझे कुछ बलिदान करना पड़ा। वह घृणित रूप से रूसी शहरों को पहचानता है। इसलिए, कुछ कठिन-से-उच्चारण शहर में मौसम का पूर्वानुमान लगाना यथार्थवादी नहीं है। मॉस्को में, कोई समस्या नहीं।
इसकी एपीआई सीखना। मैं JSON प्रारूप पर बस गया। मैं सर्वर की कुंजी, भाषा पहचानने के लिए सेवा, ध्वनि फ़ाइल प्रारूप और भाषण के रूप में सेवा क्षेत्र, base64encode में एन्कोडेड .wave फ़ाइल। मुझे उत्तर मिलता है, JSON प्रारूप में भी, त्रुटि, अगर एक त्रुटि। और पाठ और मान्यता सटीकता की एक पंक्ति, अगर सफलता।
उसी तरह, उलटा परिवर्तन किया जाता है। मैं सर्वर के लिए बोलने, एक भाषा और सेवा क्षेत्रों के लिए एक पंक्ति भेजता हूं और मुझे प्रतिक्रिया में एक एमपी 3 स्ट्रीम मिलती है, जिसे मैं खेलता हूं।
तीसरा दिन। मैं एक आवेदन लिखना शुरू कर रहा हूं। डिज़ाइन
मैं सिरी के समान कुछ पाने की कोशिश करता हूं, लेकिन यह बिल्कुल दोहराता नहीं है, अन्यथा सेंसर काट दिया जाएगा।
यहाँ क्या हुआ है।

वैसे, मैं कोई डिजाइनर नहीं हूं। दिन बर्बाद हो गया।
चौथा दिन। मैं एप्लिकेशन लॉजिक लिख रहा हूं
साधारण http पोस्ट अनुरोधों के साथ कुछ भी जटिल नहीं है। मैं एपीआई एम्बेड करता हूं। पहले परीक्षण। हुर्रे !!! यह काम करता है, लेकिन बहुत तेज नहीं। जब WI FI सामान्य है, हालांकि वास्तविक सिरी की तुलना में धीमी है। 3 जी के साथ, यह धीमा हो जाता है। जीपीआरएस के साथ, यह सिर्फ यातना है, और आप जवाब के लिए इंतजार नहीं कर सकते। मैं इसका कारण जल्दी समझ गया। लहर फ़ाइल सर्वर से संकुचित है, ULAW कोडेक द्वारा संपीड़ित, 44 kHz नमूनाकरण। फ़ाइल विशाल हो जाती है, इसे 8 KHz पर आवाज के लिए संपीड़ित करना आवश्यक है। कुछ काम नहीं करता है। मैं खुद को चिह्नित करता हूं कि कोई समस्या है, मैं उस पर स्कोर करता हूं और आगे बढ़ता हूं। मैं मैट और शाप फ़िल्टर करता हूं।

5 वें दिन। यैंडेक्स और मौसम में खोज का एकीकरण। ऐप स्टोर में भेजा जा रहा है
मैं "खोज", "खोज", "खोज", "मौसम", आदि जैसे प्रमुख क्षेत्रों को उजागर करता हूं। विश्वसनीयता के लिए, यह पूछना आवश्यक है कि हम वास्तव में क्या देख रहे हैं और किस शहर में मौसम पूर्वानुमान की आवश्यकता है। लगता है। यह पता चला है कि शहरों को खराब तरीके से समझा जाता है। इतना श्रम गायब हो जाता है, लेकिन इस सुविधा को दूर नहीं फेंकने का फैसला किया, अचानक इंजन अंततः शहर को बेहतर ढंग से समझने के लिए सीखता है। मैं बार-बार परीक्षण कर रहा हूं। परिणाम से संतुष्ट हैं। मैं ऐप स्टोर में एप्लिकेशन पोस्ट करता हूं, जब मैं अपना सर्वर लिखता हूं तो इसे रिव्यू का इंतजार करना चाहिए।


6 वें दिन। भाषाविज्ञान और भाषण विश्लेषण। सर्वर वर्तनी
मैं कृत्रिम बुद्धिमत्ता और भाषण विश्लेषण पर साहित्य का अध्ययन करता हूं। चुपचाप चोदना। मैं मूल बातें मास्टर करता हूं। मैं अब तक तय करता हूं कि कृत्रिम बुद्धिमत्ता से परेशान न हों, लेकिन केवल एप्लिकेशन को वाक्यांशों में पार्स करने के लिए, सबसे सरल विश्लेषण करें, कीवर्ड का चयन करें और उन्हें डेटाबेस में पहले से ही खोजें।
मैं एक संक्षिप्त विचार को रेखांकित करता हूं कि किस दिशा में जाना है। इसलिए मैं ज्ञान का आधार बनाता हूं, खोज करके, मैं वाक्य से चुने गए कीवर्ड की तुलना आधार के साथ करता हूं और उस रिकॉर्ड को जारी करता हूं जो प्रश्न के सबसे निकट से मेल खाता है।
मैं वार्ताकार कार्यक्रमों के लिए खुले स्रोतों के शब्दकोशों में पाता हूं, निश्चित रूप से उनकी गुणवत्ता पर्याप्त नहीं है और उन्हें परिष्कृत करना आवश्यक होगा। लेकिन एक शुरुआत के लिए यह करेगा।
मैं अपने सर्वर पर जवाब खोजने के लिए एक जटिल PHP प्रोग्राम नहीं लिख रहा हूं। ताकि बाहरी लोग सर्वर का उपयोग न करें और इसे ड्रॉप न करें, यह फोन द्वारा टोकन के हस्तांतरण के लिए प्रदान किया गया है, जो आवेदन में हार्ड-वायर्ड है। प्राधिकरण पर रहते हुए मैंने फैसला किया कि मैं ज्यादा परेशान नहीं करूंगा।
मैंने यह भी निर्णय लिया कि मैं अभी तक जीपीएस सर्वर से फोन को प्रसारित नहीं करूंगा, हालांकि मुझे यह विचार पसंद है। फोन के निर्देशांक को जानने के बाद, आप मौसम का पूर्वानुमान जारी करने के लिए मौसम सर्वर के एपीआई का उपयोग कर सकते हैं। आप निकटतम बार, कैफे, दुकानों को खोजने के लिए फोन के निर्देशांक का भी उपयोग कर सकते हैं। लेकिन फिर से, हमें एक सामान्य एपीआई के साथ एक संसाधन की आवश्यकता है, जिसके लिए मैंने एक अनुरोध भेजा और समन्वय किया और एक स्पष्ट उत्तर प्राप्त किया। मैंने इस विचार को लिखा और इसे बाद के लिए स्थगित कर दिया अगर मैं आवेदन का एक नया संस्करण लिखूंगा।
पूछे गए सभी प्रश्न और उनके उत्तर डेटाबेस में दर्ज किए जाते हैं, वैसे टेलीफोन के यूडीआईडी [आईएमईआई] भी। जी हां बिग ब्रदर आपको (सिर्फ मजाक करते हुए) देख रहा है। वास्तव में, यह कार्यक्रम के विकास के लिए आवश्यक है। पूछे गए प्रश्नों को जानने के बाद, मैं जल्दी से ज्ञान के आधार को फिर से भर सकता हूं और कार्यक्रम के ग्लिट्स को पकड़ सकता हूं। आगे के विकास के लिए यूडीआईडी की जरूरत है। मैं पिछले प्रश्नों को याद करने के लिए कार्यक्रम की योजना बनाता हूं, इसलिए मैं फोन की पहचान करने के लिए यूडीआईडी का उपयोग करता हूं। पिछले प्रश्नों को जानकर, आप एप्लिकेशन व्यवहार को और अधिक बुद्धिमान बना सकते हैं। दिलचस्प बात यह है कि संवाद बनाते समय सिरी पिछले सवालों को ध्यान में रखता है?
ज्ञानकोष में उत्तर खोजते समय, पूर्ण-पाठ खोज MATCH-AGAINST का उपयोग किया जाता है। नियमित एसक्यूएल क्वेरी, कुछ खास नहीं।
सातवाँ दिन। आज
मैंने परीक्षण किया कि ज्ञान आधार में खोज कैसे काम करती है। मैं संतुष्ट था। मैं हैबर पर एक लेख लिखने के लिए बैठ गया, और मेरे 12 वर्षीय बेटे ने ज्ञान का आधार सिखाने की इच्छा व्यक्त की।
उन्होंने इंटरनेट पर ऐसी जानकारी पाई, जो सिरी से अक्सर पूछे जाने वाले सवाल पूछती है, और मैं लंबे समय तक हंसता रहा। फिलहाल मैं यह लेख लिख रहा हूं, और वह दुनिया की अपनी समझ को "मशीन के प्रमुख" में डालता है। वह VKontakte Odnoklassniki और अधिक से बेहतर है। निश्चित रूप से, मैं तब हर चीज का सत्यापन करूंगा जो उसने वहां आधार के लिए लाई थी।


परिणाम
क्या हुआ?सात दिनों के लिए, एक साधारण आभासी वार्ताकार लिखना संभव है जो बातचीत का समर्थन कर सकता है और कुछ सवालों के जवाब दे सकता है। बेशक, सिरी से पहले, वह चंद्रमा के लिए पसंद था, लेकिन थोड़ा मनोरंजन के रूप में काफी उपयुक्त है। यह "एंटरटेनमेंट" श्रेणी में है, अगर सेंसर ने आवेदन को छोड़ दिया, तो यह गिर जाएगा।
इसे एंड्रॉइड और विडो फोन में आसानी से पोर्ट किया जा सकता है।
कार्यक्रम के नुकसान।1. लहर प्रारूप के कारण सर्वर को लंबे समय तक भाषण देना।
मैं नमूना दर 8 KHz तक कम करने की योजना बना रहा हूं, लेकिन मुझे नहीं पता कि अभी तक कैसे।
2. बहुत अच्छा भाषण मान्यता नहीं है, विशेष रूप से रूसी शहरों में, मान्यता इंजन द्वारा।
शायद मैं Google इंजन का उपयोग करूंगा, वह बेहतर बोलता है। लेकिन उसके लिए, आपको भाषण को FLAC प्रारूप में ट्रांसकोड करने की आवश्यकता है, जिसे मैं यह भी नहीं जानता कि कैसे करना है। हमें उचित पुस्तकालय की तलाश करने की आवश्यकता है। और, ज़ाहिर है, सवाल इस तरह के पथ की लाइसेंसशुदा शुद्धता का है ।
3. सिरी की तुलना में धीमी गति से चलता है।
यह केवल स्पीच रिकग्निशन इंजन खरीदकर और इसे अपने समर्पित सर्वर पर स्थापित करके हल किया जाता है। मुझे यकीन नहीं है कि मैं इस तरह से जाऊंगा, यह बहुत महंगा है।4. सिरी क्या ज्यादा नहीं कर सकता।
खैर, इस समस्या को अपडेट की रिहाई और ज्ञान के आधार के विकास से हल किया गया है। यह केवल समय की बात है और इसके लिए आवंटित धनराशि।यदि आप कुछ बिंदुओं से चूक गए हैं, तो मैं टिप्पणियों में जवाब देने के लिए तैयार हूं।
UPD: हब्रज़िटेल के अनुरोध पर और चूक से बचने के लिए, मैंने एक वीडियो जोड़ा।
www.youtube.com/watch?v=UzFGgH741CwUPD2: एक और वीडियो जोड़ा गया।
www.youtube.com/watch?v=LVlllVSyln8UPD3: यहां Prerelease संस्करणwww.youtube.com/watch?v=JlkJva-TGfY