最近在使用Qt编写一个客户端程序的时候需要增加语音识别输入的功能。起初尝试使用SAPI来完成这个任务,但是发现SAPI不仅使用起来超级复杂,而且识别效果也很惨烈。于是就需要寻找一个更加便捷优秀的方案。
自从Chrome 11开始,Chrome开始支持HTML5的语音输入API,QQ紧接着也推出了语音识别输入(可以看做跟风么:D)。显然这些识别操作不可能在本地完成,那么我们就有直接利用接口的可能。
对Chromium的repo进行搜索之后,终于找到了Chromium对语音识别的实现代码:
http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/speech/
分析过程就算了,直接上成果。
Chromium先从mic获取音频,然后使用flac或者speex进行编码,直接通过HTTPS POST到服务器。接口地址如下:
https://www.google.com/speech-api/v1/recognize
Chromium在请求时还会拼上很多参数:
xjerr=1&client=chromium&lang=en-US&maxresults=1
注:参数解释
xjerr=1 # 不详,猜测为错误的标准
client=chromium # 客户端类型,这里是Chromium,猜测Chrome也应该可行,估计是作为统计用的。
lang=en-US # 语言类型,这里是英文,中文为zh-CN,其余语言代码参考:http://msdn.microsoft.com/en-us/library/ms533052(v=vs.85).aspx
maxresults=1 # 最大返回结果数量,多个结果在hypotheses列表中保存。
参数很明了,这给我们提供了很多便利。我们对参数进行调整,得到如下的接口地址:
http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1
接下来祭出wget,对已经发现的接口进行测试:
结果如下:
注:注释后为手工添加的结果解释
返回结果太明了了!直接就能拿来用了不是~ 返回的编码是UTF-8。
对于编码格式,在测试中使用了FLAC编码,采样率为16kHz,经测试其他采样率同样可用,但一定要保证Header里的rate与实际数据相符。(关于其他格式的实验请看本文底部。)
总结:
1、基本流程:
一、从音频输入设备获取原始数据。二、对原始数据进行包装、编码。三、将编码后的音频POST至接口地址。四、分析处理接口返回的JSON并得出结果。
2、请求接口
请求方式:HTTP POST头部信息:Content-Type: audio/x-flac; rate=16000 (注:Content-Type根据所使用的编码格式不同而不同,详见文章底部。rate为音频采样率。)请求数据:编码后的音频数据
3、音频编码格式:
FLAC或WAV或SPEEX
下面是我写的Qt(C++)中的请求:
至于读取函数,就不贴在这里了,具体见:
Protocol: http://pastebin.com/6G6wggfF
AudioInput:
speechInput.h: http://pastebin.com/qdMPeWZD
speechInput.cpp: http://pastebin.com/567B47qF
main:
mainwidget: http://pastebin.com/c8bk7zd2
在翻阅Chromium源码的过程之中,还发现了其他有用的东西:
Speech Input API Specification http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html
到目前为止,Google好像还没有公开这个API,使用许可依旧不详,请求也没有用到任何认证。但它确实能用,而且十分方便,对于编写非商业程序的人来说,这个东西真的是再好不过了(因为它有着高的爆表的识别率)。
参考:
Chromium Repository http://src.chromium.org/viewvc/chrome/trunk/src/content/browser/speech/
Accessing Google Speech API / Chrome 11 http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/
相关推荐
GoogleVoiceApi一个很不错的API,看看是否对大家有帮助!
安装 gem install googlevoiceapi用法 该gem为您的应用程序提供了一个类GoogleVoice :: Api。 如果您有权访问Google语音,则可以使用您的Google帐户凭据来初始化该类。 然后,您可以使用对象与Google语音的功能进行...
谷歌语音 使用谷歌语音api的项目
V2.0 升级内容 1、支持群发功能 2、汉字自动转拼音 3、内置缓存机制,防止GV 登陆次数太过频繁 4、内置一套可用的演示程序,懒得自己弄接口,传上去就可以使用
C#中的Google Voice API; 更新!
使用oauth2进行Spring Boot和Google Api的演示。
迷你语音使用Google Speech API的基于语音的助手
此应用程序可帮助学生使用Google Books API查找图书,并在用户命令中引用有效的图书。 这可以采取多种形式,但可能具有一些重要功能: - The user can control the system by issuing voice commands. - The ...
莎拉语音助手 Sarah Voice Assistant是一个基于SpeechRecognition,pyttsx3和GoogleAPI的Python语音助手项目莎拉(Sarah)知道要从Google日历中读取数据(从首次运行开始,您将被重定向到Google登录页面),从Gmail...
Google Voice 短信发送接口PHP开源版,如果需要群发多帐号用英文逗号(,)分隔(86159..,86159..),消息内容不支持中文,当您输入中文的时候系统会自动转换为拼音(为了区分是拼音,拼音首字母大写),保证消息能正常发送...
内容索引:PHP源码,其它类别,API,飞信 Google Voice 带群发的PHP版短信发送接口,如果一次发送较多,请使用英文逗号隔离开,所需PHP扩展:curl ,编码均为GBK,程序不支持发送中文,因此会自动转换中文为拼音,此...
Voice-Recognition:一个简单的应用程序,用于检测用户语音并将其转换为文本。 (使用Google对话框API)
应用程序还演示了使用 Google Voice API 设置使用语音的提醒(语音到文本转换) 应用程序使用 JavaMail API 登录电子邮件帐户,以后可以使用该帐户通过电子邮件、智能手表以及通知操作按钮向朋友发送任务。
我们使用Google Voice API来检测用户的语音并确定所使用的单词。 然后,WebApp会使用相应的拼写列表验证口语单词,并在匹配的情况下发出拼写效果。用户流用户将打开该站点,并向其介绍一个教程,并测试屏幕中间提示...
使用Expo构建的React Native应用程序,该应用程序使用Google Cloud Function和Google Speech API来填充Aloglia Instant Search。 仅适用于iOS。 注意:在最近的节点版本> v14.0.5上运行此命令。 入门 将config....
调用Google voice语音,自动识别,本机有Google语音情况下
该库已更新,可与Google在2020年11月引入的Translate API的一起使用。 精神继任者,可与以前的Translate API一起使用。安装 npm install google-translate-tts或者 yarn add google-translate-tts用法查找要使用的...
您可以将此代码用作使用Google Speech to Text API进行电话实时转录的基础。 音频流通过websocket连接发送到您的服务器,然后中继到Google流接口。 执行语音识别,并将文本返回到控制台。 Google语音转文字API 您...
Once the connection is established, the video and voice runs on public Google STUN/TURN servers. Keep in mind, PubNub can provide the signaling for WebRTC, and requires you to combine it with a ...