玩转百度语音识别,就是这么简单

http://www.cnblogs.com/bigdataZJ/p/SpeechRecognition.html

  明后两天就是公司一年一度的Fedex Day了。我的理解就是技术界的头脑风暴,idea喷如泉涌的盛大节日。

  对于这次活动每个人或者两三个人一组需要有个idea,针对当前的产品现状,提出自己的改进或者丰富产品的想法,我拿出自己的手机并登了经常去的网站,语音识别这个名词脱颖而出,击中我的脑海。相比较以前手指时代的手工输入,各种在中英文乃至数字之间进行切换,往往还会因为走神或者手抖导致输入出错,然后又是一通狂按删除键,一遍一遍的输入,面对偌大的屏幕,有种使不上劲的感觉。语音输入就可以告别这一烦恼,如今的语音识别准确率高,使用简单易操作,更是为解放双手铺平了道路。你可以对着siri说帮我查看最近的天气或者定个闹铃,你可以使用讯飞语音输入法,说到哪就输入到哪,你可以让各种品牌的手机自带的语音助手给你讲个笑话……

  今天闲来想先动动手,了解下这个语音识别技术,有什么好用的api可以调用。因为用的是度娘,所以映入眼帘的就是百度语音,"永久免费智能语音开放平台"的旗号还是深深的把我打动了。

 

  摸索下来,看了两种方式,一是基于REST API的方式完成语音识别,另一个是基于移动端Android平台的app语音识别。

 

一 、获得入场券

1.注册成为开发者

  点击进入http://yuyin.baidu.com/,用你的百度账号完成登录,如果在点击“应用管理”选项卡后发现如下图所示

  说明你需要完成注册验证,提交完毕后,你就是一名百度开发者用户了。

 

2.创建应用

  完成上面操作后,点击“应用管理”,如果页面中没有任何应用列表,说明你还需要添加一个应用,点击页面右上角“创建新应用”,填好应用类别并给他个名字,这样就完成了应用创建。创建成功后就会看到类似下面这样的效果。

 

 

  在“查看Key”中,我们可以看到后面我们需要用到的App ID, API Key和Secret Key

 

3.开通服务

  创建了应用后,我们需要开通语音识别的服务之后才能使用语音识别。点击应用卡片上的“开通服务”,选择语音识别即可。

 

 

  至此,您已经获得了入场券资格。

 

二、 基于REST API 的语音识别

  百度语音支持android、ios和REST API三种平台。这里先介绍REST API,相对来说不用搭建android或者ios开发环境。

  进入http://yuyin.baidu.com/asr/download下载REST API的示例和文档。

  示例分别有java、linux c和php版本,还附带了一个test.pcm的音频文件。

  选择java版本,导入eclipse中,代码很简单就一个测试类。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package  com.baidu.speech.serviceapi;
import  java.io.BufferedReader;
import  java.io.DataOutputStream;
import  java.io.File;
import  java.io.FileInputStream;
import  java.io.IOException;
import  java.io.InputStream;
import  java.io.InputStreamReader;
import  java.net.HttpURLConnection;
import  java.net.URL;
import  javax.xml.bind.DatatypeConverter;
import  org.json.JSONObject;
public  class  Sample {
     private  static  final  String serverURL =  "http://vop.baidu.com/server_api" ;
     private  static  String token =  "" ;
     private  static  final  String testFileName =  "C:\\Users\\Administrator\\workspace\\speechrecognition\\src\\test.pcm" ;
     //put your own params here
     private  static  final  String apiKey =  "***" ; //这里的apiKey就是前面申请在应用卡片中的apiKey
     private  static  final  String secretKey =  "***" ; //这里的secretKey就是前面申请在应用卡片中的secretKey
     private  static  final  String cuid =  "***" ; //cuid是设备的唯一标示,因为我用的是PC,所以这里用的是网卡Mac地址
     public  static  void  main(String[] args)  throws  Exception {
         getToken();
         method1();
         method2();
     }
     private  static  void  getToken()  throws  Exception {
         String getTokenURL =  "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials"  +
             "&client_id="  + apiKey +  "&client_secret="  + secretKey;
         HttpURLConnection conn = (HttpURLConnection)  new  URL(getTokenURL).openConnection();
         token =  new  JSONObject(printResponse(conn)).getString( "access_token" );
     }
     private  static  void  method1()  throws  Exception {
         File pcmFile =  new  File(testFileName);
         HttpURLConnection conn = (HttpURLConnection)  new  URL(serverURL).openConnection();
         // construct params
         JSONObject params =  new  JSONObject();
         params.put( "format" "pcm" );
         params.put( "rate" 8000 );
         params.put( "channel" "1" );
         params.put( "token" , token);
         params.put( "cuid" , cuid);
         params.put( "len" , pcmFile.length());
         params.put( "speech" , DatatypeConverter.printBase64Binary(loadFile(pcmFile)));
         // add request header
         conn.setRequestMethod( "POST" );
         conn.setRequestProperty( "Content-Type" "application/json; charset=utf-8" );
         conn.setDoInput( true );
         conn.setDoOutput( true );
         // send request
         DataOutputStream wr =  new  DataOutputStream(conn.getOutputStream());
         wr.writeBytes(params.toString());
         wr.flush();
         wr.close();
         printResponse(conn);
     }
     private  static  void  method2()  throws  Exception {
         File pcmFile =  new  File(testFileName);
         HttpURLConnection conn = (HttpURLConnection)  new  URL(serverURL
                 "?cuid="  + cuid +  "&token="  + token).openConnection();
         // add request header
         conn.setRequestMethod( "POST" );
         conn.setRequestProperty( "Content-Type" "audio/pcm; rate=8000" );
         conn.setDoInput( true );
         conn.setDoOutput( true );
         // send request
         DataOutputStream wr =  new  DataOutputStream(conn.getOutputStream());
         wr.write(loadFile(pcmFile));
         wr.flush();
         wr.close();
         printResponse(conn);
     }
     private  static  String printResponse(HttpURLConnection conn)  throws  Exception {
         if  (conn.getResponseCode() !=  200 ) {
             // request error
             return  "" ;
         }
         InputStream is = conn.getInputStream();
         BufferedReader rd =  new  BufferedReader( new  InputStreamReader(is));
         String line;
         StringBuffer response =  new  StringBuffer();
         while  ((line = rd.readLine()) !=  null ) {
             response.append(line);
             response.append( '\r' );
         }
         rd.close();
         System.out.println( new  JSONObject(response.toString()).toString( 4 ));
         return  response.toString();
     }
     private  static  byte [] loadFile(File file)  throws  IOException {
         InputStream is =  new  FileInputStream(file);
         long  length = file.length();
         byte [] bytes =  new  byte [( int ) length];
         int  offset =  0 ;
         int  numRead =  0 ;
         while  (offset < bytes.length
                 && (numRead = is.read(bytes, offset, bytes.length - offset)) >=  0 ) {
             offset += numRead;
         }
         if  (offset < bytes.length) {
             is.close();
             throw  new  IOException( "Could not completely read file "  + file.getName());
         }
         is.close();
         return  bytes;
     }
}

  

  整个类运行和普通的类运行完全没两样,得到的控制台的信息如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
{
     "access_token" "***66a6adc3bb14***99.2592000.1462845194.282335-7***" ,
     "refresh_token" "25.344b6***6a9748d8b25a***360000.1775613194.282335-7***" ,
     "scope" "public audio_voice_assistant_get wise_adapt lebo_resource_base lightservice_public hetu_basic lightcms_map_poi kaidian_kaidian" ,
     "session_key" "9mzdC***7BvKTa4HuiEVYXrXOUPY***RSS8h4936rRxxd***V4PMq1Y+6OVKac+18rRxRtsT" ,
     "session_secret" "*352***e9a7a664ef***775e" ,
     "expires_in" 2592000
}
{
     "result" : [ "百度语音提供技术支持," ],
     "err_msg" "success." ,
     "sn" "160625465371460253194" ,
     "corpus_no" "6271739712934435529" ,
     "err_no" 0
}
{
     "result" : [ "百度语音提供技术支持," ],
     "err_msg" "success." ,
     "sn" "613862746801460253195" ,
     "corpus_no" "6271739717258680030" ,
     "err_no" 0
}

  从结果看出,装在test.pcm的那段语音内容就是“百度语音提供技术支持”。于是,我也利用windows自带的录音机功能,录制了一段wav格式的语音,一开始报错3301,查看文档说是识别错误,打开音频文件,发现没有录入任何东西,于是重新录入进行识别,虽然没有报错,但是识别的并非语音内容,估计是噪音太大。

 

三、基于Android平台的语音识别

  显然,光是REST API模式还是玩的不过瘾,想着在来试试移动端的效果如何,移动平台有android和ios,考虑到自己本子的情况,还是选择了android,当然,这两者都不熟悉。

  网上找了一个可以直接使用的android环境http://blog.sina.com.cn/s/blog_6de000c20101rpva.html#cmt_2623882,下载了一通eclipse、sdk和adt等等,凭着之前搭建过一次android平台的记忆,勉强把环境弄好了。

  于是还是如REST API中一样需要下载android的sdk和文档。SDK目录包含以下内容:

 

  各个模块的功能如下:


 

  导入demo项目到eclipse中,配置好virtual device,就可以启动虚拟机(我在实际操作过程中,发现将libbdEASRAndroid.so和libBDVoiceRecognitionClient_MFE_V1.so导入classpath时会报错,于是我删除了这两个包),运行起来的效果如下:

 

 

  点击下面工具栏的中间按钮,进入全部应用,可以找到应用“Speech Recorder”:

 

 

  点击进入应用:

 

目前在点击“Record”,应用会闪退,还没摸清是什么原因,后面在研究下(有遇到过的欢迎留言指教)~~~

 

总得来说,百度语音还是蛮好上手的,文档也比较详细,但是就个人录制的音频识别来说,效果还有待提高(可能是音频文件噪音过大)。

先混个脸熟,了解下支持的平台,api的调用方式,后面两天趁Fedex Day好好看看这块。

如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

  

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

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

相关文章

语音-小度自定义技能

文章目录 前言一、学习简介二、代码快速开发三、官网配置3.1 百度云CFC配置3.2 小度官网配置 四、测试4.1连接技能4.2 意图测试4.3 断开技能 前言 主要是为了记录下学习小度自定义技能的过程 一、学习简介 参考官网解释 自定义技能简介 二、代码快速开发 快速开发java 我…

人人都是绘画大师!微软必应接入DALL·E模型,文字生成图像!

机器之心编辑部 微软必应完善文字生成图像能力&#xff0c;Adobe 今日也发布 Firefly&#xff0c;杀入生成式 AI 这场游戏。 今晚实在是有些热闹。 一边英伟达 GTC 正在进行中&#xff0c;一边谷歌正式开放了 Bard 的测试&#xff0c;这里微软必应也不甘寂寞。 今日&#xff0c…

对比编程语言的四种错误处理方法,哪种才是最优方案?

△点击上方“Python猫”关注 &#xff0c;回复“1”领取电子书 作者&#xff1a;Andrea Bergia 译者&#xff1a;豌豆花下猫Python猫 英文&#xff1a;Error handling patterns 转载请保留作者及译者信息&#xff01; 错误处理是编程的一个基本要素。除非你写的是“hello world…

巴比特 | 元宇宙每日必读:不再盲目迷信硬件掘金,大厂XR集体后撤,业内人士建议多条腿走路,生态和内容才有更广阔市场...

摘要&#xff1a;据极点商业报道&#xff0c;元宇宙凉热之间&#xff0c;大厂集体收缩XR业务。是舆论定调的风口已过&#xff0c;还是如业内人士所言&#xff0c;进入理智探索时代&#xff1f;为何短短半年时间内&#xff0c;大厂们态度就发生了截然不同的变化&#xff1f;“与…

学会这些思维模型,窥见查理·芒格的致胜秘笈(二)

目录 导语 模型五&#xff1a;SCQA模型 模型六&#xff1a;问题树模型 模型七&#xff1a;MECE原则 模型八&#xff1a;SWOT分析 模型九&#xff1a;波特五力模型 模型十&#xff1a;波斯顿矩阵 导语 读者朋友们好&#xff0c;在我上一篇文章介绍了几个最核心和底层的模…

产品读书《穷查理宝典:查理.芒格智慧箴言录》

要通过提升自己&#xff0c;来强化对世界的感知&#xff0c;内在的能力才能增长&#xff0c;和世界的大趋势才能互相匹配。这种匹配度提高了&#xff0c;无论你是用来投资、创业&#xff0c;还是做其他事情&#xff0c;都会无往而不利。 查理芒格在书中反复强调的4点内容有&a…

芒格最新演讲:中国的水有些聪明人已经蹚进去了,时候到了更多人会进场

图文来源&#xff1a;雪球 译者&#xff1a;RanRan 我们在说某个人有常识的时候&#xff0c;我们其实是说&#xff0c;他具备平常人没有的常识。人们都以为具备常识很简单&#xff0c;其实很难。 2月14日&#xff0c;95岁的芒格参加了Daily Journal 公司年会&#xff0c;发表了…

站在大模型新风口的云知声:十一年创业之路引领智能语音技术变革

AGI的目标是实现人类般的通用智能&#xff0c;这意味着AI可以像人类一样理解任意通用任务&#xff0c;并以人类的智力水平执行完成。基本上&#xff0c;除了自我意识的生成&#xff0c;AGI就是人类对人工智能的终极梦想了。在AGI曙光照进现实之际&#xff0c;云知声化身为那位站…

在MT4上使用KDJ指标

KDJ指标就是随机指标&#xff0c;由K线、D线和J线这三条曲线共同构成&#xff0c;通过分析图表&#xff0c;我们可以得出&#xff0c;K、D、J分别用不同的颜色线条来表示&#xff0c;所谓的K线是指快速确认线&#xff0c;D线就是指慢速主干线&#xff0c;而J线则为方向明暗线。…

同花顺资金监测精鹰指标公式源码 通过资金监测强弱

使用方法&#xff1a; 指标不含未来,是通过资金监测强弱,资金是不会骗人 当红柱有粉色帽子或红柱上方金色线均表示资金流入 源代码&#xff1a; VAR1:VOL/((HIGH-LOW)*2-ABS(CLOSE-OPEN)); 主动买盘:IF(CLOSE>OPEN,VAR1*(HIGH-LOW),IF(CLOSE<OPEN,VAR1*((HIGH-OPEN)(…

django中使用auth.authenticate在用户名和密码都正确的情况下返回值依然为None的可能原因

毕业设计做了一个系统&#xff0c;其中涉及到用户修改密码&#xff0c;然后发现密码改完之后即使输入了也登不上去&#xff0c;最终定位到问题出在auth.authenticate上&#xff0c;它返回的是None&#xff0c;在csdn上找了好久&#xff0c;全都是说在创建的时候使用django自带的…

美国公司裁员潮可视化;GitHub + Kaggle + InfoQ:3份报告回顾中国开发者的2022 | ShowMeAI每周通讯 #005-01.07

这是ShowMeAI每周通讯的第5期。通讯聚焦AI领域本周热点&#xff0c;及其在各圈层泛起的涟漪&#xff1b;关注AI技术进步&#xff0c;并提供我们的商业洞察。欢迎关注与订阅&#xff01; 导读&#xff1a;2023年第1周&#xff0c;美国科技大厂的裁员信息&#xff0c;终于还是来了…

如何转换图片格式?教你三招一键轻松转换图片格式

之前有朋友跟我吐槽说&#xff0c;有时候保存到电脑上的图片原来是正常的&#xff0c;结果保存下来以后就打不开了&#xff0c;搞的他非常苦恼。其实这个问题也很好解决&#xff0c;一般这种问题都是由于图片格式导致的&#xff0c;只需要将图片格式转换成jpg、png等常见格式就…

手把手教你免费、批量转换HEIC图片到JPG

iPhone手机更新IOS11系统后&#xff0c;相机拍摄的文件格式为HEIC格式&#xff0c;很多软件都无法打开。找了半天也是各种收费&#xff0c;就比如某款软件居然收费&#xff0c;还有年费88块&#xff01;你们怎么好意思收费的&#xff1f; 要么就是在线的转换&#xff0c;一张张…

PS把变成人物照片插画效果

算不算插画不是很懂&#xff0c;又有点类似&#xff0c;效果就是下图的这样&#xff0c;使用陌鱼社区动作&#xff1a;简单时尚手绘人物插画效果PS动作&#xff0c;下面是一些效果图&#xff0c;喜欢的可以试一下 01、双击图案&#xff08;.pat&#xff09;&#xff0c;Adobe P…

通过python我实现了照片转化为动漫模式,媳妇儿再也不用愁没有好看的头像了~

​ 最近某音上的动漫特效特别火&#xff0c;很多人都玩着动漫肖像&#xff0c;我媳妇儿也不例外。看着她这么喜欢这个特效&#xff0c;我决定做一个图片处理工具&#xff0c;这样媳妇儿的动漫头像就有着落了。 编码 为了快速实现我们的目标&#xff0c;我们就不自己写图片处理程…

将照片转换成漫画风格的API推荐

这段时间休息的时候发现了一个很有意思的API——将照片转换成漫画风格API&#xff0c;是在 APISpace 这个接口服务平台发现的。它里面的很多接口都非常的好用&#xff0c;使用起来也很方便&#xff0c;所有的接口都可以提供免费的试用&#xff0c;有需要的同学可以去看看~ 效果…

APISpace 将照片转化成漫画风格API

APISpace 的 将照片转化成漫画风格API&#xff0c;会自动为你将照片转换成漫画风格&#xff0c;无须使用Photoshop 等图片编辑软件、无须任何技术基础。输入图片的url&#xff0c;即可得到漫画风格的图片。 APISpace 上面还多各种各样的API&#xff0c;包括常见的短信、物流、…

Photo2Cartoon,照片图片批量转漫画

当你宅在家里冲浪&#xff0c;当你和驴友出行&#xff0c;当你打开自己的相册。。。。有没有想过让自己的照片换个样子。照片转漫画是一个不错的idea&#xff0c;换个角度欣赏会获得更多的意想不到&#xff0c;不是吗&#xff1f;试试看&#xff01; 首先&#xff0c;进入“图…

ACC编程应用挑战赛决赛真题

目录 哈喽 真题 题目一——圈地盘 题目二——门票 题目三——免单挑战 题目四——逃脱 题目五——一夫当关 题目六——游乐场 最后 哈喽 Hello!昨天是六一儿童节&#xff0c;可在雅安接连发生了6.1、4.3级地震。我在成都&#xff0c;虽然我没感觉到&#xff0c;但我们…