【问题标题】:how to integrate speech recognition with my app如何将语音识别与我的应用程序集成
【发布时间】:2015-03-14 19:10:37
【问题描述】:

我想在我的应用中集成语音识别。

例如:当用户说出特定单词时,我将其放入“hello”之类的代码中 它会从我的应用程序中捕获一张图片。 我尝试了许多有关语音识别的代码,但无法将其与我的应用程序集成

  1. 如何集成到我的应用中?
  2. 如何使特定的词进行捕获?

【问题讨论】:

    标签: android speech-recognition integrate


    【解决方案1】:

    将语音显示为文本

    public class MainActivity extends Activity {
    
        private TextView txtSpeechInput;
        private ImageButton btnSpeak;
        private final int REQ_CODE_SPEECH_INPUT = 100;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            txtSpeechInput = (TextView) findViewById(R.id.txtSpeechInput);
            btnSpeak = (ImageButton) findViewById(R.id.btnSpeak);
    
            // hide the action bar
            getActionBar().hide();
    
            btnSpeak.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    promptSpeechInput();
                }
            });
    
        }
    
        /**
         * Showing google speech input dialog
         * */
        private void promptSpeechInput() {
            Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                    RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
            intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());
            intent.putExtra(RecognizerIntent.EXTRA_PROMPT,
                    getString(R.string.speech_prompt));
            try {
                startActivityForResult(intent, REQ_CODE_SPEECH_INPUT);
            } catch (ActivityNotFoundException a) {
                Toast.makeText(getApplicationContext(),
                        getString(R.string.speech_not_supported),
                        Toast.LENGTH_SHORT).show();
            }
        }
    
        /**
         * Receiving speech input
         * */
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            switch (requestCode) {
            case REQ_CODE_SPEECH_INPUT: {
                if (resultCode == RESULT_OK && null != data) {
    
                    ArrayList<String> result = data
                            .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                    txtSpeechInput.setText(result.get(0));
                }
                break;
            }
    
            }
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.main, menu);
            return true;
        }
    
    }
    

    在 txtSpeechInput 框中获取语音。

    【讨论】:

    • 是语音识别的,但是如何和我的项目类集成呢?
    【解决方案2】:

    我想这对你有帮助

       public class YourClassName RecognitionListener{
        private SpeechRecognizer speech = null;
        private Intent recognizerIntent;
        private String LOG_TAG = "VoiceRecognitionActivity";
    
    
    
       @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            setContentView(R.layout.activity_camera);
    
    
     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, getApplication().getPackageName());
            recognizerIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                    RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
            recognizerIntent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 3);
          speech.startListening(recognizerIntent);
    
    
    
    }
    
    
    
      @Override
        public void onReadyForSpeech(Bundle params) {
            Log.i(LOG_TAG+">"+ "onReadyForSpeech");
        }
    
        @Override
        public void onBeginningOfSpeech() {
    
            Log.i(LOG_TAG+"> "+"onBeginningOfSpeech");
    
        }
    
        @Override
        public void onRmsChanged(float rmsdB) {
            Log.i(LOG_TAG+">"+ "onRmsChanged: " + rmsdB);
        }
    
        @Override
        public void onBufferReceived(byte[] buffer) {
            Log.i(LOG_TAG+">"+ "onBufferReceived: " + buffer);
        }
    
        @Override
        public void onEndOfSpeech() {
            Log.i(LOG_TAG+">"+ "onEndOfSpeech");
    
    
        }
    
        @Override
        public void onError(int error) {
            String errorMessage = getErrorText(error);
            Log.d(LOG_TAG+">"+ "FAILED " + errorMessage);
          if(errorMessage.contains("RecognitionService busy"))
          {  speech.stopListening();
            speech.startListening(recognizerIntent);
    
    
          }else if(errorMessage.contains("No speech input")){
              speech.stopListening();
                speech.startListening(recognizerIntent);
    
            }else if(errorMessage.contains("No match")){
              speech.stopListening();
    
              speech.startListening(recognizerIntent);
            }
    //        speech.destroy();
    //        speech.startListening(recognizerIntent);
        }
    
        @Override
        public void onResults(Bundle results) {
            Log.i(LOG_TAG+">"+ "onResults");
            ArrayList<String> matches = results
                    .getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
            String text = "";
            for (String result : matches)
                text += result + "\n";
            if(text.contains("your Keyword here")){
                camera.takePicture(null, null, this);
                Log.v(text+"these are results");
    
            }
    
            Log.v(text+"On result");
        }
    
    
       @Override
        public void onPartialResults(Bundle partialResults) {
            Log.i(LOG_TAG+">"+ "onPartialResults");
        }
    
        @Override
        public void onEvent(int eventType, Bundle params) {
            Log.i(LOG_TAG+">"+ "onEvent");
        }
    
    
        public  String getErrorText(int errorCode) {
            String message;
            switch (errorCode) {
                case SpeechRecognizer.ERROR_AUDIO:
                    message = "Audio recording error";
                    break;
                case SpeechRecognizer.ERROR_CLIENT:
                    message = "Client side error";
                    break;
                case SpeechRecognizer.ERROR_INSUFFICIENT_PERMISSIONS:
                    message = "Insufficient permissions";
                    break;
                case SpeechRecognizer.ERROR_NETWORK:
                    message = "Network error";
                    break;
                case SpeechRecognizer.ERROR_NETWORK_TIMEOUT:
                    message = "Network timeout";
                    break;
                case SpeechRecognizer.ERROR_NO_MATCH:
                    message = "No match";
    
    
                    break;
                case SpeechRecognizer.ERROR_RECOGNIZER_BUSY:
                    message = "RecognitionService busy";
    
                    break;
                case SpeechRecognizer.ERROR_SERVER:
                    message = "error from server";
                    break;
                case SpeechRecognizer.ERROR_SPEECH_TIMEOUT:
                    message = "No speech input";
    
                    break;
                default:
                    message = "Didn't understand, please try again.";
                    break;
            }
            return message;
        }
    
    }
    

    【讨论】:

    • 你必须导入 import android.speech.RecognitionListener;导入 android.speech.RecognizerIntent;导入 android.speech.SpeechRecognizer;
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    相关资源
    最近更新 更多