`
kingj
  • 浏览: 425611 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

使用Google语音识别引擎(Google Speech API)

 
阅读更多

本文转自csdn

使用Google语音识别引擎(Google Speech API)[3月5日修改]

分类: Qt Google 语音识别 API C++ 19352人阅读 评论(72) 收藏 举报

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

 

  1. flac.exe -8 -f --sample-rate=16000 speechInput.wav  
  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/

 

 

附:

1、SpeechInputError interface 错误信息

  1. // This enumeration follows the values described here:  
  2. // http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html#speech-input-error  
  3. enum SpeechInputError {  
  4.   // There was no error.  
  5.   SPEECH_INPUT_ERROR_NONE = 0,  
  6.   // The user or a script aborted speech input.  
  7.   SPEECH_INPUT_ERROR_ABORTED,  
  8.   // There was an error with recording audio.  
  9.   SPEECH_INPUT_ERROR_AUDIO,  
  10.   // There was a network error.  
  11.   SPEECH_INPUT_ERROR_NETWORK,  
  12.   // No speech heard before timeout.  
  13.   SPEECH_INPUT_ERROR_NO_SPEECH,  
  14.   // Speech was heard, but could not be interpreted.  
  15.   SPEECH_INPUT_ERROR_NO_MATCH,  
  16.   // There was an error in the speech recognition grammar.  
  17.   SPEECH_INPUT_ERROR_BAD_GRAMMAR,  
  18. };  


2、多种音频格式的测试

    收到朋友的邮件说使用flac实在是很不方便,问我有没有更好的解决方法,于是我尝试将其他编码格式应用于Google Speech API。以下为结果:

    1、WAV格式

    请求Header:Content-Type: audio/L16; rate=16000

    返回结果:识别成功

    2、MP3格式

    请求Header:Content-Type: audio/mpeg; rate=16000

    返回结果:无法识别的编码

    请求Header:Content-Type: audio/mpeg3; rate=16000

    返回结果:无法识别的编码

    请求Header:Content-Type: audio/x-mpeg; rate=16000

    返回结果:无法识别的编码

    请求Header:Content-Type: audio/x-mpeg-3; rate=16000

    返回结果:无法识别的编码

    请求Header:Content-Type: audio/mp3; rate=16000

    返回结果:无法识别的编码

    3、PCM格式

    请求Header:Content-Type: audio/x-ogg-pcm; rate=16000

    返回结果:无法识别的编码

    请求Header:Content-Type: audio/pcm; rate=16000

    返回结果:无法识别的编码

    4、SPEEX格式

    请求Header:Content-Type: audio/x-speex-with-header-byte; rate=16000

    返回结果:识别成功

    请求Header:Content-Type: audio/speex; rate=16000

    返回结果:识别成功


    由于识别接口并不开放,所以无法得知具体的支持格式,如果哪位朋友发现了新的支持格式,请一定要留言哦!

分享到:
评论

相关推荐

    谷歌语音识别-百度语音识别-android

    首先,我们来了解**谷歌语音识别**(Google Speech Recognition)。谷歌的这项服务是基于其强大的机器学习算法,能够将用户的语音指令转化为文字,广泛应用于各种产品和服务中,如谷歌助手(Google Assistant)、...

    SpeechRecognition:使用Google Speech Recognition API将您的语音转换为文本

    使用Google语音识别API将您的语音转换为文本Google语音识别会自动识别您说出的单词,并以文本形式显示。 先决条件: 安装了Python; 已安装Google语音识别API; 主动的Internet连接(越快越好)Beautiful Soup...

    freeswitch对接google的语音识别和语音合成例子

    本示例主要关注的是如何利用Freeswitch与Google的先进语音技术进行集成,包括语音识别(Automatic Speech Recognition, ASR)和语音合成(Text-to-Speech, TTS)。 首先,让我们深入理解`mod_google_tts`和`mod_...

    android上实现语音识别,基于google的语音识别

    语音识别在android上使用起来很方便也很简单. 但是有个前提条件,就是android机器上必须预先安装...该例子同样是使用ACTION_RECOGNIZE_SPEECH模式,我们需要实现onActivityResult方法,当语音识别结束之后的回调函数。

    谷歌和科大讯飞语音识别

    压缩包文件名为“Vivibot”可能是指一个示例项目或库,它可能包含了实现科大讯飞和谷歌语音识别接口的代码示例。开发者可以通过研究这个项目,快速理解和学习如何在Android应用中集成这两种语音识别技术。 总结,...

    Qt上基于谷歌语音引擎的语音识别

    在Qt上的语音识别,用Google识别引擎 SpeechQt ======== 一个基于Qt的简单的语音识别项目 首先,语音识别要做三件事情 1.记录用户的语音文件到本地 2.将用户语音编码 使用flac或者speex进行编码 3.使用第三方...

    google cloud speech api v1beta1官方文档整理版(英文,带目录)

    **Google Cloud Speech API V1Beta1** 是一个由谷歌提供的语音识别服务接口的 Beta 版本。该 API 提供了与谷歌强大的语音识别技术集成的能力,使开发者能够轻松地将音频数据转换为文本形式。它特别适用于需要集成...

    android Speech Recognition_Demo android中文离线语音识别 Android离线语音识别

    1. **语音识别引擎**:离线语音识别通常需要特定的语音识别引擎,如Google的Android Speech Recognition API或第三方库,如讯飞语音SDK。这些引擎包含了复杂的音频处理算法和语言模型,可以在本地对录音进行分析并...

    使用GoogleSpeech API实现声音识别

    通过调用Google speech的API接口来实现语音识别,并带声波。 修改GoogleSpeech.mxml中的"http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN"可以修改语言的类型,默认为zh-CN,...

    SpeechSDK语音识别

    SpeechSDK,全称为语音识别软件开发工具包,是许多技术提供商如Microsoft Azure、Google Cloud等为开发者提供的核心工具,用于构建语音相关的应用程序。它支持多种语言,包括中文和英文,允许开发者实现语音到文本的...

    gspeech-rec, 在一个 shell script 中使用Google语音识别 API v2,一个.zip

    gspeech-rec, 在一个 shell script 中使用Google语音识别 API v2,一个 gspeech-rec从中识别谷歌语音speech-rec.sh 是一个bash脚本,它将一个flac音频文件发送到Google进行语音识别,并打印出最佳返回的假设。...

    qtspeech-5.10_qtspeech_qtspeak_qt语音_qt语音识别_qtqtexttospeech_

    在实现这些功能时,Qt平台通常依赖于操作系统提供的语音服务,如Apple的SiriKit、Google的Text-to-Speech服务或者Windows的Speech API。因此,`qtspeech`、`qtspeak`和`qtqtexttospeech`的实际性能和功能会根据运行...

    Google-Speech-Recognition-:Android 中的 Google 语音识别

    总的来说,"Google-Speech-Recognition--master"项目很可能是展示如何在Android应用中集成Google语音识别服务的实例,包括使用Java代码启动语音识别、处理结果以及应对可能出现的问题。开发者可以借此学习和理解如何...

    UE4/UE5 GooGleTTS文本转语音插件

    这是谷歌云文本到语音和同步云语音到文本语音识别API的虚幻引擎包装。 有了这个插件,你将能够合成31种语言的自然男性和女性语音,并识别119种语言和方言的语音。 无缝TTS缓存将保护您的钱包!如果tts节点满足已经...

    vue-web-speech:Web Speech API的Vue包装器,用于识别语音

    用于语音识别的Web Speech API的Vue包装器。 Web Speech API处于试验阶段,在生产中使用之前请检查。 安装 npm i vue-web-speech 用法 通过Vue.use将插件注入到vue实例 import Vue from 'vue' import VueWebSpeech ...

    基于Flask Web的中文自动语音识别演示系统,包含语音识别语音合成声纹识别之说话人识别源码+运行说明.zip

    2. **语音识别**:此项目中的语音识别功能可能采用了开源库如阿里云的PaddleSpeech、百度的DeepSpeech或谷歌的SpeechRecognition等。这些库能够将接收到的音频文件转换为文字,支持中文语音的识别,使得用户可以通过...

    Wp7 使用GOOGLE SPEECH接口实现语音转文字

    Google Speech API提供了一个基于云的服务,它接收音频流数据,然后通过复杂的语音识别算法将其转换为相应的文本。在WP7上,我们需要创建一个客户端应用来发送音频数据到Google服务器,并接收返回的文本结果。 步骤...

    Labview实现语音识别

    Labview支持与其他编程语言的接口,可以调用外部的识别引擎,如Google Speech API,或者使用内置的搜索算法进行匹配。 6. **后处理**:识别结果可能包含一定的错误,因此需要进行后处理来提高准确率。这可能包括上...

    vue-speech-streaming:使用Google Cloud Speech将Vue2流式语音识别语音转换为文本

    Vue语音流 Vue2在渐进式Web App上使用Google Cloud Speech执行流语音识别认证方式访问 创建一个新项目或单击一个现有项目。 转到“ API和身份验证> API”部分,然后打开以下API(您可能需要启用计费才能使用这些服务...

    electron-speech, 在 node 中,轻松进行语音识别 !.zip

    electron-speech, 在 node 中,轻松进行语音识别 ! 电子语音基于电子的node 语言识别及电子浏览器。失败It说,谷歌已经,关闭了 Chrome 语音API用于在像电子这样的shell 环境中使用,这是依赖于的。其他一些有前途...

Global site tag (gtag.js) - Google Analytics