Android开发,python 语音识别别前上传联系人出错怎么办

16:31 提问
关于科大讯飞的Android语音识别api的初始化问题
我使用了科大讯飞的语音识别的api,可是测试的时候一直不能识别,debug调试的时候发现在初始化的时候就不成功,日志显示code是21001.。。请问有人有遇到过这个问题吗。
* 初始化监听器
private InitListener mInitListener = new InitListener() {
public void onInit(ISpeechModule module, int code) {
Log.d(TAG, "SpeechRecognizer init() code = " + code);
if (code == ErrorCode.SUCCESS) {
button.setEnabled(true);
知道的朋友麻烦指点一下,谢谢啦!
按赞数排序
看看库有没有导入完整。
我今天也遇到了,然后解决了。是因为把讯飞sdk的包拷到libs目录后,还要在build.gradle里面配置,跟buildTypes同级,加上
sourceSets{
jniLibs.srcDir(['libs'])
21001 按讯飞的API文档的解释应该是 ERROR_ENGINE_NOT_SUPPORTED
初始环境没有配置好,lib库,语音支持apk,配置文件,检查这三项吧
11-16 02:13:08.416: D/Fragement3(16619): SpeechRecognizer init() code = 0
其他相关推荐
其他相似问题Android开发之语音识别 - jing-hai - 博客园
随笔 - 246, 文章 - 44, 评论 - 9, 引用 - 0
2008年Google语音搜索在iphone平台上线,Android 1.5 将语音识别应用到搜索功能上。
手动输入是目前主要与手机互动的方式,语音搜索宗旨是最大限度地改善人机交互的便捷性。
在玩游戏时,通过语音来控制操作,更显得人性化,体验更佳。
Android 中主要通过RecognizerIntent来实现语音识别。
RecognizerIntent包括的常量
ACTION_RECOGNIZE_SPEECH
ACTION_WEB_SEARCH
EXTRA_LANGUAGE
EXTRA_LANGUAGE_MODEL
EXTRA_MAX_RESULTS
EXTRA_PROMPT
EXTRA_RESULTS
LANGUAGE_MODEL_FREE_FORM
LANGUAGE_MODEL_WEB_SEARCH
RESULT_AUDIO_ERROR
RESULT_CLIENT_ERROR
RESULT_NETWORK_ERROR
RESULT_NO_MATCH
RESULT_SERVER_ERROR
// 打开语音识别
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);
在模拟器上找不到语音设备,会抛出异常ActivityNotFoundException。
点击“开始使用语音识别”按钮后,开始语音输入,然后在onActivityResult方法中取得结果并显示出来
protect 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);
    StringBuffer sb = new StringBuffer();
    for(int i=0; i&results. i++) {
      sb.append(results.get(i));
    }
    Toast.makeText(this, sb.toString(), Toast.LENGTH_LONG).show();
    super.onActivityResult(requestCode, resultCode, data);Android开发学习之使用百度语音识别SDK实现语音识别(上)
作为移动互联网杀手级的交互方式,语音识别从问世以来就一直备受人们的关注,从的Siri到国内的讯飞语音,语音识别技术在移动开发领域是最为充满前景和希望的技术。作为一个移动操作,其本身就继承了Google天生的搜索基因,因此Android对于语音识别和语音合成本身是具有较好的支持的。然而由于种种原因,在我天朝上国,Android的大量特性只能沦为纸上谈兵。而作为未来人机交互的新模式,中文语音识别技术本身门槛相对较高,这不禁令许多开发者望而却步。不过,目前国内已经出现了一些提供语音识别相关技术服务的厂商,通过了解目前国内语音识别技术的现状,可以帮助我们在开发语音识别相关应用的过程中选择一个较为合适的方向。那么目前国内较为著名的两家提供语音识别技术的厂商分别是科大讯飞和百度,并且两家厂商都开放了相应的API接口,通过API接口我们可以轻松地在自己的应用中实现语音识别。科大讯飞提供了从文本合成到语音识别等一系列的解决方案,而百度则仅提供了语音识别的相关解决方案。具体的情况大家可以从下面的地址了解:
做好前面的准备工作后,我们就可以开始今天的学习了。首先让我们来创建一个Android项目,并在项目中引入百度语音的jar库文件:VoiceRecognition-1.2.jar,然后在AndroidManifest.xml文件中加入下面的权限:
然后我们做一个简单的布局,一个Button按钮,一个文本框:
在这篇文章中我们只是对百度语音做一个初步的了解,因此我们今天采取的方式是直接调用百度为我们封装好的一个语音识别对话框类BaiduASRDigitalDialog,我们一起来看代码:
package com.Android.BaiduV
import java.util.ArrayL
import com.baidu.voicerecognition.android.ui.BaiduASRDigitalD
import com.baidu.voicerecognition.android.ui.DialogRecognitionL
import android.os.B
import android.app.A
import android.view.M
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.EditT
public class MainActivity extends Activity {
//开始按钮
private Button BtnS
private EditText InputB
//百度语音识别对话框
private BaiduASRDigitalDialog mDialog=
private DialogRecognitionListener mDialogListener=
//应用授权信息 ,这里使用了官方SDK中的参数,如果需要,请自行申请,并修改为自己的授权信息
private String API_KEY=8MAxI5o7VjKSZOKeBzS4XtxO;
private String SECRET_KEY=Ge5GXVdGQpaxOmLzc8fOM8309ATCz9Ha;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (mDialog == null) {
if (mDialog != null) {
mDialog.dismiss();
Bundle params = new Bundle();
//设置API_KEY, SECRET_KEY
params.putString(BaiduASRDigitalDialog.PARAM_API_KEY, API_KEY);
params.putString(BaiduASRDigitalDialog.PARAM_SECRET_KEY, SECRET_KEY);
//设置语音识别对话框为蓝色高亮主题
params.putInt(BaiduASRDigitalDialog.PARAM_DIALOG_THEME, BaiduASRDigitalDialog.THEME_BLUE_LIGHTBG);
//实例化百度语音识别对话框
mDialog = new BaiduASRDigitalDialog(this, params);
//设置百度语音识别回调接口
mDialogListener=new DialogRecognitionListener()
public void onResults(Bundle mResults)
ArrayList rs = mResults != null ? mResults.getStringArrayList(RESULTS_RECOGNITION) :
if (rs != null && rs.size() & 0) {
InputBox.setText(rs.get(0));
mDialog.setDialogRecognitionListener(mDialogListener);
//设置语音识别模式为输入模式
mDialog.setSpeechMode(BaiduASRDigitalDialog.SPEECH_MODE_INPUT);
//禁用语义识别
mDialog.getParams().putBoolean(BaiduASRDigitalDialog.PARAM_NLU_ENABLE, false);
//界面元素
BtnStart=(Button)findViewById(R.id.BtnStart);
InputBox=(EditText)findViewById(R.id.InputBox);
BtnStart.setOnClickListener(new OnClickListener()
public void onClick(View v)
mDialog.show();
这样,我们就实现了在我们的应用中实现语音识别的目的,感觉还是蛮简单的啊,呵呵,下面给出程序运行示意图:
通过这种方式调用百度语音十分地简单,但是难以满足个性化定制的需求,官方默认为我们提供过了8种配色方案,如果这8种配色方案还不能满足我们实际需求的话,那么就需要我们以百度语音提供的API自行定制,具体的内容大家可以继续关注我的博客,在下一篇文章中,我们将以百度语音API为基础来实现自己的语音识别界面,感谢大家关注!
源代码下载场景:android项目中共使用了3个语音组件:在线语音听写、离线语音合成、离线语音识别
11208:遇到这个错误,授权应用失败,先检查装机量(3台测试权限),以及appid的申请时间(35天期限),我的没问题,所以就定位在资源文件的问题了。请注意:保证所有的资源文件都是最新的(在线语音听写、离线语音合成、离线语音识别),比如说你某个页面只需要离线语音识别,但是却没有更新&离线语音合成&的资源文件(common.jet).
23108:这个错误提示语法构建失败,其实我已经写语法了,但是由于编码乱码的原因,造成语法构建失败,所以编码问题也请大家注意。
待续。。。
讯飞官方提供的错误码及解决办法:
错误码说明
MSP_ERROR_INVALID_PARA& 无效的参数
传入的参数有误
查看参数是否传错了地方,参数值是否有问题
jar 和 libmsc.so 不一致 。 魅族有预装我们的软件 可能会把libmsc.so push到 System& lib 下面,造成版本之间的混乱
无效的句柄
一般是客户端网络问题,导致服务端释放了这路会话。所以客户端消息再来的时候,就报无效句柄了。
MSP_ERROR_INVALID_DATA& 无效的数据
(1)上传的命令词语法文件有问题(2)网络状况导致音频数据传输不了
客户端上传的命令词语法,单词长度限制为128字节。语法首部限制为#ABNF
1.0& UTF-8; 或者 #ABNF 1.0 gb2313;
MSP_ERROR_NO_LICENSE
MSP_ERROR_NOT_INIT&&&&&&&&& 没有初始化
没有调用初始化,或登录未完成
MSP_ERROR_TIME_OUT&&&&&&&& 连接超时
网络环境出问题了
MSP_ERROR_NO_ENOUGH_BUFFER&&&&&&&&&&&&&&&&& 没有足够的内存
每次合成字数太多
每次合成字数限制4096字节,时长60s
MSP_ERROR_NO_DATA&&&&&&&&&
前段点VAD_BOS没有检测到数据即停止监听
检查代码中VAD_BOS的设置
合成是没有文本
网络连接异常
可能是你说话离开麦克风比较远时,录音的音频声音太小作为噪音处理的,所以识别不到
MSP_ERROR_ALREADY_EXIST
人脸模型已经存在
无效的用户操作
上次服务未正常结束又启动下次的服务
在本次合成或者识别之前确认,上次合成或者识别已经结束
语法构建频繁
上次构建还没有出结果又构建了
词典更新失败
离线命令词出现
上一次更新词典未结束 又来一次
DNS解析错误
域名转换到IP失败
换个网络通畅的环境,或者先用固定IP测试
协议被不法分子篡改了,导致http协议解析失败
在使用通用语义时:在跳转sdk下载界面时,没有勾选具体的语义场景;在使用私有语义时:后台语义测试正常,但没有点击发布
appid和资源没有来自同一应用下
处于不活跃的状态
grammarid可能有误
检查语法文件格式、内容、编码设置(实际编码与文件开头、代码参数设置是否一致
没有活跃的语法
客户端没有携带任何语法文件,直接调用语法接口,造成引擎找不到可激活的语法文件
查看是否有合法的grammarid,语法文件是否有误,语法文件的真实编码、文件头填写的编码、函数中传入的编码参数,三者是否一致
未经授权的语音应用
没有审核的话每天的使用次数为500次,调用startlistening,调用一次算一次
如果应用语音功能已经完成,可以提交上线审核。审核通过后就没有限制
禁止使用未经授权的语言服务
测试版本超过限制
测试版本的只有3台装机量,35天的使用限制
MSP_ERROR_IFR_NOT_FACE_IMAGE
没有检测到人脸
&图片传的太大,http最大限制了
&jpg 格式,人脸最低在80*80像素,大小建议不超过150k&&
服务端脚本错误,没有结果
跟语义的服务没有关联好
1、在使用通用语义时:在跳转sdk下载界面时,没有勾选具体的语义场景;
2、在使用私有语义时:后台语义测试正常,但没有点击发布,会出现14002;
无效的结果
没有说话就停止识别监听
Android无匹配结果
使用命令词识别或者语法文件识别出现,查看所说的话是否在语法文件或者命令词识别中
Android录音失败
A、重启手机,B、查看是否使用的虚拟机,建议真机调试,虚拟机很多时候不能识别到麦克风设备,C、查看工程是否添加了录音权限,D、查看是否有其他进程正在占用麦克风;
iOS录音失败
iOS无匹配结果
使用命令词识别或者语法文件识别出现,查看所说的话是否在语法文件或者命令词识别中
本地引擎错误
被异常打断
做语音识别出现20017错误,可能会是同时在一个Activity做识别和合成造成,但主要可能是如果上一次未结束,又开启了下一次。可以检查一下上一次是否结束,结束标志:识别判断上一次是否结束:
OnResult isLast=true 或者 onError& &&
&合成判断上一次是否结束:onCompleted
没有安装语音组件
1、有没有使用SpeechUtility.createUtility()设置appid
2、有没有将libmsc.so放到工程中
3、如果使用的是讯飞语音+的本地功能,有没有安装讯飞语音+
4、如果设备是android
5.0及其以上,需要将工程中的armeabi和armeabi-v7a文件夹中都放上libmsc.so,如果你下载的SDK中没有armeabi-v7a对应的库,可以将armeabi中的libmsc.so复制一份到armeabi-v7a文件夹中
5、SpeechUtility.createUtility()如在Application中调用,需要在Mainifest中注册该Applicaiton。此方法不是必须在Appcation中调用,可在需要使用语音能力之前,例如进入语音搜索页面调用。
6、使用Android Studio的开发者注意将so放在jniLib目录下,或者在配置文件中指定so加载的路径。
引擎不支持
初始化失败
调用过程中刚开始初始化就开始设置参数、开始识别或开始合成
初始化是相对异步进行的,初始化的时候在InitListener里面的onInit()回调初始化成功之后在开始设置参数、调用合成、调用识别。需要先设置appid。使用speechapi.jar的话需要先安装讯飞语音+。添加各项权限
在离线语音合成没有放入资源
使用demo测试时,需将res中资源拷贝到demo中assets相应的路径下;使用带UI接口时,需要将assets下的文件拷贝到项目中
ERROR_ASR_OUT_OF_MEMORY
引擎未初始化
可能是未按照Demo进行集成,没有将资源拷贝进项目中
打开文件失败
一般在打开文件时候没有权限导致打开失败或者是代码里相关文件的路径写错,参数设置不正确。
1.检查是否增加本地读写权限:
&uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"
2.检查语法路径是不是正确,设置的参数是不是正常。
识别语法错误
读取资源、词典、场景等文件失败
识别语法有问题
本地引擎错误
阅读(...) 评论()6701人阅读
android(综合)(123)
版权申明:&&&
语音识别技术是在Android SDK1.5中才加入的(RecognizerIntent),这里我们简单的分析一下自带的api例子,其实它就是通过一个Intent的Action动作来完成的。主要有以下两种模式:
ACTION_RECOGNIZE_SPEECH:一般语音识别,在这种模式下我们可以捕捉到语音的处理后的文字列。
ACTION_WEB_SEARCH:网络搜索
该例子同样是使用ACTION_RECOGNIZE_SPEECH模式,我们需要实现onActivityResult方法,当语音识别结束之后的回调函数。
好了,废话不多说,看下面的代码,我加入了注释,重要的本来就不多几行。
Voicerecognition.java代码
package&com.example.android.apis. &&
import&android.app.A &&
import&android.content.I &&
import&android.content.pm.PackageM &&
import&android.content.pm.ResolveI &&
import&android.os.B &&
import&android.speech.RecognizerI &&
import&android.view.V &&
import&android.view.View.OnClickL &&
import&android.widget.ArrayA &&
import&android.widget.B &&
import&android.widget.ListV &&
import&java.util.ArrayL &&
import&java.util.L &&
public&class&VoiceRecognition&extends&Activity&implements&OnClickListener&{ &&
&&&&private&static&final&int&VOICE_RECOGNITION_REQUEST_CODE&=&1234; &&
&&&&private&ListView&mL &&
&&&&/** &&
&&&&&*&Called&with&the&activity&is&first&created. &&
&&&&&*/ &&
&&&&@Override &&
&&&&public&void&onCreate(Bundle&savedInstanceState)& &&
&&&&&&&&super.onCreate(savedInstanceState); &&
&&&&&&&&setContentView(R.layout.voice_recognition); &&
&&&&&&&&Button&speakButton&=&(Button)&findViewById(R.id.btn_speak); &&
&&&&&&&& &&
&&&&&&&&mList&=&(ListView)&findViewById(R.id.list); &&
&&&&&&&&//&Check&to&see&if&a&recognition&activity&is&present &&
&&&&&&&&PackageManager&pm&=&getPackageManager(); &&
&&&&&&&&List&ResolveInfo&&activities&=&pm.queryIntentActivities(new&Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH),&0); &&
&&&&&&&&if&(activities.size()&!=&0) &&
&&&&&&&&{ &&
&&&&&&&&&&&&speakButton.setOnClickListener(this); &&
&&&&&&&&} &&
&&&&&&&&else &&
&&&&&&&&{ &&
&&&&&&&&&&&&speakButton.setEnabled(false); &&
&&&&&&&&&&&&speakButton.setText("Recognizer&not&present"); &&
&&&&&&&&} &&
&&&&public&void&onClick(View&v) &&
&&&&&&&&if&(v.getId()&==&R.id.btn_speak) &&
&&&&&&&&{ &&
&&&&&&&&&&&&startVoiceRecognitionActivity(); &&
&&&&&&&&} &&
&&&&private&void&startVoiceRecognitionActivity() &&
&&&&&&&&//通过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,&"Speech&recognition&demo"); &&
&&&&&&&&//开始执行我们的Intent、语音识别 &&
&&&&&&&&startActivityForResult(intent,&VOICE_RECOGNITION_REQUEST_CODE); &&
&&&&//当语音结束时的回调函数onActivityResult &&
&&&&@Override &&
&&&&protected&void&onActivityResult(int&requestCode,&int&resultCode,&Intent&data) &&
&&&&&&&&if&(requestCode&==&VOICE_RECOGNITION_REQUEST_CODE&&&&resultCode&==&RESULT_OK) &&
&&&&&&&&{ &&
&&&&&&&&&&&&//&取得语音的字符 &&
&&&&&&&&&&&&ArrayList&String&&matches&=&data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); &&
&&&&&&&&&&&&mList.setAdapter(new&ArrayAdapter&String&(this,&android.R.layout.simple_list_item_1,&matches)); &&
&&&&&&&&} &&
&&&&&&&&super.onActivityResult(requestCode,&resultCode,&data); &&
package com.example.android.apis.
import android.app.A
import android.content.I
import android.content.pm.PackageM
import android.content.pm.ResolveI
import android.os.B
import android.speech.RecognizerI
import android.view.V
import android.view.View.OnClickL
import android.widget.ArrayA
import android.widget.B
import android.widget.ListV
import java.util.ArrayL
import java.util.L
public class VoiceRecognition extends Activity implements OnClickListener {
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
private ListView mL
* Called with the activity is first created.
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.voice_recognition);
Button speakButton = (Button) findViewById(R.id.btn_speak);
mList = (ListView) findViewById(R.id.list);
// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List&ResolveInfo& activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0)
speakButton.setOnClickListener(this);
speakButton.setEnabled(false);
speakButton.setText("Recognizer not present");
public void onClick(View v)
if (v.getId() == R.id.btn_speak)
startVoiceRecognitionActivity();
private void startVoiceRecognitionActivity()
//通过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, "Speech recognition demo");
//开始执行我们的Intent、语音识别
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
//当语音结束时的回调函数onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)
// 取得语音的字符
ArrayList&String& matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
mList.setAdapter(new ArrayAdapter&String&(this, android.R.layout.simple_list_item_1, matches));
super.onActivityResult(requestCode, resultCode, data);
当然这里需要设备的支持,所以模拟器是没有效果的!
实际上在没有设备时会跑出ActivityNotFoundException异常。
这个例子很简单,到此为止,谢谢!
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:5674142次
积分:40750
积分:40750
排名:第94名
原创:273篇
转载:195篇
译文:20篇
评论:1915条
android 开发交流
济南移动互联网:
文章:10篇
阅读:492731
文章:18篇
阅读:621378
阅读:120133
文章:11篇
阅读:155760
文章:13篇
阅读:278827
文章:59篇
阅读:1789814
(1)(1)(2)(2)(1)(2)(4)(2)(3)(1)(2)(6)(1)(6)(4)(11)(3)(1)(7)(7)(7)(4)(5)(1)(1)(5)(1)(10)(11)(7)(5)(1)(2)(1)(8)(4)(4)(8)(23)(23)(1)(1)(1)(3)(9)(15)(34)(11)(5)(3)(3)(1)(5)(2)(5)(14)(23)(22)(25)(46)(7)(9)(30)(8)(1)(5)(1)
(window.slotbydup = window.slotbydup || []).push({
id: '4740881',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 python 语音识别 的文章

 

随机推荐