`

使用google voice api

 
阅读更多

   最近在使用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,对已经发现的接口进行测试:

 

[plain] view plaincopyprint?
 
  1. flac.exe -8 -f --sample-rate=16000 speechInput.wav  
[plain] view plaincopyprint?
 
  1. wget -O "GoogleSpeechAPI.txt" --user-agent="Mozilla/5.0" --post-file=test.flac --header="Content-Type: audio/x-flac; rate=16000" "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1"  

 

    结果如下:

 

[javascript] view plaincopyprint?
 
  1. {  
  2.     "status":0,    /* 结果代码,详细见本文结尾 */  
  3.     "id":"c421dee91abe31d9b8457f2a80ebca91-1",    /* 识别编号 */  
  4.     "hypotheses":    /* 假设,即结果 */  
  5.     [  
  6.         {  
  7.             "utterance":"下午好",    /* 话语 */  
  8.             "confidence":0.2507637    /* 信心,即准确度 */  
  9.         }  
  10.     ]  
  11. }  

 

    注:注释后为手工添加的结果解释

 

    返回结果太明了了!直接就能拿来用了不是~ 返回的编码是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++)中的请求:

 

 

  1. void Protocol::Request_SPEECH(QByteArray & audioData)  
  2. {  
  3.     if (!Nt_SPEECH)  
  4.     {  
  5.         QNetworkRequest request;  
  6.         QString speechAPI = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1";  
  7.         request.setUrl(speechAPI);  
  8.   
  9.         request.setRawHeader("User-Agent""Mozilla/5.0");  
  10.         request.setRawHeader("Content-Type""audio/x-flac; rate=16000");  
  11.   
  12.         Nt_SPEECH = NetworkMGR.post(request, audioData);  
  13.         connect(Nt_SPEECH, SIGNAL(readyRead()), this, SLOT(Read_SPEECH()));  
  14.     }  
  15. }  


    至于读取函数,就不贴在这里了,具体见:

 

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

    1. **OAuth 2.0**:Google Voice API使用OAuth 2.0进行授权,确保只有经过用户同意的应用才能访问其数据。 2. **限制与配额**:Google会对API的使用设置一定的配额限制,超出限制可能会导致额外费用或服务受限。 四...

    PHP实例开发源码——Google Voice 短信发送接口开源版.zip

    在这个PHP实例中,开发者可能使用了Google的API客户端库来与Google Voice服务进行通信,可能涉及到OAuth 2.0授权流程,用于获取用户的Google Voice服务访问权限。发送短信的功能可能涉及到HTTP请求的构造,可能使用...

    GOOGLE VOICE无限短信接口 v1.0.zip

    4. **发送短信**:使用Google Voice API发送短信涉及到认证过程,通常需要API密钥和应用ID。此接口可能实现了这些步骤,让用户能够通过简单的函数调用发送短信,而无需处理底层的HTTP请求和响应。 5. **无限短信**...

    googlevoice:使用谷歌语音api的项目

    总的来说,"googlevoice"项目是一个关于如何利用JavaScript与谷歌语音API进行交互的示例。它涵盖了从设置API、获取用户授权、执行不同操作(如发送短信、接收语音邮件、转录音频和拨打电话)到处理响应的整个流程。...

    基于PHP的GoogleVoice短信发送接口PHP开源版支持群发源码.zip

    【标题】中的“基于PHP的GoogleVoice短信发送接口PHP开源版支持群发源码”指出,这是一个使用PHP编程语言开发...通过深入研究源代码,开发者不仅可以学习到如何使用GoogleVoice API,还能提升PHP编程和接口设计的能力。

    googlevoiceapi:与Google语音互动的Ruby宝石

    安装 gem install googlevoiceapi用法 该gem为您的应用程序提供了一个类GoogleVoice :: Api。 如果您有权访问Google语音,则可以使用您的Google帐户凭据来初始化该类。 然后,您可以使用对象与Google语音的功能进行...

    GOOGLE VOICE无限短信接口+程序 v2.0

    1. Google Voice API的使用,包括OAuth 2.0身份验证。 2. PHP编程基础,如HTTP客户端(Guzzle)的使用,发送HTTP请求,解析JSON响应。 3. RESTful API的设计和交互。 4. OAuth 2.0协议的理解和实施。 5. 账号权限...

    Python-KeepMyGoogleVoice是使用Python脚本自动发送短信给cloudflare来实现保活GoogleVoice

    这通常涉及到使用API(应用程序接口)与Cloudflare或Google Voice通信,进行身份验证并发送预定义的消息。 5. **API调用**:API允许不同的软件应用之间相互通信。在这个项目中,Python脚本会使用相关的API密钥和...

    GOOGLE VOICE无限短信接口 程序 v2.0.zip

    【谷歌语音(GOOGLE VOICE)无限短信接口程序 V2.0】 谷歌语音是一个由Google提供的电话服务,它允许用户发送和接收短信、打电话以及管理多个电话号码。在这个V2.0版本的程序中,开发者提供了更强大的功能,使得与...

    PHP实例开发源码—Google Voice 短信发送接口开源版.zip

    2. **HTTP请求与响应**:在实现Google Voice接口时,需要使用PHP的cURL库或file_get_contents函数进行HTTP请求,向Google Voice API发送POST或GET请求来执行短信发送操作。同时,理解HTTP协议的基本原理,如请求头、...

    基于PHP的Google Voice 短信发送接口开源版.zip

    2. **获取Google Voice API权限**:在Google Cloud Console创建项目并启用Google Voice API,获取OAuth2客户端ID和秘密。 3. **配置接口**:将API密钥和用户凭据填入配置文件。 4. **测试接口**:使用提供的示例...

    PHP实例开发源码—Google Voice 短信发送接口PHP开源版 支持群发.zip

    API 是应用程序编程接口,开发者可以使用它来与Google Voice服务进行交互,如发送和接收短信。 3. **API调用**:在PHP中,调用Google Voice API可能涉及到HTTP请求(如POST或GET)和JSON数据格式,用于传递和接收...

    基于PHP的GoogleVoice短信发送接口开源版源码.zip

    3. **API接口调用**:学习如何使用PHP调用GoogleVoice的API,包括如何构造请求参数、设置认证信息(如OAuth 2.0)以及处理API响应。 4. **GoogleVoice API**:研究GoogleVoice提供的API文档,了解如何发送短信,...

    基于PHP的Google Voice 短信发送接口PHP开源版 支持群发.zip

    【标题】中的“基于PHP的Google Voice 短信发送接口PHP开源版 支持群发”表明这是一个使用PHP编程语言开发的项目,其主要功能是实现通过Google Voice服务发送短信,并且支持短信的群发功能。这个开源版本意味着源...

    springboot-googleapi

    标题 "springboot-googleapi" 指示这是一个关于使用Spring Boot与Google API集成的项目,主要涉及OAuth2授权协议。让我们深入探讨这个主题。 在Java开发中,Spring Boot以其简化和快速的应用程序启动能力而闻名。它...

    PHP实例开发源码——Google Voice 短信发送接口PHP开源版 支持群发.zip

    3. **OAuth认证**:Google Voice服务通常使用OAuth进行身份验证,开发者需要在PHP代码中实现OAuth认证流程,获取访问令牌以安全地访问API。 4. **JSON数据处理**:API请求和响应通常以JSON格式进行,因此,开发者...

    GoogleVoice.NET-开源

    C#中的Google Voice API; 更新!

    google-voice-java:自动从code.google.compgoogle-voice-java导出

    【标题】与【描述】提及的是一个名为"google-voice-java"的项目,它是...尽管Google Voice API已经不再支持新的应用,但对于研究历史项目、学习旧API的使用以及了解如何处理类似API的开发者来说,仍然具有一定的价值。

    voice-mini:使用Google Speech API的基于语音的助手

    在"voice-mini"项目中,核心是使用Python的`google-cloud-speech`库来与Google Speech API进行交互。这个库提供了简单易用的接口,可以方便地上传音频数据并获取识别结果。首先,你需要安装这个库,可以使用以下命令...

    matlab中的语音识别的voicebox

    - 根据你的特定需求,可能需要与其他库或服务(如Google Cloud Speech-to-Text API)集成,以增强识别性能或实现特定功能。 总之,VoiceBox是一个强大且功能丰富的语音处理工具箱,它为MATLAB用户提供了实现语音...

Global site tag (gtag.js) - Google Analytics