专栏首页腾讯NEXT学位小程序实现语音识别转文字——“坑路”历程

小程序实现语音识别转文字——“坑路”历程

最近为小程序增加语音识别转文字的功能,坑路不断,特此记录。

微信开发者工具

开发者工具上的录音文件与移动端格式不同,暂时只可在工具上进行播放调试,无法直接播放或者在客户端上播放。

debug的时候发现,工具上录音的路径是http://tmp/xxx.mp3,客户端上录音是wxfile://xxx.mp3。 

其实呢,不是格式不同,是映射路径不同。 虽然这里做个兼容也不难,但是每次提示一行文字,很影响美观。

采样率与编码码率限制

每种采样率有对应的编码码率范围有效值,设置不合法的采样率或编码码率会导致录音失败。

详细看这个: https://developers.weixin.qq.com/miniprogram/dev/api/media/recorder/RecorderManager.start.html 一开始没有留意,导致录音不成功。在试过几次后,再次采用这样的配置,感觉录音识别率和体积之间比较好平衡:

sampleRate: 16000, //采样率numberOfChannels: 1, //录音通道数encodeBitRate: 96000, //编码码率

单通道基本是必选的。因为asr只支持单通道。frameSize也是可以的,但是要考虑截断对识别的影响,这里暂时没有用上。

录音优化

微信录音文件支持mp3aac。这2种格式文件都比较小,aac文件体积更小。这对上传来说是件好事情,速度更快。

但是对语音识别转文字就不友好了。因为百度、阿里云ASR、讯飞的语音转文字接口都不支持aac和mp3,通常要求是pcm或者wav格式

如果微信录音能提供wav格式,那么就不用服务器做格式转换了,但是wav格式体积是mp3、aac的5到10倍,至少短期是没戏了,这也是很多人吐槽的地方。

服务器转换录音文件格式

可以用java第三方库转换,也可以用Process调用ffmpeg转换。

要注意的是,根据识别API的要求来做转换。比如阿里云asr的要求是:

支持音频编码格式:pcm(无压缩的pcm文件或wav文件)、opus,16bit采样位数的单声道(mono);

支持音频采样率:8000Hz、16000Hz;

java ProcessBuilder要

转换音视频,我习惯用ffmpeg。安装完ffmpeg之后,用java新建进程调用。

Process = new ProcessBuilder("ffmpeg -i in.mp3 out.wav").start();

系统一直提示CreateProcess error。 后来看文档才发现,要以数组的形式传入参数。

Process = new ProcessBuilder("ffmpeg -i in.mp3 out.wav").start();

这样就启动成功了。 关于java启动进程,不是本文重点,以后再写篇文章总结。

阿里云asr sdk使用问题

这个问题困扰了我很长时间。问题表现是微信录制的语音很多都识别不了。

最初是直接把录音mp3文件转换为pcm文件,本地能播放,但是用阿里云asr sdk却识别不了。一开始以为是文件编码问题。特意查了asr支持的文件格式,用ffprobe检查,potplayer看属性,都没有看出问题。我甚至把启动ffmpeg进程转换也改了,用了java的库去做,还是不行。

后来为了方便测试问题,用asr的restful接口测试录音文件,发现都能识别。 看起来似乎是sdk的问题。于是我打开官方文档例子对比。发现用的是sdk 2.x,复制粘贴过来的代码竟然少了,确实让人欲哭无泪。这里也少了对sampleRate的设置。

// TODO  重要提示:这里是用读取本地文件的形式模拟实时获取语音流并发送的,因为read很快,所以这里需要sleep// TODO  如果是真正的实时获取语音,则无需sleep, 如果是8k采样率语音,第二个参数改为8000int deltaSleep = getSleepDelta(len, sampleRate);Thread.sleep(deltaSleep);

原文作者:Rolan

原文地址:

http://www.wxapp-union.com/article-5461-1.html

  -好课来袭-  

「人人都会微信小程序实战进阶」限时特惠

上线自己的小程序,抢领百万奖学金

微信官方证书召唤你,腾讯offer等你拿

腾讯大牛手把手教学,0基础快速上手小程序

腾讯NEXT学院

求职干货 | 前辈blog  | 前端课程

点击阅读原文,开始课程试学

本文分享自微信公众号 - 腾讯NEXT学院(Next_Academy)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 快!逃离裁员潮!大数据程序猿必备过冬指南!!!

    2019年2月15日,滴滴月度大会上,程维宣布滴滴整体裁员比例占全员的15%,整体裁减约2000人;

    腾讯NEXT学位
  • 学员故事 | 0基础的我们,是这样做出小程序的(下)

    ? 嗨咯~ 我是N妹,这期给我们做分享的是“人人都会微信小程序”的优秀学员——“小亭同学”,快来看看她是如何从0到1做出小程序的吧~ 学员说 大家好,我是小亭...

    腾讯NEXT学位
  • 小程序开发中要避的坑

    小程序以免安装用完即走的特性自发布初就很火,即使是现在也是热度不减。小程序虽然是一个 HTML5,但是通过限制开发者的写法,提供一套自定义的组件以及写法,并且将...

    腾讯NEXT学位
  • 广义LS-GAN(GLS(Loss-Sensitive)-GAN) :现在 LS-GAN和WGAN是这个超模型的特例了

    https://github.com/guojunq/glsgan 可以跑跑人脸生成。

    用户1908973
  • 微服务测试策略制定

    微服务架构是近些年来比较流行的一种架构模式,它提倡将单一应用程序划分成一组小的服务,每个服务运行在其独立的进程中,服务间采用轻量级通信机制互相沟通。每个服务都围...

    用户5521279
  • 基于报警处理的思考(r9笔记第88天)

    晚上在琢磨怎么把报警的处理实现自动化的功能,想来想去,发现其实很多内容都是相通,在纸上写写画画,简单理了理自己的思绪。 人嘛,有时候不逼着自己,只会更加懒惰,而...

    jeanron100
  • kube-on-kube-operator 开发(一)

    kubernetes 已经成为容器时代的分布式操作系统内核,目前也是所有公有云提供商的标配,在国内,阿里云、腾讯云、华为云这样的公有云大厂商都支持一键部署 ku...

    田飞雨
  • kube-on-kube-operator 开发(一)

    kubernetes 已经成为容器时代的分布式操作系统内核,目前也是所有公有云提供商的标配,在国内,阿里云、腾讯云、华为云这样的公有云大厂商都支持一键部署 ku...

    田飞雨
  • iOS最新漏洞可实现“以假乱真”的iCloud密码钓鱼

    近日安全研究人员发布了一份漏洞利用代码。这份代码表明,攻击者可以通过足以以假乱真的钓鱼,轻易窃取使用最新iOS版本的iCloud密码。 漏洞原理 这个概念验证性...

    FB客服
  • 各语言简单爬虫

    林万程

扫码关注云+社区

领取腾讯云代金券