语音识别作为后台服务

Posted

技术标签:

【中文标题】语音识别作为后台服务【英文标题】:Voice Recognition as a background service 【发布时间】:2011-09-16 08:33:36 【问题描述】:

是否可以将活动实现为服务?我的活动是语音识别活动。我想让活动在应用程序的后台运行,不断检查语音,当用户说出命令时,它会识别它,然后执行操作。我的问题是......是否可以这样做,如果可以,后台服务如何通知当前活动或应用程序?之前有一篇关于此的帖子没有明确的答案……感谢您的任何意见或帮助。这是语音活动...取自另一个 *** 帖子:

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



public class voiceRecognitionTest extends Activity implements OnClickListener 


   private TextView mText;
   private SpeechRecognizer sr;
   private static final String TAG = "MyStt3Activity";
   @Override
   public void onCreate(Bundle savedInstanceState) 
   
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            Button speakButton = (Button) findViewById(R.id.btn_speak);     
            mText = (TextView) findViewById(R.id.textView1);     
            speakButton.setOnClickListener(this);
            sr = SpeechRecognizer.createSpeechRecognizer(this);       
            sr.setRecognitionListener(new listener());        
   

   class listener implements RecognitionListener          
   
            public void onReadyForSpeech(Bundle params)
            
                     Log.d(TAG, "onReadyForSpeech");
            
            public void onBeginningOfSpeech()
            
                     Log.d(TAG, "onBeginningOfSpeech");
            
            public void onRmsChanged(float rmsdB)
            
                     Log.d(TAG, "onRmsChanged");
            
            public void onBufferReceived(byte[] buffer)
            
                     Log.d(TAG, "onBufferReceived");
            
            public void onEndOfSpeech()
            
                     Log.d(TAG, "onEndofSpeech");
            
            public void onError(int error)
            
                     Log.d(TAG,  "error " +  error);
                     mText.setText("error " + error);
            
            public void onResults(Bundle results)                   
            
                     String str = new String();
                     Log.d(TAG, "onResults " + results);
                     ArrayList data = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
                     for (int i = 0; i < data.size(); i++)
                     
                               Log.d(TAG, "result " + data.get(i));
                               str += data.get(i);
                     
                     mText.setText("results: "+String.valueOf(data.size()));        
            
            public void onPartialResults(Bundle partialResults)
            
                     Log.d(TAG, "onPartialResults");
            
            public void onEvent(int eventType, Bundle params)
            
                     Log.d(TAG, "onEvent " + eventType);
            
   
   public void onClick(View v) 
            if (v.getId() == R.id.btn_speak) 
            
                Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);        
                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
                intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE,"voice.recognition.test");

                intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS,5); 
                     sr.startListening(intent);
                     Log.i("111111","11111111");
            
   

【问题讨论】:

嗨,我想做类似的事情,我知道你问这个问题已经有一段时间了,我想知道你有没有办法做到这一点?跨度> 检查这个:***.com/questions/11406925/… 【参考方案1】:

您可以做的是启动识别器活动,该活动将侦听命令,当它找到合适的命令时,它将执行您希望它对该特定命令执行的任何操作。这种简单方法的问题在于,活动将不断地监听语音输入,更重要的是它需要集中注意力而不是在后台运行......

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html

【讨论】:

所以真的没有实现某种语音命令系统吗? 这个答案怎么能真正回答这个问题,因为这个人需要服务而不是活动中的语音识别器?

以上是关于语音识别作为后台服务的主要内容,如果未能解决你的问题,请参考以下文章

华为机器学习服务语音识别功能,让应用绘“声”绘色

语音识别简述

android如何自定义语音识别

华为机器学习服务语音识别功能,让应用绘“声”绘色

百度语音识别服务 —— 语音识别 REST API 开发笔记

飞桨PaddleSpeech语音技术课程— 语音识别-流式服务