English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Android에서 쉽게 음성 인식 구현 및 예제 코드

Intent를 통해 음성 인식 프로그램 호출

설명

Android에서는 주로 RecognizerIntent를 통해 음성 인식을 구현합니다. 실제 코드는 간단하지만, 음성 인식 장치를 찾을 수 없으면 ActivityNotFoundException 예외가 발생합니다. 따라서 이 예외를 잡아야 합니다. 그리고 음성 인식은 모의 환경에서 테스트할 수 없습니다. 음성 인식은 Google 클라우드 데이터에 접근하기 때문에, 모바일의 네트워크가 꺼져 있으면 음성 인식을 수행할 수 없습니다! 모바일의 네트워크를 꼭 켜야 합니다. 모바일이 음성 인식 기능을 가지지 않는다면, 인식을 활성화할 수 없습니다!

주의: 사용 전에 음성 인식 프로그램을 설치해야 합니다. 예를 들어, '음성 검색'에서 사용하는 음성 인식 기술은 Google에서 출처를 받습니다. Intent는 이 프로그램을 인식할 수 있습니다.

이 예제는 android 예제에서 참고되었습니다:

development/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.java

핵심 코드 및 설명

package com.example.test;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends Activity implements OnClickListener {
 private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  Button btn = (Button) findViewById(R.id.btn); // 인식 버튼
  PackageManager pm = getPackageManager();
  List activities = pm.queryIntentActivities(new Intent(
    RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); // 本地识别程序
  // new Intent(RecognizerIntent.ACTION_WEB_SEARCH), 0); // 网络识别程序
  /*
   * 此处没有使用捕捉异常,而是检测是否有语音识别程序。
   * 也可以在startRecognizerActivity()方法中捕捉ActivityNotFoundException异常
   */
  if (activities.size() != 0) {
   btn.setOnClickListener(this);
  } else {
   // 若检测不到语音识别程序在本机安装,测将扭铵置灰
   btn.setEnabled(false);
   btn.setText("未检测到语音识别设备");
  }
 }
 public void onClick(View v) {
  if (v.getId() == R.id.btn) {
   startRecognizerActivity();
  }
 }
 // 开始识别
 private void startRecognizerActivity() { 
  // 通过Intent传递语音识别的模式,开启语音
  Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  // 语言模式和自由模式的语音识别
  intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
    RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  // 提示语音开始
  intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "开始语音");
  // 开始语音识别
  startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
  // 调出识别界面
 }
 @Override
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // 回调获取从谷歌得到的数据
  if (requestCode == VOICE_RECOGNITION_REQUEST_CODE
    && resultCode == RESULT_OK)
   // 음성의 문자를 얻습니다
   ArrayList<String> results = data
     .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
   String resultString = "";
   for (int i = 0; i < results.size(); i++) {
    resultString += results.get(i);
   }
   Toast.makeText(this, resultString, Toast.LENGTH_SHORT).show();
  }
  // 음성 인식 후 콜백, 인식된 문자열을 토스트로 표시합니다
  super.onActivityResult(requestCode, resultCode, data);
 }
}

주요 원리는 음성을 구글 클라우드로 보내고, 클라우드에서 처리하고, 해당 데이터를 클라이언트로 전송하는 것입니다.

manifest에 네트워크 접근 권한을 추가하지 마세요:

<uses-permission android:name="android.permission.INTERNET" />

실행 후 효과:

이것이 안드로이드에서 음성 인식을 구현하는 자료 정리입니다. 앞으로도 관련 자료를 계속 추가할 것입니다. 감사합니다.

언급: 본 문서의 내용은 인터넷에서 수집되었으며, 저작권자는 모두 소유합니다. 내용은 인터넷 사용자가 자발적으로 기여하고 자체로 업로드한 것이며, 웹사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 의심되는 내용이 있으시면, notice#w로 이메일을 보내 주시기 바랍니다.3codebox.com에 대한 신고를 보내는 경우, #을 @으로 변경하십시오. 관련 증거를 제공하시면, 사이트가 즉시 의심스러운 저작권 내용을 삭제할 것입니다.

추천해드립니다