自然语言交流系统phxnet团队创新实训个人博客

DRY!-geek~ DRY!-geek~     2022-09-01     192

关键词:

讯飞的语音sdk是需要申请的,地址是:http://dev.voicecloud.cn/developer.php?vt=1 。申请一个讯飞的开发者账号,然后申请一个appid,申请的时候需要填写开发者信息和你的应用的信息。

申请之后经过审核通过,会得到一个appid,这个是在使用语音服务时需要用到的。(笔者感觉申请还是比较容易通过的,简单地填写一下就通过了。速度也很快,我在晚上十一点多申请的,到第二天早上九点多就收到审核通过的邮件。个人感觉这个审核只是为了防止恶意使用,毕竟语音服务是要使用讯飞的服务器资源的。)

申请到appid之后就可以下载SDK了,然后使用语音服务了。

 

以下我试用的过程,(点击button,弹出语音框,说完之后将识别的结果显示在EditText中):

 

  • 在eclipse里新建一个android工程
  • 导入讯飞的语音jar包
  • 讯飞的服务是需要一堆权限的,在manifest.xml中加入
    [html] view plain copy
     
     print?
    1. <uses-permission android:name="android.permission.RECORD_AUDIO" />  
    2. <uses-permission android:name="android.permission.INTERNET" />  
    3. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    4. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
    5. <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />  
    6. <uses-permission android:name="android.permission.READ_PHONE_STATE" />  
    分别为:通过麦克风录音、联网、获取网络信息状态、获取wifi状态、改变网络状态如是否能联网、访问电话状态
  • 在main.xml中添加一个EditText和一个Button,如下
    [html] view plain copy
     
     print?
    1. <?xml version="1.0" encoding="utf-8"?>  
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    3.     android:layout_width="fill_parent"  
    4.     android:layout_height="fill_parent"  
    5.     android:orientation="vertical" >  
    6.   
    7.     <EditText  
    8.         android:id="@+id/editText"  
    9.         android:layout_width="fill_parent"  
    10.         android:layout_height="300dp"  
    11.         android:gravity="top"  
    12.         android:inputType="textMultiLine" >  
    13.   
    14.         <requestFocus />  
    15.     </EditText>  
    16.   
    17.     <Button  
    18.         android:id="@+id/button_start"  
    19.         android:layout_width="wrap_content"  
    20.         android:layout_height="wrap_content"  
    21.         android:text="点击开始说话" />  
    22.   
    23. </LinearLayout>  
  • 然后在MainActivity中编写代码实现了

 

(这里可以看到在线的文档:http://dev.voicecloud.cn/developer.php?category=YW5kcm9pZA%3D%3D&column=ZG9jdW1lbnQ%3D&type=d2lkZ2V0

通过阅读讯飞给的文档,可以发现标准的识别控件是RecognizerDialog——是一个Dialog的子类,所以我们是可以在Activity中通过showDialog(int)方法来调用它的。

重写Activity的方法

[java] view plain copy
 
 print?
  1. @Override  
  2. protected Dialog onCreateDialog(int id) {}  

在其中创建并设置好一个RecognizerDialog即可。

 

 

创建RecognizerDialog方法为

[java] view plain copy
 
 print?
  1. RecognizerDialog recognizerDialog = new RecognizerDialog(  
  2.         MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid  

(其中appid应该写自己从讯飞申请到的appid,由于协议的问题,我不便把自己申请的id公开,所以这里用了1234567来代替。根据讯飞的说明,非法的appid是不能使用语音服务的,但是我用随机数字试验了一下,居然也是能用的,不知道是不是BUG。)

 

                          官方的文档:

        技术分享

然后需要设置识别参数

[java] view plain copy
 
 print?
  1. recognizerDialog.setEngine("sms", null, null);  

第一个参数“sms”表示为请求的服务为“语音识别”。后两个参数暂时设为null就好。

 

             官方文档:

技术分享

最后还需给recognizerDialog设置一个listener,回调接口用以获取结果,

recognizerDialog.setListener(RecognizerDialogListener listener)的参数为RecognizerDialogListener接口,实现此接口要重写两个方法:onResults(ArrayList results,boolean isLast)和onEnd(SpeechError error)。用以获取和处理结果。

我的实现为直接写了一个匿名类:

[java] view plain copy
 
 print?
  1. recognizerDialog.setListener(new RecognizerDialogListener() {  
  2.     @Override  
  3.     public void onResults(ArrayList<RecognizerResult> results,  
  4.             boolean arg1) {  
  5.         StringBuffer result = new StringBuffer();  
  6.         for (RecognizerResult r : results) {  
  7.             result.append(r.text);  
  8.         }  
  9.         editText.setText(result.toString());  
  10.     }  
  11.   
  12.     @Override  
  13.     public void onEnd(SpeechError arg0) {  
  14.   
  15.     }  
  16. });  

然后将此RecognizerDialog返回即可。

 

 

完整的MainActivity代码:

 

[java] view plain copy
 
 print?
  1. import com.iflytek.speech.RecognizerResult;  
  2. import com.iflytek.speech.SpeechError;  
  3. import com.iflytek.ui.RecognizerDialog;  
  4. import com.iflytek.ui.RecognizerDialogListener;  
  5.   
  6. public class MainActivity extends Activity {  
  7.   
  8.     EditText editText = null;  
  9.     Button startButton = null;  
  10.   
  11.     @Override  
  12.     public void onCreate(Bundle savedInstanceState) {  
  13.         super.onCreate(savedInstanceState);  
  14.         setContentView(R.layout.main);  
  15.         editText = (EditText) findViewById(R.id.editText);  
  16.         startButton = (Button) findViewById(R.id.button_start);  
  17.         startButton.setOnClickListener(new OnClickListener() {  
  18.             @Override  
  19.             public void onClick(View v) {  
  20.                 showDialog(1);  
  21.             }  
  22.         });  
  23.     }  
  24.   
  25.     @Override  
  26.     protected Dialog onCreateDialog(int id) {  
  27.         RecognizerDialog recognizerDialog = new RecognizerDialog(  
  28.                 MainActivity.this, "appid=1234567");// 这里应该写从科大讯飞申请到的appid  
  29.         recognizerDialog.setEngine("sms", null, null);  
  30.         recognizerDialog.setListener(new RecognizerDialogListener() {  
  31.             @Override  
  32.             public void onResults(ArrayList<RecognizerResult> results,  
  33.                     boolean arg1) {  
  34.                 StringBuffer result = new StringBuffer();  
  35.                 for (RecognizerResult r : results) {  
  36.                     result.append(r.text);  
  37.                 }  
  38.                 editText.setText(result.toString());  
  39.             }  
  40.   
  41.             @Override  
  42.             public void onEnd(SpeechError arg0) {  
  43.   
  44.             }  
  45.         });  
  46.         return recognizerDialog;  
  47.     }  
  48. }  


程序在真机运行截图,经过检验,科大讯飞的识别率还是很高的。

 

  技术分享       

技术分享      


自然语言交流系统phxnet团队创新实训个人博客

 下载emacs-23.1.tar.gz      http://ftp.gnu.org/pub/gnu/emacs/emacs-23.1.tar.gz    cd/opt   //cpemacs-23.1.tar.gz/opt  &nbs 查看详情

自然语言交流系统phxnet团队创新实训个人博客

 在本项目中关于天空盒子的使用的配置方法: 给场景添加天空盒 第二种方式 在菜单栏中选择:Edit->RenderSetting,在保证不在选择场景中其它文件的前提下,Inspector面板中将显示RenderSetting属性,入下图  c... 查看详情

自然语言交流系统phxnet团队创新实训个人博客

  今天想测试一下“庖丁”分词的效果,编写了一个测试小程序,从文件中读入文本,并将分词结果显示到控制台。 环境平台:Win7+eclipse 过程如下:1.编辑paoding-analysis.jar中的paoding-dic-home.properties文件,去掉“#paod... 查看详情

自然语言交流系统phxnet团队创新实训个人博客

讯飞的语音sdk是需要申请的,地址是:http://dev.voicecloud.cn/developer.php?vt=1 。申请一个讯飞的开发者账号,然后申请一个appid,申请的时候需要填写开发者信息和你的应用的信息。申请之后经过审核通过,会得到一个appid,这个... 查看详情

自然语言交流系统phxnet团队创新实训个人博客

名思义是给游戏场景添加一个天空背景让游戏更加精美,更具有魅力添加天空盒有两种方式 1: 在当前相机上添加skybox 2: 在当前场景上添加skybox上面的两种方式的结果是一样的 第一种方式的优势在于如果世... 查看详情

自然语言交流系统phxnet团队创新实训个人博客(十三)

  关于javasocket的一些总结: Java Socket通信有很多的时候需要我们不断的学习。方面效率虽然不及C与C++但它以灵活语言优势,为大家广为使用。 本文就对在使用java做通信方面程序时候应改注意问题做以说明。1.... 查看详情

团队博客——1

...晗我们四个人一组;选择的题目是“互联网+智能家居系统”。由于之前没有接触过物联网这种与硬件相结合的课题,所以要学习的有很多,有很多资料需要查任务也比较艰巨。“行动是成功的开始,等待是失败的源头&r... 查看详情

创新实训定期汇报5.11

经组内成员讨论,我们决定每周四和周日汇报个人学习进度和项目进展,汇报内容会在各自博客上更新。本博客仅做简单汇总。最近这段时间,组内成员在学习原SDUOJ的前端框架和Python爬虫基础,并且可以根据国内OJ进行初步的... 查看详情

codingsouls团队-个人博客

...完成相应的安装     MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括A 查看详情

实训二--博客三

...小组,然后博主会和大家互动,共同探讨,解决问题。在团队精神的作用下,团队成员产生了互相关心、互相帮助的交互行为,显示出关心团队的责任感,并努力自觉地维护团队的集体荣誉。感谢老师这几个月的谆谆教诲,今后... 查看详情

山东大学软件学院2021年春季创新项目实训个人总结

...没有花多少时间思考和准备,直到队长给出seafile开发团队的github地址之后才上去作了简单浏览。开始研究seahub以及seafile-server的时候,我才发现,源代码的规模过于庞大,以至于我像是个误入迷宫的孩子,迷... 查看详情

转:高创新团队

...跨界的、跨职业的、跨行业的、跨学门的人聚在一起共同交流才会产生真正的头脑风暴, 查看详情

软工团队项目个人总结

...在开发我们的这款游戏的开始阶段,我们与校内很多同学交流了一下他们对这款游戏的看法,并与他们在线下对游戏进行试玩,然后他们也对我们提出了很多意见,包括有些时候觉得我们某些地方设置的太傻了,随机性太大,博... 查看详情

[课程设计]scrum多鱼点餐系统(团队交流日)

 [课程设计]Scrum 多鱼点餐系统(团队交流日)1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统WEB 5.Sprint1时间:11.14-11.2... 查看详情

实训二---博客一

一、团队介绍1、队员学号:16012124于俊渤(组长)博客链接 http://www.cnblogs.com/yujunchun/       16012113孙宁君        博客链接 http://www.cnblogs.com/snjsnjsnj/       16012111周帅 ... 查看详情

团队信息

团队名称:不正经团队选题:《餐厅到店点餐系统》WEB版成员学号姓名个人博客地址个人Github地址团队博客地址 http://www.cnblogs.com/jjy520/团队Github地址  https://github.com/huangMP2014061114102杨晶晶 http://www.cnblogs.com/jjy520/&nb... 查看详情

团队成员的简介和个人博客地址,团队的源码仓库地址

1.团队成员的简介和个人博客地址,团队的源码仓库地址。组长:刘映华(201421122021)组员:郭和水(201421122017)兰运良(201421122030)刘映华:擅长的技术:Java编程的兴趣:web前端开发、java后台开发博客地址:http://www.cnblogs.com/... 查看详情

软件工程团队——“星辰”成立,个人博客登记(非团队博客)

...了一个面向开发结构更复杂、任务量更庞大的软件的制作团队,名字由小组成员一致决定为“星辰”,哦!对了还有我们的口号——“我们的目标是星辰大海”!  我现在先不介绍我的队友了,就 查看详情