2016-02-01 7 views
0

У меня есть простое приложение для распознавания голоса, которое печатает всю возможную строку ArrayList, декодированную. Проблема в том, что он работает только в том случае, если я не останавливаю/приостанавливаю между словами. Если у меня есть небольшая пауза (очень короткая, как если бы я была нормальна), приложение останавливается. Я просмотрел параметр SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS, но ничего не изменил.Распознавание голоса: разрыв между словами

Любой ключ от специалиста по распознаванию голоса?

Вот мой код:

package com.bernard.vtt; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.speech.RecognitionListener; 
import android.speech.RecognizerIntent; 
import android.speech.SpeechRecognizer; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 
import java.util.ArrayList; 

public class MainActivity extends Activity implements RecognitionListener { 
    private TextView mText; 
    SpeechRecognizer speech = null; 
    private Intent recognizerIntent; 

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button speakButton = (Button) findViewById(R.id.btn); 
    mText = (TextView) findViewById(R.id.textView1); 

    speech = SpeechRecognizer.createSpeechRecognizer(this); 
    speech.setRecognitionListener(this); 
    recognizerIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_PREFERENCE, 
      "en"); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, 
      this.getPackageName()); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 
    recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3); 

    speakButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      speech.startListening(recognizerIntent); 
     } 
    }); 

} 

@Override 
public void onResults(Bundle results) { 
    ArrayList<String> matches = results 
      .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
    String text = ""; 
    assert matches != null; 
    for (String result : matches) 
     text += result + "\n"; 

    mText.setText(text); 

    speech.stopListening(); 
} 

@Override 
public void onReadyForSpeech(Bundle params) { 

} 

@Override 
public void onBeginningOfSpeech() { 

} 

@Override 
public void onRmsChanged(float rmsdB) { 

} 

@Override 
public void onBufferReceived(byte[] buffer) { 

} 

@Override 
public void onEndOfSpeech() { 

} 

@Override 
public void onError(int error) { 

} 

@Override 
public void onPartialResults(Bundle partialResults) { 

} 

@Override 
public void onEvent(int eventType, Bundle params) { 

} 
+0

Возможный дубликат [Непрерывное распознавание речи Android] (http://stackoverflow.com/questions/3148603/continuous-speech-recognition-android) –

ответ

4

Я считаю, что встроенные системы распознавания речи не постоянно работать. Он предназначен для прослушивания одного голосового ввода и получения результатов. Если вы хотите постоянно слушать, вам необходимо перезапустить распознавание в каждом обратном вызове onResults. Я также считаю, что SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS имеет максимальное значение, поэтому его изменение незначительно.

+0

У меня есть некоторые сомнения, он разработан таким образом, потому что я выполнил те же тесты, используя метод startactivity, и я получаю тот же результат. Я постараюсь, хотя завтра, но я чувствую, что это обходное решение. Мне бы хотелось увидеть больше ответов на мой вопрос. – narb

+2

@narb Непосредственно из [Документации Google] (http://developer.android.com/reference/android/speech/SpeechRecognizer.html): «Реализация этого API, скорее всего, будет передавать аудио на удаленные серверы для выполнения распознавания речи . Таким образом, этот API не предназначен для непрерывного распознавания, который будет потреблять значительное количество батареи и пропускной способности ». – nverbeek

+1

@narb Чтобы продолжить, чтобы выполнять непрерывное распознавание на Android, вам может потребоваться использование стороннего предложения, такого как Nuance. Мы пытались калечить SpeechRecognizer для непрерывного распознавания, поскольку вы ищете здесь, но в конце концов должны были пойти со сторонней стороной. Вы также можете рассмотреть [CMUSphinx] (http://cmusphinx.sourceforge.net/wiki/) для ваших нужд. – nverbeek

Смежные вопросы