2010-01-25 15 views
5

क्या कोई जानता है कि .NET एप्लिकेशन के भीतर से मान्यता प्रोफाइल कैसे बदलें?सिस्टम। स्पीच। पहचान पहचान प्रोफाइल का चयन

मैं एक .NET अनुप्रयोग लिख रहा हूं जो System.Speech.Recognition नामस्थान में प्राप्त क्षमताओं का उपयोग करके भाषण मान्यता करता है। मैं जो ऑडियो सिस्टम में खिला रहा हूं वह कई अलग-अलग उपयोगकर्ताओं से आता है। मैं प्रत्येक अलग-अलग उपयोगकर्ताओं से भाषण को अधिक सटीक रूप से पहचानने के लिए सिस्टम को प्रशिक्षित करने में सक्षम होना चाहता हूं।

मुझे विंडोज़ में स्पीच रिकग्निशन कंट्रोल पैनल (इस मामले में विंडोज 7) मिला है जहां मैं प्रशिक्षण प्रोफाइल कॉन्फ़िगर कर सकता हूं। खुद के लिए एक प्रोफाइल स्थापित करना और प्रशिक्षण प्रक्रिया करने से मान्यता की सटीकता में काफी सुधार हुआ। इसलिए मैं प्रत्येक उपयोगकर्ता के लिए प्रोफाइल सेट कर सकता हूं और उन्हें प्रशिक्षण प्रक्रिया कर सकता हूं, लेकिन फिर मुझे अपने आवेदन में सही प्रोफ़ाइल चुनने में सक्षम होना चाहिए।

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

उत्तर

3

मुझे सिस्टम.Speech.Recognition के माध्यम से ऐसा करने का कोई तरीका नहीं दिख रहा है, लेकिन आप इसे भाषण (एसएपीआई आईडीस्पैच-संगत एपीआई) के माध्यम से कर सकते हैं। ISpeechRecognizer::Profile पर देखें।

प्रोफ़ाइल सेट करने के लिए, आप अपने कोड को

using SpeechLib; 

जोड़ने के लिए, System.Speech.Recognition के साथ की आवश्यकता होगी।

मुश्किल भाग आपको उस प्रोफ़ाइल को प्राप्त कर रहा है जिसे आपने स्पीचलिब के माध्यम से 'स्टिक' के माध्यम से सेट किया है, जबकि आप सिस्टम बना रहे हैं। स्पीच। रिकॉग्निशन। रिकॉग्निशनइंजिन। मैं शायद प्रोफ़ाइल को डिफ़ॉल्ट (स्पीचलिब के माध्यम से) सेट कर दूंगा, पहचान पहचानें, और डिफ़ॉल्ट प्रोफ़ाइल को रीसेट कर दूंगा।

(मैं यह सोचते हैं रहा है कि आप साझा पहचानकर्ता है, जो एक बहुउपयोगकर्ता परिदृश्य में काम नहीं करेगा उपयोग करने के लिए योजना नहीं बना रहे।)

आप एक महत्वपूर्ण अनुभाग शायद आवश्यकता होगी सुनिश्चित करने के लिए कि केवल एक ही थ्रेड एक समय में पहचान पहचान कर सकते हैं।

0

उन्हें प्रत्येक को दिए गए उपयोगकर्ता के साथ अपना नाम कहने के लिए कहने के बारे में कैसे?

यदि आप इस समाधान को कुछ प्रमाणीकरण प्राप्त करना चाहते हैं तो यह एक बहुत ही सुरक्षित विधि नहीं है ... आप उन्हें एक दिए गए वाक्यांश का उपयोग करने के लिए कह सकते हैं कि सिस्टम 'निश्चित उपयोगकर्ता' के रूप में पहचाना जाएगा जो नहीं कर सकता वास्तव में फिक्र हो?

हालांकि यह बहुत दिलचस्प है, मुझे कहना होगा।

+0

धन्यवाद ओरेन। मेरे पास वास्तव में यह पता लगाने का एक तरीका है कि कौन सा उपयोगकर्ता सर्वर से कनेक्ट हो रहा है। जो मैं ढूंढने की कोशिश कर रहा हूं वह यह है कि, मुझे पता है कि कौन सा उपयोगकर्ता कनेक्ट है, मैं पहचान इंजन को कैसे निर्दिष्ट कर सकता हूं कि यह एक विशिष्ट पूर्व-कॉन्फ़िगर किए गए प्रशिक्षण प्रोफाइल का उपयोग कर रहा है, ताकि उपयोगकर्ता सटीक रूप से उन शब्दों को पहचान सके जो उपयोगकर्ता ने बोलते हैं। ऐसा लगता है कि यह सी ++ एपीआई के माध्यम से किया जा सकता है, लेकिन मुझे आशा है कि कोई जानता है कि .NET/C# API के माध्यम से इसे कैसे किया जाए। –

0

आप डिफ़ॉल्ट प्रोफ़ाइल को बदलने के लिए रजिस्ट्री का उपयोग कर सकते हैं। रजिस्ट्री में प्रोफाइल की सूची शामिल है। आप आसानी से भाषण गुण संवाद के माध्यम से उन्हें जोड़ सकते हैं। प्रोफ़ाइल को प्रशिक्षित करें और इसका उपयोग करने के लिए तैयार है।

रजिस्ट्री में डिफ़ॉल्ट प्रोफ़ाइल बदलें और भाषण इंजन शुरू करें और यह उस प्रोफ़ाइल का उपयोग कर रहा है। इसने अलग-अलग विंडोज संस्करणों का काम किया है, कई उदाहरणों पर कोशिश नहीं की है।

रजिस्ट्री कुंजी पर स्थित है। HKEY_CURRENT_USER \ Software \ Microsoft \ भाषण \ RecoProfiles HKEY_CURRENT_USER \ Software \ Microsoft \ भाषण \ RecoProfiles \ टोकन के लिए "DefaultTokenId" कुंजी मान बदलें {7A8C84A3-44DA-488F-A27D-BC5BC326A8BE}

यहाँ

है देखने के लिए कैसे प्रोफाइल के माध्यम से और एक प्रोफाइल डिफ़ॉल्ट रूप से सेट करें।

 RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Speech\RecoProfiles\Tokens"); 
     _profiles = rk.GetSubKeyNames(); 
     string findname = "{7A8C84A3-44DA-488F-A27D-BC5BC326A8BE}"; 
     string name = ""; 
     foreach (String s in _profiles) 
     { 
      using (RegistryKey sk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Speech\RecoProfiles\Tokens\" + s)) 
      { 
       if (sk != null) 
        name = (string)sk.GetValue(""); 
       if (name == findname) break; 
      } 
     } 
     RegistryKey rk = Registry.CurrentUser.OpenSubKey(@"Software\Microsoft\Speech\RecoProfiles", true); 
     rk.SetValue("DefaultTokenId", @"HKEY_CURRENT_USER\SOFTWARE\Microsoft\Speech\RecoProfiles\Tokens\" + name);