讯飞语音 Great!!!

http://www.xfyun.cn/doccenter/awd


开发集成 > Android平台

目录[隐藏]

  • 1 概述
  • 2 预备工作
  • 3 语音听写
  • 4 语音识别
  • 5 语音合成
  • 6 语义理解
  • 7 本地功能集成
  • 8 语音评测
  • 9 语音唤醒
  • 10 声纹识别
  • 11 人脸识别
  • 12 附录
  • 13 常见问题

1 概述

本文档是集成科大讯飞MSC(Mobile Speech Client,移动语音终端)Android版SDK的用户指南,介绍了语音听写、语音识别、语音合成、语义理解、语音评测等接口的使用。MSC SDK的主要功能接口如下图所示:

                                                   

                                                                    图1 MSC主要功能接口

为了更好地理解后续内容,这里先对文档中出现的若干专有名词进行解释说明:

                          表1 名词解释                                                  

名词

解释

语音合成

将一段文字转换为成语音,可根据需要合成出不同音色、语速和语调的声音,让机器像人一样开口说话。

语音听写

将一段语音转换成文字内容,能识别常见的词汇、语句、语气并自动断句。

语音识别(语法识别)

判断所说的内容是否与预定义的语法相符合,主要用于判断用户是否下达某项命令。

语义理解

分析用户语音或文字的意图,给出相应的回答,如输入“今天合肥的天气”,云端即返回今天合肥的天气信息。

语音评测

通过智能语音技术对发音水平进行评价,给出得分。

声纹密码

一种基于每个人的声音都具有唯一性的认证机制,使用声音作为密码。

人脸识别

从照片、视频流中检测出人脸,或者识别两张人脸照片是否为同一个人。 

2 预备工作

step1 导入SDK

将开发工具包中libs目录下的Msc.jar和armeabi复制到Android工程的libs目录(如果工程无libs目录,请自行创建)中,如下图所示:                                                                   

                                                             图 2 导入SDK 

step2 添加用户权限

在工程AndroidManifest.xml文件中添加如下权限:

Java Code
  1. <!--连接网络权限,用于执行云端语音能力 -->  
  2. <uses-permission android:name="android.permission.INTERNET"/>  
  3. <!--获取手机录音机使用权限,听写、识别、语义理解需要用到此权限 -->  
  4. <uses-permission android:name="android.permission.RECORD_AUDIO"/>  
  5. <!--读取网络信息状态 -->  
  6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  
  7. <!--获取当前wifi状态 -->  
  8. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>  
  9. <!--允许程序改变网络连接状态 -->  
  10. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>  
  11. <!--读取手机信息权限 -->  
  12. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>  
  13. <!--读取联系人权限,上传联系人需要用到此权限 -->  
  14. <uses-permission android:name="android.permission.READ_CONTACTS"/>  

 如需使用人脸识别,还要添加:

Java Code
  1. <!--摄相头权限,拍照需要用到 -->  
  2. <uses-permission android:name="android.permission.CAMERA" />   

注:如需在打包或者生成APK的时候进行混淆,请在proguard.cfg中添加如下代码

Java Code
  1. -keep class com.iflytek.**{*;}  

step3 初始化

初始化即创建语音配置对象,只有初始化后才可以使用MSC的各项服务。建议将初始化放在程序入口处(如Application、Activity的onCreate方法),初始化代码如下:

Java Code
  1. // 将“12345678”替换成您申请的APPID,申请地址:http://open.voicecloud.cn  
  2. SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");   

注意:此接口在非主进程调用会返回null对象,如需在非主进程使用语音功能,请使用参数:SpeechConstant.APPID +"=12345678," + SpeechConstant.FORCE_LOGIN +"=true"

3 语音听写

听写主要指将连续语音快速识别为文字的过程,科大讯飞语音听写能识别通用常见的语句、词汇,而且不限制说法。语音听写的调用方法如下: 

Java Code
  1. //1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener    
  2. SpeechRecognizer mIat= SpeechRecognizer.createRecognizer(context, null);    
  3. //2.设置听写参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类    
  4. mIat.setParameter(SpeechConstant.DOMAIN, "iat");    
  5. mIat.setParameter(SpeechConstant.LANGUAGE, "zh_cn");    
  6. mIat.setParameter(SpeechConstant.ACCENT, "mandarin ");    
  7. //3.开始听写   mIat.startListening(mRecoListener);    
  8. //听写监听器    
  9. private RecognizerListener mRecoListener = new RecognizerListener(){    
  10. //听写结果回调接口(返回Json格式结果,用户可参见附录12.1);    
  11. //一般情况下会通过onResults接口多次返回结果,完整的识别内容是多次结果的累加;    
  12. //关于解析Json的代码可参见MscDemo中JsonParser类;    
  13. //isLast等于true时会话结束。    
  14. public void onResult(RecognizerResult results, boolean isLast) {    
  15.             Log.d("Result:",results.getResultString ());}    
  16. //会话发生错误回调接口    
  17.     public void onError(SpeechError error) {    
  18. error.getPlainDescription(true//获取错误码描述}    
  19.     //开始录音    
  20.     public void onBeginOfSpeech() {}    
  21.     //音量值0~30    
  22.     public void onVolumeChanged(int volume){}    
  23.     //结束录音    
  24.     public void onEndOfSpeech() {}    
  25.     //扩展用接口    
  26.     public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}    
  27. };    

另外,您还可以使用SDK提供的语音交互动画来使语音输入界面变得更加炫酷,也可以通过上传联系人和用户词表增强听写效果。 

3.1 语音交互动画

为了便于快速开发,SDK还提供了一套默认的语音交互动画以及调用接口,如需使用请将SDK资源包assets路径下的资源文件拷贝至Android工程asstes目录下,如图所示:

                                                                 图 3 添加动画资源

然后通过以下代码使用交互动画: 

Java Code
  1. //1.创建SpeechRecognizer对象,第二个参数:本地听写时传InitListener  
  2. RecognizerDialog    iatDialog = new RecognizerDialog(this,mInitListener);  
  3. //2.设置听写参数,同上节  
  4. //3.设置回调接口  
  5. iatDialog.setListener(recognizerDialogListener);  
  6. //4.开始听写  
  7. iatDialog.show();   

 3.2 上传联系人

上传联系人可以提高联系人名称识别率,也可以提高语义理解的效果,每个用户终端设备对应一个联系人列表,联系人格式详见《科大讯飞MSC API手册(Android)》ContactManager类。 

Java Code
  1. //获取ContactManager实例化对象  
  2. ContactManager mgr = ContactManager.createManager(context, mContactListener);     
  3. //异步查询联系人接口,通过onContactQueryFinish接口回调  
  4. mgr.asyncQueryAllContactsName();  
  5. //获取联系人监听器。  
  6. private ContactListener mContactListener = new ContactListener() {  
  7.     @Override  
  8.     public void onContactQueryFinish(String contactInfos, boolean changeFlag) {  
  9.         //指定引擎类型  
  10. mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);  
  11.         mIat.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");         
  12.         ret = mIat.updateLexicon("contact", contactInfos, lexiconListener);  
  13.         if(ret != ErrorCode.SUCCESS){  
  14.             Log.d(TAG,"上传联系人失败:" + ret);  
  15. }  
  16. }};  
  17. //上传联系人监听器。  
  18. private LexiconListener lexiconListener = new LexiconListener() {  
  19.     @Override  
  20.     public void onLexiconUpdated(String lexiconId, SpeechError error) {  
  21.         if(error != null){  
  22.             Log.d(TAG,error.toString());  
  23.         }else{  
  24.             Log.d(TAG,"上传成功!");  
  25.         }  
  26.     }  
  27. };   

 3.3 上传用户词表

上传用户词表可以提高词表内词汇的识别率,也可以提高语义理解的效果,每个用户终端设备对应一个词表,用户词表的格式及构造方法详见《科大讯飞MSC API手册(Android)》UserWords类。

Java Code
  1. //上传用户词表,userwords为用户词表文件。  
  2. String contents = "您所定义的用户词表内容";  
  3. mIat.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");     
  4. //指定引擎类型  
  5. mIat.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD);  
  6. ret = mIat.updateLexicon("userword", contents, lexiconListener);  
  7. if(ret != ErrorCode.SUCCESS){  
  8.     Log.d(TAG,"上传用户词表失败:" + ret);  
  9. }  
  10. //上传用户词表监听器。  
  11. private LexiconListener lexiconListener = new LexiconListener() {  
  12.     @Override  
  13.     public void onLexiconUpdated(String lexiconId, SpeechError error) {  
  14.         if(error != null){  
  15.             Log.d(TAG,error.toString());  
  16.         }else{  
  17.             Log.d(TAG,"上传成功!");  
  18.         }  
  19.     }  
  20. };  

4 语音识别

即语法识别,主要指基于命令词的识别,识别指定关键词组合的词汇,或者固定说法的短句。语法识别分云端识别和本地识别,云端和本地分别采用ABNF和BNF语法格式。

语法详解见:http://club.voicecloud.cn/forum.php?mod=viewthread&tid=7595

Java Code
  1. //云端语法识别:如需本地识别请参照本地识别  
  2. //1.创建SpeechRecognizer对象  
  3. SpeechRecognizer mAsr = SpeechRecognizer.createRecognizer(context, null);  
  4. // ABNF语法示例,可以说”北京到上海”  
  5. String mCloudGrammar = "#ABNF 1.0 UTF-8; 
  6. languagezh-CN;  
  7. mode voice; 
  8. root $main; 
  9. $main = $place1 到$place2 ; 
  10. $place1 = 北京 | 武汉 | 南京 | 天津 | 天京 | 东京; 
  11. $place2 = 上海 | 合肥; ";  
  12. //2.构建语法文件  
  13. mAsr.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");  
  14. ret = mAsr.buildGrammar("abnf", mCloudGrammar , grammarListener);  
  15. if (ret != ErrorCode.SUCCESS){  
  16.     Log.d(TAG,"语法构建失败,错误码:" + ret);  
  17. }else{  
  18.     Log.d(TAG,"语法构建成功");  
  19. }  
  20. //3.开始识别,设置引擎类型为云端  
  21. mAsr.setParameter(SpeechConstant.ENGINE_TYPE, "cloud");  
  22. //设置grammarId  
  23. mAsr.setParameter(SpeechConstant.CLOUD_GRAMMAR, grammarId);  
  24. ret = mAsr.startListening(mRecognizerListener);  
  25. if (ret != ErrorCode.SUCCESS) {  
  26.     Log.d(TAG,"识别失败,错误码: " + ret);  
  27. }  
  28. //构建语法监听器  
  29. private GrammarListener grammarListener = new GrammarListener() {  
  30.     @Override  
  31.     public void onBuildFinish(String grammarId, SpeechError error) {  
  32.         if(error == null){  
  33.             if(!TextUtils.isEmpty(grammarId)){  
  34. //构建语法成功,请保存grammarId用于识别  
  35.             }else{  
  36. Log.d(TAG,"语法构建失败,错误码:" + error.getErrorCode());  
  37.             }             
  38.         }};  

5 语音合成

与语音听写相反,合成是将文字信息转化为可听的声音信息,让机器像人一样开口说话。合成的调用方法如下:

Java Code
  1. //1.创建SpeechSynthesizer对象, 第二个参数:本地合成时传InitListener  
  2. SpeechSynthesizer mTts= SpeechSynthesizer.createSynthesizer(context, null);  
  3. //2.合成参数设置,详见《科大讯飞MSC API手册(Android)》SpeechSynthesizer 类  
  4. mTts.setParameter(SpeechConstant.VOICE_NAME, "xiaoyan");//设置发音人  
  5. mTts.setParameter(SpeechConstant.SPEED, "50");//设置语速  
  6. mTts.setParameter(SpeechConstant.VOLUME, "80");//设置音量,范围0~100  
  7. mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_CLOUD); //设置云端  
  8. //设置合成音频保存位置(可自定义保存位置),保存在“./sdcard/iflytek.pcm”  
  9. //保存在SD卡需要在AndroidManifest.xml添加写SD卡权限  
  10. //如果不需要保存合成音频,注释该行代码  
  11. mTts.setParameter(SpeechConstant.TTS_AUDIO_PATH, "./sdcard/iflytek.pcm");  
  12. //3.开始合成  
  13. mTts.startSpeaking("科大讯飞,让世界聆听我们的声音", mSynListener);    
  14. //合成监听器  
  15. private SynthesizerListener mSynListener = new SynthesizerListener(){  
  16.     //会话结束回调接口,没有错误时,error为null  
  17.     public void onCompleted(SpeechError error) {}  
  18.     //缓冲进度回调  
  19.     //percent为缓冲进度0~100,beginPos为缓冲音频在文本中开始位置,endPos表示缓冲音频在文本中结束位置,info为附加信息。  
  20.     public void onBufferProgress(int percent, int beginPos, int endPos, String info) {}  
  21.     //开始播放  
  22.     public void onSpeakBegin() {}  
  23.     //暂停播放  
  24.     public void onSpeakPaused() {}  
  25.     //播放进度回调  
  26.     //percent为播放进度0~100,beginPos为播放音频在文本中开始位置,endPos表示播放音频在文本中结束位置.  
  27.     public void onSpeakProgress(int percent, int beginPos, int endPos) {}  
  28.     //恢复播放回调接口  
  29.     public void onSpeakResumed() {}  
  30. //会话事件回调接口  
  31.     public void onEvent(int arg0, int arg1, int arg2, Bundle arg3) {}  

6 语义理解

 6.1 语音语义理解

您可以通过后台配置出一套您专属的语义结果,详见http://osp.voicecloud.cn/

Java Code
  1. //1.创建文本语义理解对象  
  2. SpeechUnderstander understander = SpeechUnderstander.createUnderstander(context, null);  
  3. //2.设置参数,语义场景配置请登录http://osp.voicecloud.cn/  
  4. understander.setParameter(SpeechConstant.LANGUAGE, "zh_cn");  
  5. //3.开始语义理解  
  6. understander.startUnderstanding(mUnderstanderListener);  
  7. // XmlParser为结果解析类,见SpeechDemo  
  8. private SpeechUnderstanderListener mUnderstanderListener = new SpeechUnderstanderListener(){  
  9. public void onResult(UnderstanderResult result) {   
  10.             String text = result.getResultString();   
  11. }  
  12.     public void onError(SpeechError error) {}//会话发生错误回调接口  
  13.     public void onBeginOfSpeech() {}//开始录音  
  14.     public void onVolumeChanged(int volume){} //音量值0~30  
  15.     public void onEndOfSpeech() {}//结束录音  
  16.     public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}//扩展用接口  
  17. };    

6.2 文本语义理解

用户通过输入文本获取语义结果,得到的专属语义结果和上述语音方式相同。

Java Code
  1. //创建文本语义理解对象  
  2. TextUnderstander mTextUnderstander = TextUnderstander.createTextUnderstander(thisnull);   
  3. //开始语义理解  
  4. mTextUnderstander.understandText("科大讯飞", searchListener);  
  5. //初始化监听器  
  6. TextUnderstanderListener searchListener = new TextUnderstanderListener(){  
  7. //语义结果回调  
  8.     public void onResult(UnderstanderResult result){}  
  9.     //语义错误回调  
  10.     public void onError(SpeechError error) {}  
  11. };   

7 本地功能集成

本地识别、合成以及唤醒功能需要通过“讯飞语音+”来实现。“讯飞语音+”是基于讯飞语音云平台开发的应用,用户安装语音+后,应用可以通过服务绑定来使用讯飞语音+的本地功能,如下图所示:

在使用本地功能之前,先检查讯飞语音+的安装情况: 

Java Code
  1. //检查语音+是否安装  
  2. //如未安装,获取语音+下载地址进行下载。安装完成后即可使用服务。  
  3. if(!SpeechUtility.getUtility().checkServiceInstalled ()){  
  4.     String url = SpeechUtility.getUtility().getComponentUrl();  
  5.     Uri uri = Uri.parse(url);  
  6.     Intent it = new Intent(Intent.ACTION_VIEW, uri);  
  7.     context.startActivity(it);  
  8. }   

7.1 本地识别

Java Code
  1. //1.创建SpeechRecognizer对象,需传入初始化监听器  
  2. SpeechRecognizer mAsr = SpeechRecognizer.createRecognizer(context, mInitListener);  
  3. //初始化监听器,只有在使用本地语音服务时需要监听(即安装讯飞语音+,通过语音+提供本地服务),初始化成功后才可进行本地操作。  
  4. private InitListener mInitListener = new InitListener() {  
  5.     public void onInit(int code) {  
  6.         if (code == ErrorCode.SUCCESS) {}}  
  7. };  
  8. //2.构建语法(本地识别引擎目前仅支持BNF语法),同在线语法识别 请参照Demo。  
  9. //3.开始识别,设置引擎类型为本地  
  10. mAsr.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);  
  11. //设置本地识别使用语法id(此id在语法文件中定义)、门限值  
  12. mAsr.setParameter(SpeechConstant.LOCAL_GRAMMAR, "call");  
  13. mAsr.setParameter(SpeechConstant.MIXED_THRESHOLD, "30");  
  14. ret = mAsr.startListening(mRecognizerListener);   

7.2 本地合成

Java Code
  1. //1.创建SpeechSynthesizer对象  
  2. SpeechSynthesizer mTts= SpeechSynthesizer.createSynthesizer(context, mInitListener);  
  3. //初始化监听器,同听写初始化监听器,使用云端的情况下不需要监听即可使用,本地需要监听  
  4. private InitListener mInitListener = new InitListener() {...};  
  5. //2.合成参数设置  
  6. //设置引擎类型为本地  
  7. mTts.setParameter(SpeechConstant.ENGINE_TYPE, SpeechConstant.TYPE_LOCAL);  
  8. //可跳转到语音+发音人设置页面进行发音人下载  
  9. SpeechUtility.getUtility().openEngineSettings(SpeechConstant.ENG_TTS);  
  10. //3.开始合成  
  11. mTts.startSpeaking("科大讯飞,让世界聆听我们的声音", mSynListener);   

7.3 获取语音+参数

用户可以通过语音+中的资源下载(包括:识别资源、发音人资源)来提升语音+离线能力,开发者可以通过以下接口获取当前语音+包含的离线资源列表,此接口从语音+1.032(99)版本开始支持。(通过getServiceVersion()获取版本号) 注:后续版本将支持获取语音+当前设置的发音人字段

Java Code
  1. //1.设置所需查询的资源类型  
  2. /** 
  3. *1.PLUS_LOCAL_ALL: 本地所有资源  
  4. 2.PLUS_LOCAL_ASR: 本地识别资源 
  5. 3.PLUS_LOCAL_TTS: 本地合成资源 
  6. */  
  7. String type = SpeechConstant.PLUS_LOCAL_ASR;  
  8. //2.获取当前语音+包含资源列表  
  9. String resource = SpeechUtility.getUtility().getParameter(type);  
  10. //3.解析json-请参见下表格式及Demo中解析方法  
Java Code
  1. {"ret":0,"result":{"version":11,  
  2. "tts":[{"sex":"woman","language":"zh_cn","accent":"mandarin","nickname":"邻家姐姐","age":"22","name":"xiaojing"},  
  3. {"sex":"woman","language":"zh_cn","accent":"mandarin","nickname":"王老师","age":"24","name":"xiaoyan"}],  
  4. "asr":[{"domain":"asr","samplerate":"16000","language":"zh_cn","accent":"mandarin","name":"common"}]}}  

8 语音评测

提供汉语、英语两种语言的评测,支持单字(汉语专有)、词语和句子朗读三种题型,通过简单地接口调用就可以集成到您的应用中。语音评测的使用主要有三个步骤: 

1)创建对象和设置参数

Java Code
  1. // 创建评测对象  
  2. SpeechEvaluator mSpeechEvaluator = SpeechEvaluator.createEvaluator(  
  3. IseDemoActivity.thisnull);  
  4. // 设置评测语种  
  5. mSpeechEvaluator.setParameter(SpeechConstant.LANGUAGE, "en_us");  
  6. // 设置评测题型  
  7. mSpeechEvaluator.setParameter(SpeechConstant.ISE_CATEGORY, "read_word");  
  8. // 设置试题编码类型  
  9. mSpeechEvaluator.setParameter(SpeechConstant.TEXT_ENCODING, "utf-8");  
  10. // 设置前、后端点超时  
  11. mSpeechEvaluator.setParameter(SpeechConstant.VAD_BOS, vad_bos);  
  12. mSpeechEvaluator.setParameter(SpeechConstant.VAD_EOS, vad_eos);  
  13. // 设置录音超时,设置成-1则无超时限制  
  14. mSpeechEvaluator.setParameter(SpeechConstant.KEY_SPEECH_TIMEOUT, "-1");  
  15. // 设置结果等级,不同等级对应不同的详细程度  
  16. mSpeechEvaluator.setParameter(SpeechConstant.RESULT_LEVEL, "complete");    

可通过setParameter设置的评测相关参数说明如下:

表2 评测相关参数说明 

参数

说明

是否必需

language

评测语种,可选值:en_us(英语)、zh_cn(汉语)

category

评测题型,可选值:read_syllable(单字,汉语专有)、read_word(词语)、read_sentence(句子)

text_encoding

上传的试题编码格式,可选值:gb2312、utf-8。当进行汉语评测时,必须设置成utf-8,建议所有试题都使用utf-8编码

vad_bos

前端点超时,默认5000ms

vad_eos

后端点超时,默认1800ms

speech_timeout

录音超时,当录音达到时限将自动触发vad停止录音,默认-1(无超时)

result_level

评测结果等级,可选值:plain、complete,默认为complete

2)上传评测试题和录音

Java Code
  1. // 首先创建一个评测监听接口  
  2. private EvaluatorListener mEvaluatorListener = new EvaluatorListener() {  
  3.     // 结果回调,评测过程中可能会多次调用该方法,isLast为true则为最后结果  
  4.     public void onResult(EvaluatorResult result, boolean isLast) {}  
  5.     // 出错回调  
  6.     public void onError(SpeechError error) {}  
  7.     // 开始说话回调  
  8.     public void onBeginOfSpeech() {}  
  9.     // 说话结束回调  
  10.     public void onEndOfSpeech() {}  
  11.     // 音量回调  
  12.     public void onVolumeChanged(int volume) {}  
  13.     // 扩展接口,暂时没有回调  
  14.     public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}  
  15. };    
  16. // 然后设置评测试题、传入监听器,开始评测录音。evaText为试题内容,试题格式详见《语音  
  17. // 评测参数、结果说明文档》,第二个参数为扩展参数,请设置为null  
  18. mSpeechEvaluator.startEvaluating(evaText, null, mEvaluatorListener);   

调用startEvaluating即开始评测录音,读完试题内容后可以调用stopEvaluating停止录音,也可以在一段时间后由SDK自动检测vad并停止录音。当评测出错时,SDK会回调onError方法抛出SpeechError错误,通过SpeechError的getErrorCode()方法可获得错误码,常见的错误码详见第十二章附录和下表:

表3 评测错误码 

错误码

错误值

含义

MSP_ERROR_ASE_EXCEP_SILENCE

11401

无语音或音量太小

MSP_ERROR_ASE_EXCEP_SNRATIO

11402

信噪比低或有效语音过短

MSP_ERROR_ASE_EXCEP_PAPERDATA

11403

非试卷数据

MSP_ERROR_ASE_EXCEP_PAPERCONTENTS

11404

试卷内容有误

MSP_ERROR_ASE_EXCEP_NOTMONO

11405

录音格式有误

MSP_ERROR_ASE_EXCEP_OTHERS

11406

其他评测数据异常,包括错读、漏读、恶意录入、试卷内容等错误

MSP_ERROR_ASE_EXCEP_PAPERFMT

11407

试卷格式有误

MSP_ERROR_ASE_EXCEP_ULISTWORD

11408

存在未登录词,即引擎中没有该词语的信息

3)解析评测结果

 SDK通过onResult回调抛出xml格式的评测结果,结果格式及字段含义详见《语音评测参数、结果说明文档》文档,具体的解析过程可参考demo工程com.iflytek.ise.result包中的源代码。

9 语音唤醒

 语音唤醒的集成主要有三个步骤:

1)导入资源文件

使用唤醒功能需要将开发包中\res\ivw\路径下的唤醒资源文件引入,引入方式有三种:Assets、Resources、SD卡;资源文件以.jet为后缀(下图以Assets方式为例)。

图4 唤醒资源文件

2)初始化

创建用户语音配置对象后才可以使用语音服务,建议在程序入口处调用。

Java Code
  1. // 将“12345678”替换成您申请的APPID,申请地址:http://open.voicecloud.cn  
  2. SpeechUtility.createUtility(context, SpeechConstant.APPID +"=12345678");   

3)代码添加

Java Code
  1. //1.加载唤醒词资源,resPath为唤醒资源路径  
  2. StringBuffer param =new StringBuffer();  
  3. String resPath = ResourceUtil.generateResourcePath(WakeDemo.this, RESOURCE_TYPE.assets, "ivw/ivModel_zhimakaimen.jet");  
  4. param.append(ResourceUtil.IVW_RES_PATH+"="+resPath);  
  5. param.append(","+ResourceUtil.ENGINE_START+"="+SpeechConstant.ENG_IVW);  
  6. SpeechUtility.getUtility().setParameter(ResourceUtil.ENGINE_START,param.toString());  
  7. //2.创建VoiceWakeuper对象  
  8. VoiceWakeuper mIvw = VoiceWakeuper.createWakeuper(context, null);  
  9. //3.设置唤醒参数,详见《科大讯飞MSC API手册(Android)》SpeechConstant类  
  10. //唤醒门限值,根据资源携带的唤醒词个数按照“id:门限;id:门限”的格式传入  
  11. mIvw.setParameter(SpeechConstant.IVW_THRESHOLD,"0:"+curThresh);  
  12. //设置当前业务类型为唤醒  
  13. mIvw.setParameter(SpeechConstant.IVW_SST,"wakeup");  
  14. //设置唤醒一直保持,直到调用stopListening,传入0则完成一次唤醒后,会话立即结束(默认0)  
  15. mIvw.setParameter(SpeechConstant.KEEP_ALIVE,"1");  
  16. //4.开始唤醒  
  17. mIvw.startListening(mWakeuperListener);  
  18. //听写监听器  
  19. private WakeuperListener mWakeuperListener = new WakeuperListener() {  
  20.         public void onResult(WakeuperResult result) {  
  21.             try {  
  22.                 String text = result.getResultString();  
  23.             } catch (JSONException e) {  
  24.                 e.printStackTrace();  
  25.             }}  
  26.         public void onError(SpeechError error) {}  
  27.         public void onBeginOfSpeech() {}  
  28.         public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {  
  29. if (SpeechEvent.EVENT_IVW_RESULT == eventType) {  
  30. //当使用唤醒+识别功能时获取识别结果  
  31. //arg1:是否最后一个结果,1:是,0:否。  
  32. RecognizerResult reslut = ((RecognizerResult)obj.get(SpeechEvent.KEY_EVENT_IVW_RESULT));  
  33. }  
  34. }};  

10 声纹识别

与指纹一样,声纹也是一种独一无二的生理特征,可以用来鉴别用户的身份。声纹密码的使用包括注册、验证和模型操作。

10.1 声纹注册

现阶段语音云平台支持三种类型的声纹密码,即文本密码、自由说和数字密码,在注册之前要选择声纹的类型。 

Java Code
  1. // 首先创建SpeakerVerifier对象  
  2. mVerify = SpeakerVerifier.createVerifier(thisnull);  
  3. // 通过setParameter设置密码类型,pwdType的取值为1、2、3,分别表示文本密码、自由说和数字密码  
  4. mVerify.setParameter(SpeechConstant.ISV_PWDT, "" + pwdType);   

pwdType的取值说明如下表所示: 

表 4 pwdType取值说明 

取值

说明

1

文本密码。用户通过读出指定的文本内容来进行声纹注册和验证,现阶段支持的文本有“芝麻开门”。

2

自由说密码。用户通过读一段文字来进行声纹注册和验证,注册时要求声音长度为20秒左右,验证时要求声音长度为15秒左右,内容不限。

3

数字密码。从云端拉取若干组特定的数字串(默认有5组,每组8位数字),用户依次读出这5组数字进行注册,在验证过程中会生成一串特定的数字,用户通过读出这串数字进行验证。

除自由说外,其他两种密码需调用接口从云端获取:

Java Code
  1. // 通过调用getPasswordList方法来获取密码。mPwdListener是一个回调接口,当获取到密码后,SDK会调用其中的onBufferReceived方法对云端返回的JSON格式(具体格式见附录12.4)的密码进行处理,处理方法详见声纹Demo示例  
  2. mVerify.getPasswordList(SpeechListener mPwdListener);  
  3. SpeechListener mPwdListenter = new SpeechListener() {  
  4.         public void onEvent(int eventType, Bundle params) {}  
  5.         public void onBufferReceived(byte[] buffer) {}  
  6.         public void onCompleted(SpeechError error) {}  
  7. };   

获取到密码后,接下来进行声纹注册,即要求用户朗读若干次指定的内容,这一过程也称为声纹模型的训练。

Java Code
  1. // 设置业务类型为训练  
  2. mVerify.setParameter(SpeechConstant.ISV_SST, "train");  
  3. // 设置密码类型  
  4. mVerify.setParameter(SpeechConstant.ISV_PWDT, "" + pwdType);  
  5. // 对于文本密码和数字密码,必须设置密码的文本内容,pwdText的取值为“芝麻开门”或者是从云端拉取的数字密码(每8位用“-”隔开,如“62389704-45937680-32758406-29530846-58206497”)。自由说略过此步  
  6. mVerify.setParameter(SpeechConstant.ISV_PWD, pwdText);  
  7. // 对于自由说,必须设置采样频率为8000,并设置ISV_RGN为1。其他密码可略过此步  
  8. mVerify.setParameter(SpeechConstant.SAMPLE_RATE, "8000");  
  9. mVerify.setParameter(SpeechConstant.ISV_RGN, "1");  
  10. // 设置声纹对应的auth_id,它用于标识声纹对应的用户,为空时表示这是一个匿名用户  
  11. mVerify.setParameter(SpeechConstant.ISV_AUTHID, auth_id);  
  12. // 开始注册,当得到注册结果时,SDK会将其封装成VerifierResult对象,回调VerifierListener对象listener的onResult方法进行处理,处理方法详见Demo示例  
  13. mVerify.startListening(mRegisterListener);  
  14. VerifierListener mRegisterListener =new VerifierListener() {  
  15.         public void onVolumeChanged(int volume) {}  
  16.         public void onResult(VerifierResult result) {  
  17.         public void onEvent(int eventType, int arg1, int arg2, Bundle obj) {}  
  18.         public void onError(SpeechError error) {}  
  19.         public void onEndOfSpeech() {}  
  20.         public void onBeginOfSpeech() {}  
  21. };   

注意,当auth_id为空时(匿名用户),将使用设备的设备ID来标识注册的声纹模型。由于设备ID不能跨设备,而且不同的设备所获取到的设备ID也有可能相同,推荐的作法是在注册模型的时为app的每个用户都指定一个唯一的auth_id。auth_id的格式为:6-18个字符,为字母、数字和下划线的组合且必须以字母开头,不支持中文字符,不能包含空格。

表 5 声纹错误码 

错误码

错误值

说明

MSS_ERROR_IVP_GENERAL

11600

正常,请继续传音频

MSS_ERROR_IVP_EXTRA_RGN_SOPPORT

11601

rgn超过最大支持次数9

MSS_ERROR_IVP_TRUNCATED

11602

音频波形幅度太大,超出系统范围,发生截幅

MSS_ERROR_IVP_MUCH_NOISE

11603

太多噪音

MSS_ERROR_IVP_TOO_LOW

11604

声音太小

MSS_ERROR_IVP_ZERO_AUDIO

11605

没检测到音频

MSS_ERROR_IVP_UTTER_TOO_SHORT

11606

音频太短

MSS_ERROR_IVP_TEXT_NOT_MATCH

11607

音频内容与给定文本不一致

MSS_ERROR_IVP_NO_ENOUGH_AUDIO

11608

音频长达不到自由说的要求

验证结果VerifierResult类中有一个vid字段,用于标识成功注册的声注模型。结果中包含的所有字段,以及各字段的含义见第十二章附录。 

10.2 声纹验证

声纹验证过程与声纹注册类似,不同之处仅在于ISV_SST需要设置为”verify”,且不用设置ISV_RGN参数,其他参数的设置、验证结果的处理过程完全可参考上节。

10.3 模型操作

声纹注册成功后,在语音云端上会生成一个对应的模型来存储声纹信息,声纹模型的操作即对模型进行查询和删除。

Java Code
  1. // 首先设置声纹密码类型  
  2. mVerify.setParameter(SpeechConstant.ISV_PWDT, "" + pwdType);  
  3. // 对于文本和数字密码,必须设置声纹注册时用的密码文本,pwdText的取值为“芝麻开门”或者是从云平台拉取的数字密码。自由说略过此步  
  4. mVerify.setParameter(SpeechConstant.ISV_PWD, pwdText);  
  5. // 特别地,自由说一定要设置采样频率为8000,其他密码则不需要  
  6. mVerify.setParameter(SpeechConstant.SAMPLE_RATE, “8000”);  
  7. // 设置待操作的声纹模型的vid  
  8. mVerify.setParameter(SpeechConstant.ISV_VID, vid);  
  9. // 调用sendRequest方法查询或者删除模型,cmd的取值为“que”或“del”,表示查询或者删除,auth_id是声纹对应的用户标识,操作结果以异步方式回调SpeechListener类型对象listener的onBufferReceived方法进行处理,处理方法详见Demo示例  
  10. mVerify.sendRequest(cmd, auth_id, listener);  

11 人脸识别

人脸识别不仅可以检测出照片中的人脸,还可以进行人脸注册和验证。相关概的说明如下: 

表 6 人脸识别概念说明 

名称

说明

reg/注册

上传包含一张人脸的图片到云端,引擎对其进行训练,生成一个与之对应的模型,返回模型id(gid)。

verify/验证

注册成功后,上传包含一张人脸的图片到云端,引擎将其与所注册的人脸模型进行比对,验证是否为同一个人,返回验证结果。

detect/检测

上传一张图片,返回该图片中人脸的位置(支持多张人脸)。

align/聚焦

上传一张图片,返回该图片中人脸的关键点坐标(支持多张人脸)。

gid/模型id

人脸模型的唯一标识,长度为32个字符,注册成功后生成。一个用户(auth_id)理论上可以注册多个人脸模型(对应gid),在进行验证时必须指定gid。

auth_id/用户id

由应用传入,用于标识用户身份,长度为6-18个字符(由英文字母、数字、下划线组成,不能以数字开头)。同一个auth_id暂时仅允许注册一个模型。

注:人脸识别只支持PNG、JPG、BMP格式的图片。

11.1 人脸注册

Java Code
  1. // 使用FaceRequest(Context context)构造一个FaceRequest对象  
  2. FaceRequest face = new FaceRequest(this);  
  3. // 设置业务类型为注册  
  4. face.setParameter(SpeechConstant.WFR_SST, "reg");  
  5. // 设置auth_id  
  6. face.setParameter(SpeechConstant.WFR_AUTHID, mAuthId);  
  7. // 调用sendRequest(byte[] img, RequestListener listener)方法发送注册请求,img为图片的二进制数据,listener为处理注册结果的回调对象  
  8. face.sendRequest(imgData, mRequestListener);    

回调对象mRequestListener的定义如下: 

Java Code
  1. RequestListener mRequestListener = new RequestListener() {  
  2. // 获得结果时返回,JSON格式。  
  3.     public void onBufferReceived(byte[] buffer) {}  
  4.     // 流程结束时返回,error不为空则表示发生错误。   
  5.     public void onCompleted(SpeechError error) {}  
  6.     // 保留接口,扩展用。  
  7.     public void onEvent(int eventType, Bundle params) {}  
  8. }   

11.2 人脸验证

Java Code
  1. // 设置业务类型为验证  
  2. face.setParameter(SpeechConstant.WFR_SST, "verify");  
  3. // 设置auth_id  
  4. face.setParameter(SpeechConstant.WFR_AUTHID, mAuthId);  
  5. // 设置gid,由于一个auth_id下只有一个gid,所以设置了auth_id时则可以不用设置gid。但是当  
  6. // 没有设置auth_id时,必须设置gid  
  7. face.setParameter(SpeechConstant.WFR_GID, gid);  
  8. // 调用sendRequest(byte[] img, RequestListener listener)方法发送注册请求,img为图片的二进制数据,listener为处理注册结果的回调对象  
  9. face.sendRequest(imgData, mRequestListener);    

注册/验证结果中包含了是否成功、gid等信息,详细的JSON格式请参照第十二章附录,具体解析过程详见FaceDemo工程。

11.3 人脸检测

Java Code
  1. // 设置业务类型为验证  
  2. face.setParameter(SpeechConstant.WFR_SST, "detect");  
  3. // 调用sendRequest(byte[] img, RequestListener listener)方法发送注册请求,img为图片的二进制数据,listener为处理注册结果的回调对象  
  4. face.sendRequest(imgData, mRequestListener);   

11.4 人脸聚焦

Java Code
  1. // 设置业务类型为验证  
  2. face.setParameter(SpeechConstant.WFR_SST, "align");  
  3. // 调用sendRequest(byte[] img, RequestListener listener)方法发送注册请求,img为图片的二进制数据,listener为处理注册结果的回调对象  
  4. face.sendRequest(imgData, mRequestListener);  

12 附录

 12.1 识别结果说明 

JSON字段

英文全称

类型

说明

sn

sentence

number

第几句

ls

last sentence

boolean

是否最后一句

bg

begin

number

开始

ed

end

number

结束

ws

words

array

cw

chinese word

array

中文分词

w

word

string

单字

sc

score

number

分数

听写结果示例:

JavaScript Code
  1. {"sn":1,"ls":true,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"w":"今天","sc":0}]},{"bg":0,"cw":{"w":"的","sc":0}]},{"bg":0,"cw":[{"w":"天气","sc":0}]},{"bg":0,"cw":[{"w":"怎么样","sc":0}]},{"bg":0,"cw":[{"w":"。","sc":0}]}]}  

多候选结果示例:

JavaScript Code
  1. {"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"w":"我想听","sc":0}]},{"bg":0,"cw":[{"w":"拉德斯基进行曲","sc":0},{"w":"拉得斯进行曲","sc":0}]}]}    

语法识别结果示例:

JavaScript Code
  1. {"sn":1,"ls":true,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":"70","gm":"0","w":"北京到上海"},{"sc":"69","gm":"0","w":"天京到上海"},{"sc":"58","gm":"0","w":"东京到上海"}]}]}    

12.2 合成发音人列表

1、  语言为中英文的发音人可以支持中英文的混合朗读。

2、  英文发音人只能朗读英文,中文无法朗读。

3、  汉语发音人只能朗读中文,遇到英文会以单个字母的方式进行朗读。

4、  使用新引擎参数会获得更好的合成效果。 

发音人名称

属性

语言

参数名称

新引擎参数

备注

小燕

青年女声

中英文(普通话)

xiaoyan

 

默认

小宇

青年男声

中英文(普通话)

xiaoyu

 

 

凯瑟琳

青年女声

英文

catherine

 

 

亨利

青年男声

英文

henry

 

 

玛丽

青年女声

英文

vimary

 

 

小研

青年女声

中英文(普通话)

vixy

 

 

小琪

青年女声

中英文(普通话)

vixq

xiaoqi

 

小峰

青年男声

中英文(普通话)

vixf

 

 

小梅

青年女声

中英文(粤语)

vixm

xiaomei

 

小莉

青年女声

中英文(台湾普通话)

vixl

xiaolin

 

小蓉

青年女声

汉语(四川话)

vixr

xiaorong

 

小芸

青年女声

汉语(东北话)

vixyun

xiaoqian

 

小坤

青年男声

汉语(河南话)

vixk

xiaokun

 

小强

青年男声

汉语(湖南话)

vixqa

xiaoqiang

 

小莹

青年女声

汉语(陕西话)

vixying

 

 

小新

童年男声

汉语(普通话)

vixx

xiaoxin

 

楠楠

童年女声

汉语(普通话)

vinn

nannan

 

老孙

老年男声

汉语(普通话)

vils

 

 

Mariane

 

法语

Mariane

 

 

Allabent

 

俄语

Allabent

 

 

Gabriela

 

西班牙语

Gabriela

 

 

Abha

 

印地语

Abha

 

 

XiaoYun

 

越南语

XiaoYun

 

 

12.3 错误码列表

1、10000~19999的错误码参见MSC错误码链接。

2、其它错误码参见下表: 

错误码

错误值

含义

ERROR_NO_NETWORK

20001

无有效的网络连接

ERROR_NETWORK_TIMEOUT

20002

网络连接超时

ERROR_NET_EXPECTION

20003

网络连接发生异常

ERROR_INVALID_RESULT

20004

无有效的结果

ERROR_NO_MATCH

20005

无匹配结果

ERROR_AUDIO_RECORD

20006

录音失败

ERROR_NO_SPPECH

20007

未检测到语音

ERROR_SPEECH_TIMEOUT

20008

音频输入超时

ERROR_EMPTY_UTTERANCE

20009

无效的文本输入

ERROR_FILE_ACCESS

20010

文件读写失败

ERROR_PLAY_MEDIA

20011

音频播放失败

ERROR_INVALID_PARAM

20012

无效的参数

ERROR_TEXT_OVERFLOW

20013

文本溢出

ERROR_INVALID_DATA

20014

无效数据

ERROR_LOGIN

20015

用户未登陆

ERROR_PERMISSION_DENIED

20016

无效授权

ERROR_INTERRUPT

20017

被异常打断

ERROR_VERSION_LOWER

20018

版本过低

ERROR_COMPONENT_NOT_INSTALLED

21001

没有安装语音组件

ERROR_ENGINE_NOT_SUPPORTED

21002

引擎不支持

ERROR_ENGINE_INIT_FAIL

21003

初始化失败

ERROR_ENGINE_CALL_FAIL

21004

调用失败

ERROR_ENGINE_BUSY

21005

引擎繁忙

ERROR_LOCAL_NO_INIT

22001

本地引擎未初始化

ERROR_LOCAL_RESOURCE

22002

本地引擎无资源

ERROR_LOCAL_ENGINE

22003

本地引擎内部错误

ERROR_IVW_INTERRUPT

22004

本地唤醒引擎被异常打断

ERROR_UNKNOWN

20999

未知错误

12.4 声纹业务

文本密码JSON示例:

JavaScript Code
  1. {"txt_pwd":["我的地盘我做主","移动改变生活","芝麻开门"]}    

数字密码JSON示例:

JavaScript Code
  1. {"num_pwd":["03285469","09734658","53894276","57392804","68294073"]}    

声纹业务结果(VerifierResult)成员说明 

成员

说明

sst

业务类型,取值为train或verify

ret

返回值,0为成功,-1为失败

vid

注册成功的声纹模型id

score

当前声纹相似度

suc

本次注册已成功的训练次数

rgn

本次注册需要的训练次数

trs

注册完成描述信息

err

注册/验证返回的错误码

dcs

描述信息

12.5 人脸识别结果说明 

JSON字段

类型

说明

sst

String

业务类型,取值为“reg或“verify”

ret

int

返回值,0为成功,-1为失败

rst

String

注册/验证成功

gid

String

注册成功的人脸模型id

score

double

人脸验证的得分(验证时返回)

sid

String

本次交互会话的id

uid

String

返回的用户id

注册结果示例:

JavaScript Code
  1. {"ret":"0","uid":"","rst":"success","gid":"wfr278b0092@hf9a6907805f269a2800","sid":"wfr278b0092@hf9a6907805f269a2800","sst":"reg"}    

验证结果示例:

JavaScript Code
  1. {"ret":"0","uid":"","sid":"wfr27830092@hf9a6907805fb19a2800","sst":"verify","score":"100.787","rst":"success","gid":"wfr278b0092@hf9a69"}    

检测结果示例:

JavaScript Code
  1. {"ret":"0","uid":"a12456952","rst":"success","face":[{"position":{"bottom":931,"right":766,"left":220,"top":385},"attribute":{"pose":{"pitch":1}},"tag":"","confidence":" 8.400"}],"sid":"wfr278f0004@hf9a6907bcc8c19a2800","sst":"detect"}   

 聚焦结果示例:

JavaScript Code
  1. {"ret":"0","uid":"a1316826037","rst":"success","result":[{"landmark":{"right_eye_right_corner":{"y":"98.574","x":"127.327"},"left_eye_left_corner":{"y":"101.199","x":"40.101"},"right_eye_center":{"y":"98.090","x":"113.149"},"left_eyebrow_middle":{"y":"83.169","x":"46.642"},"right_eyebrow_left_corner":{"y":"85.135","x":"96.663"},"mouth_right_corner":{"y":"164.645","x":"109.419"},"mouth_left_corner":{"y":"166.419","x":"60.044"},"left_eyebrow_left_corner":{"y":"89.283","x":"28.029"},"right_eyebrow_middle":{"y":"80.991","x":"117.417"},"left_eye_center":{"y":"99.803","x":"53.267"},"nose_left":{"y":"137.397","x":"66.491"},"mouth_lower_lip_bottom":{"y":"170.229","x":"86.013"},"nose_right":{"y":"136.968","x":"101.627"},"left_eyebrow_right_corner":{"y":"86.090","x":"68.351"},"right_eye_left_corner":{"y":"99.898","x":"100.736"},"nose_bottom":{"y":"144.465","x":"84.032"},"nose_top":{"y":"132.959","x":"83.074"},"mouth_middle":{"y":"164.466","x":"85.325"},"left_eye_right_corner":{"y":"101.043","x":"67.275"},"mouth_upper_lip_top":{"y":"159.418","x":"84.841"},"right_eyebrow_right_corner":{"y":"84.916","x":"136.423"}}}],"sid":"wfr278500ec@ch47fc07eb395d476f00","sst":"align"}  

13 常见问题

1)集成语音识别功能时,程序启动后没反应?

答:请检查是否忘记使用SpeechUtility初始化。也可以在监听器的onError函数中打印错误信息,根据信息提示,查找错误源。

Java Code
  1. public void onError(SpeechError error) {  
  2.     Log.d(error.toString());  
  3. }   

2)SDK是否支持本地语音能力?

答:Android平台SDK已经支持本地合成、本地命令词识别、本地听写语音唤醒功能了,声纹功能也即将上线。

3) Appid的使用规范?

答:申请的Appid和对应下载的SDK具有一致性,请确保在使用过程中规范传入。一个Appid对应一个平台下的一个应用,如在多个平台开发同款应用,还需申请对应平台的Appid。

 更多问题,请见:

http://xfyun.cn/index.php/default/doccenter/doccenterInner?itemTitle=ZmFx&anchor=Y29udGl0bGU2Mw==

 联系方式:

邮箱:msp_support@iflytek.com               QQ群:91104836,153789256


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/44310.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

讯飞语音转写.NET版本

吐槽一下&#xff0c;讯飞官方webapi&#xff0c;没有提供.NET版本案例&#xff0c;只有python&#xff0c;java&#xff0c;只好自己摸索&#xff0c;代码不太简洁&#xff0c;这里复习总结一下&#xff0c;权当作做笔记摘抄一样总结一番&#xff0c;也给第一天尝试其他小伙伴…

蓝桥杯省赛真题——最少刷题数

2022年第13届省赛&#xff0c;蓝桥杯真题。 (本笔记适合初通 Python 的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅仅是基础那么简单…… 地址&…

派发奖学金

根据输入的分数成绩列表&#xff0c;给排名前10派发奖学金。 (本笔记适合能熟练应用列表数据结构的 coder 翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c;不仅…

New Bing 全面开放?我看未必

前段时间大家应该都被ChatGPT刷屏了&#xff0c;其实就回答来说New Bing 才是最厉害的&#xff0c;因为它底层使用了ChatGPT 并且可以支持联网查询数据&#xff0c;回答中还能支持看到出处&#xff0c;方便确认其真实性。 New Bing 是微软基于 OpenAI ChatGPT 技术开发的新一代…

微软Bing突然爆炸级更新!无需等待人人可用,答案图文并茂,网友:逼 ChatGPT 放大招?...

杨净 明敏 发自 凹非寺量子位 | 公众号 QbitAI 所有人都能上手微软Bing了&#xff01; 今天&#xff0c;微软突然官宣全面开放BingChat&#xff1a; 无需任何等待。只需注册一个账户&#xff0c;首页即可体验。 更关键的是&#xff0c;还有一大堆堪称“家底”的新功能来袭&…

90后韩尚佑晋升抖音总裁

上一篇&#xff1a;程序员变高危职位&#xff01;又一个删库跑路进去了 近日&#xff0c;字节跳动发生组织架构调整。 抖音副总裁韩尚佑成为抖音部门负责人&#xff0c;统筹管理抖音、中国直播、生活服务业务线。抖音旗下各业务板块负责人改向韩尚佑汇报&#xff0c;包括基础产…

能取代90%的人的工作的ChatGpt到底牛在哪?

人工智能研究实验室OpenAI在2022年11月30日发布了自然语言生成模型ChatGPT&#xff0c;上线两个月就已经超过一亿用户&#xff0c;成为了人工智能界当之无愧的超级大网红。ChatGPT凭借着自身强大的拟人化及时应答能力迅速破圈&#xff0c;引起了各行各业的热烈讨论。简单来说Ch…

git clone出现 fatal: unable to access ‘https://github.com/...‘的两种解决方法

利用gitee下载github中开放的源码 方法一&#xff1a; step 1&#xff1a; step 2&#xff1a; step 3&#xff1a; 方法二 step 1: step 2&#xff1a; step 3: step 4方法一&#…

chatgpt赋能python:Python如何变成App:一篇SEO文章

Python如何变成App&#xff1a;一篇SEO文章 Python作为一种高级编程语言&#xff0c;广泛应用于科学、数据分析、Web开发以及机器学习等领域。但是&#xff0c;Python如何用于移动应用程序的开发呢&#xff1f;本文将介绍Python变成App的方法以及与之相关的SEO技术。 什么是P…

chatgpt赋能python:PythonGUI开发的介绍

Python GUI开发的介绍 了解GUI GUI&#xff08;图形用户界面&#xff09;是一种计算机与人之间进行交互的方式&#xff0c;它使用视觉元素如窗口、按钮、滑块、图像等替代了命令行交互模式。GUI让用户可以更快速、高效、舒适地完成任务&#xff0c;位于操作系统的图形外壳上&…

好文转载 ChatGPT被淘汰了?Auto-GPT到底有多强

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。 说Auto-GPT淘汰了ChatGPT了&#xff0c;显然是营销文案里面的标题党。毕竟它还是基于ChatGPT的API&#xff0c;某种意义只是基于ChatGPT能力的应用。但最近&#xff0c;Auto…

热闹!热闹!一觉醒来,ChatGPT被淘汰成了过气明星?

AutoGPT&#xff1a;AI领域的新成员 近日&#xff0c;AI领域似乎出现了一种新的趋势&#xff1a;自主人工智能。 最近一个名为AutoGPT的研究开始走进大众视野。特斯拉前AI总监、刚刚回归OpenAI的Andrej Karpathy也为其大力宣传&#xff0c;并在推特赞扬&#xff1a;“AutoGPT是…

只见新人笑,不见旧人哭 ChatGPT淘汰了多少产品?快来了解!

ChatGPT作为目前世界上最先进的人工智能聊天工具&#xff0c;其GPT模型就是一种自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;使用多层变换器&#xff08;Transformer&#xff09;来预测下一个单词的概率分布&#xff0c;通过训练在大型文本语料库上学习到的语言模…

谷歌翻译插件imtranslator安装使用步骤

在阅读网页的时候会遇到一些看不懂的英文&#xff0c;这时候再去打开翻译软件去翻译难免扫兴&#xff1b;所以我需要一款实时划词翻译的软件&#xff01; 这里介绍一款我在用的谷歌插件&#xff1a;imtranslator 步骤&#xff1a; 1.(科学上网)在谷歌应用商城下载imtranslator插…

推荐一个谷歌浏览器插件:划词翻译

地址&#xff1a;划词翻译插件 最近在看一些英文文档&#xff0c;遇到了一些词汇不认识&#xff0c;在谷歌浏览器上找到了这个翻译插件 谷歌浏览器自己有一个全文翻译的功能&#xff0c;对于一些技术类文档&#xff0c;有些词如果翻译错误了就会闹出笑话来&#xff0c;限于对…

【Google谷歌翻译】Zotero翻译插件中的引擎不可用,解决

配置文件后Zotero的Google翻译引擎可用 &#xff08;Win10系统&#xff09; 以记事本方式打开C:\Windows\System32\drivers\etc\hosts 在最后一行加入203.208.39.194 translate.googleapis.com&#xff0c;然后保存Zotero翻译插件中的“谷歌API&#xff08;中国可用&#xff09…

谷歌浏览器翻译插件安装步骤

首先下载最新版谷歌浏览器&#xff0c;这样能保证和我的操作界面一样&#xff0c;因为我的是最新版本的谷歌浏览器 一、先下载可用的翻译插件 插件下载地址&#xff1a;https://download.csdn.net/download/weixin_44743624/87631622 下载完成后解压&#xff0c;然后打开谷歌…

Chrome浏览器使用谷歌翻译插件的正确方法

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

win10中cmd拒绝访问授权

CMD控制台提示“请求的操作需要提升”怎么解决呢?通常导致此类情况产生的重要原因是操作权限不足所造成的&#xff0c;对此可以通过以下方法来解决。 方法一&#xff1a; 1、在CMD控制台界面中进行操作时&#xff0c;当出现“请求的操作需要提升”的提示时&#xff0c;我们需要…

抖音抓包获取cookie

抓包获取抖音用户cookie 获取抖音cookie目前实践测试两种方式&#xff1a; ​ 一&#xff1a;扫描抖音开放平台二维码&#xff0c;扫码后获取cookie ​ 二&#xff1a;利用fiddler抓包工具对雷电模拟器进行抓包获取cookie 今天就分享一下利用fiddler抓包工具获取cookie 一、准…