2013-08-22 7 views
7

Ich habe in letzter Zeit darüber nachgedacht, eine Anwendung basierend auf Spracherkennung zu starten. Bedeutung bestimmter Ergebnisse für bestimmte Aufgaben. Ich habe mich gefragt, wie ich am besten vorgehen soll. Ich denke entweder für PC oder Android auch. Ich würde JAVA als meine starke Programmiersprache betrachten.Open-Source-Spracherkennungssoftware in Java

Ich habe einige der Suche getan, aber ich weiß noch immer nicht, was der beste Weg, dies zu nähern.

haben eine offene Software, um die Spracherkennung Teil für mich und die Arbeit an dem anderen Teil zu tun? Mache das Ganze alleine? Und wenn ja, ist das in JAVA möglich?

Jede Info wird geschätzt.

Vielen Dank im Voraus.

Antwort

6

Der beste Weg, um diesen Ansatz eine bestehende Anerkennung Toolkit und die Sprache und akustische Modelle verwenden würde, die mit ihm gekommen. Sie können die Modelle an Ihre Bedürfnisse anpassen.

CMUSphinx ist wahrscheinlich die beste FOSS Spracherkennung Toolkit gibt. CMUSphinx bietet auch gute Java-Integration und Demo-Anwendungen.

+0

Nicht das erste Mal, dass ich von CMUSphinx gehört habe, während ich gesucht habe. Danke für die Info. – LefterisL

1

Sie können auch die Google Speech API verwenden. Von Android ist es der SpeechRecognizer zugänglich durch Class Reference

Hier ein Link zu einer Stackoverflow Frage, die auch einige Demo-Code in Java enthält: Speech recognition in Java

4

Nach einigen 3rd-Party-Spracherkennungsoptionen Auswertung Anerkennung Google Voice wird durch weit am genauesten. Bei der Verwendung der Google-Spracherkennung gibt es zwei grundlegende Ansätze. Am einfachsten ist es, eine Absichtserklärung zu starten und die Ergebnisse entsprechend zu behandeln:

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); 

dann in Ihrem onActivityResults(), würden Sie die Spiele zurück durch den Dienst behandeln:

/** 
* 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); 
     }      
    }  
} 

Der zweite Ansatz ist mehr beteiligt ermöglicht jedoch eine bessere Behandlung einer Fehlerbedingung, die auftreten kann, während der Erkennungsdienst ausgeführt wird. Mit diesem Ansatz würden Sie eigene Erkennungslistener und Rückrufmethoden erstellen. Zum Beispiel:

Start Zuhören:

mSpeechRecognizer.startListening(mRecognizerIntent); 

wo 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"); 

dann, erstellen Sie Ihre Zuhörer:

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"); 

      } 

}; 

Sie handle hinzufügen können() zu tun, was auch immer Sie wollen.