小程序实现语音识别转文字坑路历程_第1页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、小程序实现语音识别转文字,坑路历程最近为小程序增强语音识别转文字的功能,坑路不断,特此记录。微信开发者工具开发者工具上的录音文件与移动端格式不同,临时只可在工具上举行播放调试,无法挺直播放或者在客户端上播放debug的时候发觉,工具上录音的路径是http:/tmp/xxx.mp3,客户端上录音是wxfile:/xxx.mp3。忽悠呢,不是格式不同,是映射路径不同。其实做个兼容也不难,每次提醒一行文字,很丑。采样率与编码码率限制每种采样率有对应的编码码率范围有效值,设置不合法的采样率或编码码率会导致录音失败。具体看这个一开头没有留意,导致录音不胜利。试过几次后,采纳这样的配置,感觉录音识别率和体

2、积之间比较好平衡:123samplerate:16000,/采样率numberofchannels:1,/录音通道数encodebitrate:96000,/编码码率单通道基本是必选的。由于asr只支持单通道。framesize也是可以的,但是要考虑截断对识别的影响。临时没实用上。录音优化由于可能误按,于是对小于500ms的录音挺直忽视。另外,松开录音按键后,再延迟一点时光才真正stop录音。录音文件格式微信录音文件支持mp3和aac。这2种格式文件都比较小,aac文件体积更小。这对上传来说是件好事情,速度更快。但是对语音识别转文字就不友好了。由于百度、阿里云asr、讯飞的语音转文字接口都不支

3、持aac和mp3,通常要求是pcm或者wav格式。假如微信录音能提供wav格式,那么就不用服务器做格式转换了,但是wav格式体积是mp3、aac的5到10倍,起码短期是没戏了,这也是无数人吐槽的地方。服务器转换录音文件格式可以用java第三方库转换,也可以用process调用ffmpeg转换。要注重的是,按照识别api的要求来做转换。比如阿里云asr的要求是:支持音频编码格式:pcm(无压缩的pcm文件或wav文件)、opus,16bit采样位数的单声道(mono);支持音频采样率:8000hz、16000hz;javaprocessbuilder要用法数组传参转换音视频,习惯用ffmpeg。

4、安装完ffmpeg之后,用java新建进程调用。1process=newprocessbuilder("ffmpeg-iin.mp3out.wav").start();向来提醒createprocesserror。后来看文档才发觉,要以数组的形式传入参数。1process=newprocessbuilder("ffmpeg","-y","-i","in.mp3","out.wav"

5、).start();这样就启动胜利了。关于java启动进程,不是本文重点,以后再写篇文章总结。阿里云asrsdk用法问题这个问题困扰了一天时光,回想起来真是吐血。问题表现是微信录制的语音无数都识别不了。最初是挺直把录音mp3文件转换为pcm文件,本地能播放,但是用阿里云asrsdk却识别不了。一开头以为是文件编码问题。特意查了asr支持的文件格式,用ffprobe检查,potplayer看属性,都没有看出问题。甚至把启动ffmpeg进程转换也改了,用了java的库去做,还是不可。后来为了便利测试问题,用asr的restful接口测试录音文件,都能识别!似乎是sdk的问题。于是打开官方文档例子对

6、照。发觉用的是sdk2.x,老铁啊你复制粘贴过来的代码居然少了!欲哭无泪。1234/todo重要提醒:这里是用读取本地文件的形式模拟实时猎取语音流并发送的,由于read很快,所以这里需要sleep/todo假如是真正的实时猎取语音,则无需sleep,假如是8k采样率语音,其次个参数改为8000intdeltasleep=getsleepdelta(len,samplerate);thread.sleep(deltasleep);也少了对samplerate的设置。阿里云asrtoken过期由于用的是免费版asr,没有给福报厂充值,因此token一天失效,导致联调的时候骤然报错。最后实在受不了,

7、写了个定时任务每小时更新token。这,就是beggarvip?wx.uploadfile返回值封装了一个接口parseresponse,统一解析查询结果(文本、语音)。发觉惊奇的问题:用文本查询的,可以正常解析结果用语音查询的,明明已经返回了结果,却解析不了!只能console.log()打印出来对照第一行是wx.request()发起文本查询。其次行是wx.uploadfile()上传语音文件后挺直语音转文字,并且查询。wx.request返回值是json对象。wx.uploadfile返回值是字符串!wx.uploadfile返回值是字符串!wx.uploadfile返回值是字符串!重要

8、的事情要说3遍。尽管content-type:"application/json;charset=utf8",但是微信根本不做转换!十分坑爹!解决:对wx.uploadfile返回值举行json.parse(res.data),得到json对象。更换appid和secret由于正式小程序项目账号向来拖着没有申请,所以这段时光用的是我个人的appid和secret举行开发。等正式账号预备好了,更新了小程序项目的appid,并且发出内部体验包。此时已经深夜1点半,头脑有点发懵。只更新了小程序appid,居然忘了更新服务器的appid和secret。于是乎反复报错登录失败。过了一会才反映过来,更新服务器的appi的secret,但是还是用户。才想起忘了还有storage缓存没有清除?,里面

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论