2013-08-22 7 views
7

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

मैंने कुछ खोज किया है लेकिन फिर भी मुझे नहीं पता कि इस तक पहुंचने का सबसे अच्छा तरीका कौन सा है।

क्या खुले सॉफ्टवेयर मेरे लिए भाषण मान्यता हिस्सा करते हैं और दूसरे भाग पर काम करते हैं? खुद से पूरी चीज करो? और यदि जावा में यह हाँ संभव है?

किसी भी जानकारी की सराहना की जाएगी।

अग्रिम धन्यवाद।

उत्तर

6

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

CMUSphinx शायद वहां सबसे अच्छा FOSS भाषण मान्यता टूलकिट है। सीएमयूएसफिनक्स भी अच्छा जावा एकीकरण और डेमो अनुप्रयोग प्रदान करता है।

+0

जब मैं खोज रहा था तब पहली बार मैंने सीएमयूएसफ़िनक्स के बारे में नहीं सुना है। जानकारी के लिए धन्यवाद। – LefterisL

1

आप Google स्पीच एपीआई का भी उपयोग कर सकते हैं। एंड्रॉयड से यह SpeechRecognizer Class Reference

के माध्यम से पहुँचा जा सकता है यहाँ एक stackoverflow सवाल है, जो भी जावा में कुछ डेमो कोड शामिल करने के लिए एक कड़ी है: Speech recognition in Java

4

कई 3 पार्टी भाषण मान्यता विकल्पों मूल्यांकन करने के बाद, Google ध्वनि पहचान से है अब तक का सबसे सटीक है। Google वॉयस पहचान का उपयोग करते समय दो बुनियादी दृष्टिकोण हैं।

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 

    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 
अपने onActivityResults(), तो आपको मैचों सेवा द्वारा दिया संभाल होगा

तो:

/** 
* Handle the results from the recognition activity. 
*/ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    //Toast.makeText(this, "voice recog result: " + resultCode, Toast.LENGTH_LONG).show(); 
    if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
     // Fill the list view with the strings the recognizer thought it could have heard 
     ArrayList<String> matches = data.getStringArrayListExtra(
       RecognizerIntent.EXTRA_RESULTS); 
     // handleResults 
     if (matches != null) { 
      handleResults(matches); 
     }      
    }  
} 

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

शुरू सुन: उदाहरण के लिए:

mSpeechRecognizer.startListening(mRecognizerIntent); 

जहां mRecognizerIntent:

mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(getBaseContext()); 
    mSpeechRecognizer.setRecognitionListener(mRecognitionListener); 
    mRecognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    mRecognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    mRecognizerIntent.putExtra("calling_package", "com.you.package"); 

तो, अपने श्रोता बनाएँ:

private RecognitionListener mRecognitionListener = new RecognitionListener() { 
      public void onBufferReceived(byte[] buffer) { 
        // TODO Auto-generated method stub 
        //Log.d(TAG, "onBufferReceived"); 
      } 

      public void onError(int error) { 
        // TODO Auto-generated method stub 
        // here is where you handle the error... 


      public void onEvent(int eventType, Bundle params) { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onEvent"); 
      } 

      public void onPartialResults(Bundle partialResults) { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onPartialResults"); 
      } 

      public void onReadyForSpeech(Bundle params) { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onReadyForSpeech"); 

      } 

      public void onResults(Bundle results) { 

        Log.d(TAG, ">>> onResults"); 
        //Toast.makeText(getBaseContext(), "got voice results!", Toast.LENGTH_SHORT); 

        ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
        handleResults(matches); 


      } 

      public void onRmsChanged(float rmsdB) { 
        // TODO Auto-generated method stub 
        //Log.d(TAG, "onRmsChanged"); 
      } 

      public void onBeginningOfSpeech() { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onBeginningOfSpeech"); 
      } 

      public void onEndOfSpeech() { 
        // TODO Auto-generated method stub 
        Log.d(TAG, "onEndOfSpeech"); 

      } 

}; 

आप अपने handleResults जोड़ सकते हैं() करने के लिए जो कुछ भी तुम्हें चाहिए।

संबंधित मुद्दे