您的位置:首页 > 其它

语音比较

2013-06-19 10:04 169 查看
最近图片比较很热,于是想到了语音比较,即找出与你声音契合度最高的人。

翻了翻技术文档,发现这个方向难度很大,实现很困难。也难怪语音识别技术发展很久也仍然处于初级阶段。

发现一个通过网络请求去访问Google语音引擎的一个途径,未证实,网址如下:http://blog.csdn.net/dlangu0393/article/details/7214728

未防止原文删除,将其复制如下:

最近在使用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?

flac.exe -8 -f --sample-rate=16000 speechInput.wav

[plain] view
plaincopyprint?

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?

{

"status":0, /* 结果代码,详细见本文结尾 */

"id":"c421dee91abe31d9b8457f2a80ebca91-1", /* 识别编号 */

"hypotheses": /* 假设,即结果 */

[

{

"utterance":"下午好", /* 话语 */

"confidence":0.2507637 /* 信心,即准确度 */

}

]

}

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

返回结果太明了了!直接就能拿来用了不是~ 返回的编码是UTF-8

对于编码格式,在测试中使用了FLAC编码,采样率为16kHz,经测试其他采样率同样可用,但一定要保证Header里的rate与实际数据相符。(关于其他格式的实验请看本文底部。)

总结:

1、基本流程:

一、从音频输入设备获取原始数据。
二、对原始数据进行包装、编码。
三、将编码后的音频POST至接口地址。
四、分析处理接口返回的JSON并得出结果。

2、请求接口

地址:http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1
请求方式:HTTP POST
头部信息:Content-Type: audio/x-flac; rate=16000 (注:Content-Type根据所使用的编码格式不同而不同,详见文章底部。rate为音频采样率。)
请求数据:编码后的音频数据

3、音频编码格式:

FLAC或WAV或SPEEX

下面是我写的Qt(C++)中的请求:

[cpp] view
plaincopyprint?

void Protocol::Request_SPEECH(QByteArray & audioData)

{

if (!Nt_SPEECH)

{

QNetworkRequest request;

QString speechAPI = "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1";

request.setUrl(speechAPI);

request.setRawHeader("User-Agent", "Mozilla/5.0");

request.setRawHeader("Content-Type", "audio/x-flac; rate=16000");

Nt_SPEECH = NetworkMGR.post(request, audioData);

connect(Nt_SPEECH, SIGNAL(readyRead()), this, SLOT(Read_SPEECH()));

}

}

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

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 错误信息

[cpp] view
plaincopyprint?

// This enumeration follows the values described here:

// http://www.w3.org/2005/Incubator/htmlspeech/2010/10/google-api-draft.html#speech-input-error
enum SpeechInputError {

// There was no error.

SPEECH_INPUT_ERROR_NONE = 0,

// The user or a script aborted speech input.

SPEECH_INPUT_ERROR_ABORTED,

// There was an error with recording audio.

SPEECH_INPUT_ERROR_AUDIO,

// There was a network error.

SPEECH_INPUT_ERROR_NETWORK,

// No speech heard before timeout.

SPEECH_INPUT_ERROR_NO_SPEECH,

// Speech was heard, but could not be interpreted.

SPEECH_INPUT_ERROR_NO_MATCH,

// There was an error in the speech recognition grammar.

SPEECH_INPUT_ERROR_BAD_GRAMMAR,

};

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

返回结果:识别成功



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

37楼 flight9 2013-06-02 20:26发表 [回复]


为何我按你的方法,识别率超差啊,说“上午好”,返回“sina”,说“欢迎”返“日语”

Re: flight9 2013-06-02 20:43发表 [回复]


回复flight9:更正一下,说“你好”返“日语”,说“再见”返“漫画”

36楼 u010236042 2013-05-08 11:43发表 [回复]


楼主你好,你的这篇文章我觉得写的挺好,收录到我们的网站了,链接:http://www.mmihome.net/portal.php?mod=view&aid=212,欢迎交流,有问题请联系,谢谢。

35楼 kevinlico 2013-05-08 10:57发表 [回复]


亲爱的博主,看你的论文两天了。我发现了一个格式 amr,谷歌接口可以识别的。数据压缩非常小。效率很高。特别说明:我是在IOS平台上面实验的。

代码基本要点贴在下面:

1、AMR格式

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

返回结果:识别成功

rate 8000 也可以。录制的过程中,注意对应就可以了。谢谢!

Re: lyfadd85 2013-05-24 11:18发表 [回复]


回复kevinlico:amr,果然可以。

34楼 s253425456 2013-04-28 15:55发表 [回复]


你好博主,感谢分享,

我在使用中遇到一个问题,我使用的是wav格式的音频,大小在35k左右,使用post上传时提示403错误。

如果我只post比较小的buffer(不是完整音频),可以post成功,识别失败(必然的),不知道之前的为什么post失败

33楼 lyfadd85 2013-04-23 19:36发表 [回复]


博主你好,请教你两个问题。1、本文中你试验的speex格式文件能成功识别,是否与录音获取的数据类型有关,我用audiorecord录音获取byte数组可以识别,但是如果是short数组却不能;2、speex格式能识别,请问你是如何获取数据,数据类型是否存在转换的过程能解释一下吗,因为语音识别需要考虑流量的问题,采用speex格式传输更合理,期待你的回复,谢谢。

32楼 LiMiRiver 2013-04-16 19:45发表 [回复]


楼主,问一个非常菜鸟的问题,我按照你的代码在Qt中运行,main文件总是出错,speechInput_audioFormat 没有声明,这个问题怎么解决啊?

Re: LiMiRiver 2013-04-16 21:44发表 [回复]


回复LiMiRiver:这个问题已经解决啦。。。但是博主你给的Protocol是头文件吗?在这个文件上编译总有错。

Re: LiMiRiver 2013-04-17 13:26发表 [回复]


回复LiMiRiver:额……原谅我吧楼主,请忽略以上白痴问题

31楼 jsjscool 2013-03-06 18:51发表 [回复]


博主还有一些细节没说到,看看这篇文章
http://php.oil58.com/?p=483
Re: redsky_luan 2013-04-06 21:17发表 [回复]


回复jsjscool:兄弟你好,FLAC格式或者WAV格式如何获得呢?之际读二进制文件么?

30楼 lehuoezu 2013-01-01 22:15发表 [回复]


我使用VB6.0做这个,一直到转换flac都做出来了,播放转换后的flac也正常,说明转换过程应该没有问题,但是在post过程中遇到了点困难,如何把flac在VB中post出去?我最初尝试用读取文本的方式读取flac,但读出来的只是一行英文,还有一堆空格,显然是无法识别的,我又试着用二进制方式读取,读取到一大长串数字,post出去,得到这个结果:

{"status":5,"id":"b22e49c6bd19020f56d6437a17db5f7b-1","hypotheses":[]}

目测应该还是flac没有被正确post出去。

能否提供一下正确的post出去的字符串应该是什么样子的?数字?还是英文字母?最好,提供一下VB中的例子,哈哈,谢谢啦~

Re: redsky_luan 2013-04-06 21:16发表 [回复]


回复lehuoezu:怎么样兄弟,问题解决了么?我也遇到同样的问题

29楼 yexiangCSDN 2012-12-24 13:34发表 [回复]


为什么 我得到的状态 都为 5呢?

28楼 wow_qs_zs 2012-12-23 16:33发表 [回复]


我很不解为什么 我的识别率这么低呢 楼主能给解答下吗代码在我的博客上。

27楼 汹涌的海 2012-11-20 17:17发表 [回复]




26楼 qinshudong 2012-10-27 20:34发表 [回复]


不知道楼主在不在??

想要一个VC++里面的 例子

自己写的 调试不出来

25楼 yylsheng 2012-10-08 15:53发表 [回复]


楼主,我要在WIN32平台下利用这个引擎,该如何写呢

24楼 alanlei22 2012-10-07 13:36发表 [回复]


dlangu0393楼主你好,

我用QT引用你的源碼

但是在Protocol.cpp出現錯誤

你能給一下Protocol.h所有的變量嗎

那一些replyCheck,Nt_SPEECH,contentCheck,checkJsonKeys我不知道你定義他們為什麼類形

還有jsonConvertableTo是什麼Class呢...

我的email:alanlei22@yahoo.com.hk

請大大給我一份Protocol.h的完整源碼

謝謝!

23楼 dlangu0393 2012-09-17 08:17发表 [回复]



引用“liuminch”的评论:Google也有个语音合成API,向这个接口发http://translate.google.com...

这个我已经跟这个识别一同实现了,不过我接收木有遇到问题哦

Re: 技术宅不是屌丝 2013-02-08 14:20发表 [回复]


回复dlangu0393:请问,我用Java调,设置中文后,接收一直不能成功,可以请教一下您的解决方案吗?

Re: 技术宅不是屌丝 2012-12-05 15:30发表 [回复]


回复dlangu0393:您好,我在使用JAVA调用Google语音合成API时,接受英文没有问题,但是无法成功接受中文,望请赐教!

22楼 ClamReason 2012-08-26 09:31发表 [回复]


想楼主回复的一些有用的问题,为什么不更新这个帖子,写到原帖中去呢,对我们这些后来的狠不方便啊

21楼 liuminch 2012-08-03 14:29发表 [回复]


Google也有个语音合成API,向这个接口发http://translate.google.com/translate_tts?tl=en&q=test content,将返回一个test content的mp3文件,也支持中文。不知楼主有没有兴趣搞?比这个容易搞多了,只是偶较愚钝,返回的mp3文件一直接收有问题。

20楼 loshamo 2012-07-31 16:28发表 [回复]



[java] view
plaincopyprint?

BufferedWriter w = new BufferedWriter(new FileWriter(outPutFilePath));

String content = null;

String result = "";

while ((content = breader.readLine()) != null) {

result += content + "\n";

}

w.write(result);

w.flush();

w.close();

return result;

Re: liuminch 2012-08-03 14:21发表 [回复]


回复loshamo:是不是你的采样率设置错了?rate=16000

19楼 loshamo 2012-07-31 16:27发表 [回复]



[java] view
plaincopyprint?

public String post(String filePath) throws Exception {

URL url = new URL(utl);

HttpURLConnection conn = (HttpURLConnection)url.openConnection();

conn.setDoOutput(true);

conn.setDoInput(true);

conn.setRequestMethod("POST");

conn.setRequestProperty("Content-Type", "audio/L16; rate=8000");

conn.setRequestProperty("user-agent","mozilla/5.0");

DataOutputStream writer = new DataOutputStream(conn

.getOutputStream());

FileInputStream input = new FileInputStream(new File(filePath));

byte[] buffer = new byte[256]; //必须用户自己创建一个buffer。

int read = input.read(buffer);

while (read != -1) // 判断文件读完的条件

{

writer.write(buffer,0,read);

read = input.read(buffer);

}

writer.flush();

writer.close();

input.close();

InputStreamReader reder = new InputStreamReader(conn.getInputStream(),

"utf-8");

BufferedReader breader = new BufferedReader(reder);

BufferedWriter w = new BufferedWriter(new FileWriter(outPutFilePath));

。。。

}

18楼 liuminch 2012-07-26 19:29发表 [回复]


哇,楼主,我用java写的wav格式成功了,专程来感谢的!只是confidence偏低啊,这个是不是confidence越高,识别时间越短啊?还有用flac格式是不是confidence都很高啊?

Re: wsw8612 2013-04-17 10:02发表 [回复]


回复liuminch:你好,我也在看这个,但一直搞不通,能否发个java的demo来学习一下!wufan8612@163.com

Re: loshamo 2012-07-31 15:10发表 [回复]


你的java版是怎么写的? 我怎么搞不通呢,希望赐教。

Re: chen735250065 2012-10-18 10:52发表 [回复]



[java] view
plaincopyprint?

String url = "http://www.google.com/speech-api/v1" +

"/recognize?xjerr=1&client=chromium&lang=zh-cn";

URL postUrl = new URL(url);

HttpURLConnection connection = (HttpURLConnection)postUrl.openConnection();

connection.setRequestProperty("Content-Type","audio/x-flac; rate=16000");

connection.connect();

DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());

outputStream.write(readfileByYte("aaa.flac"));

这个是关键代码实现了flac格式但是wav格式有问题。请求大神解决

17楼 huaye 2012-07-25 09:49发表 [回复]


能否给个你测试过的wav或者flac文件上传地址,我下来测试下?

Re: huaye 2012-07-25 13:50发表 [回复]


回复huaye2007:搞定了,是

E:\MediaOutput\speechInput.wav

General

Complete name : E:\MediaOutput\speechInput.wav

Format : Wave

File size : 85.0 KiB

Audio #0

ID : 0

Format : PCM

Format settings, Endianness : Little

Codec ID : 1

Bit rate : 256 Kbps

Channel(s) : 1 channel

Sampling rate : 16.0 KHz

Bit depth : 16 bits

Stream size : 1.00 Byte (0%)

中Bit depth : 16 bits

而我这只有4或者8,结果都不行。改成16就可以了。

16楼 huaye 2012-07-25 09:48发表 [回复]


对上传文件大小有限制不?

我的老是返回消息:

{"status":5,"id":"39f4a7ae3a539ae1a797c041e122f4b3-1","hypotheses":[]}

Re: yexiangCSDN 2012-12-24 13:33发表 [回复]


为什么 我得到的状态 都为 5呢?

15楼 jplele 2012-07-11 10:56发表 [回复]


楼主有对比过讯飞和google的语音识别么?

14楼 Victor000000 2012-04-30 16:35发表 [回复]


能否给出protacol.h和protacol.cpp的完整代码?

Re: dlangu0393 2012-04-30 17:40发表 [回复]


回复Victor000000:不好意思这个没法给你,因为里面还有其他的很多东西。

Protocol头部中有用的信息如下:

[cpp] view
plaincopyprint?

class Protocol

{

public slots:

// 请求函数

void Request_SPEECH(QByteArray &);

private slots:

// 读取函数

void Read_SPEECH();

signals:

// 信号

void Signal_SPEECH(int result, QString responsemsg, double confidence);

};

另,在读取函数中应该使用:

[cpp] view
plaincopyprint?

<br>connect(Nt_SPEECH, SIGNAL(finished()), this, SLOT(Read_SPEECH()));<br>

而不是:

[cpp] view
plaincopyprint?

<br>connect(Nt_SPEECH, SIGNAL(readyRead()), this, SLOT(Read_SPEECH()));<br>

13楼 ABCDEFGA 2012-04-09 09:14发表 [回复]


厉害,最近我也在做这一块,可是主要是用JAVA的,用于毕业论文,想问下你有相关的资料与建议吗~?

Re: dlangu0393 2012-04-27 17:56发表 [回复]


回复hacktheworld:呵呵 不好意思,我并不是研究这个的,只不过是软件需要用到,所以才去找的。^_^

12楼 stoneforestwhu 2012-03-16 19:47发表 [回复]


wav 格式识别不准,flac非常准,下面是例子:

/wav格式(录音内容为“I have a dream”)

{"status":0,"id":"a01cd4f1efc9d433a1b0695e95011b40-1","hypotheses":[{"utterance":"rm","confidence":0.26077396}]}

/flac格式(录音内容为“I have a dream”)

{"status":0,"id":"e186ca8a3d98f461622dfa3662332fdc-1","hypotheses":[{"utterance":"i have a dream","confidence":0.87555957}]}

楼主可有好办法解决?

Re: dlangu0393 2012-04-27 17:55发表 [回复]


回复stoneforestwhu:这个我也没有办法了,没有在源码中找到其他更多的信息。

11楼 stoneforestwhu 2012-03-15 20:10发表 [回复]


我想问一下flac.exe -8 -f --sample-rate=16000 speechInput.wav 是WINdows下的指令,而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"是linux下使用的,表示不解。教程能否详细点,多谢!!!

Re: dlangu0393 2012-03-15 21:17发表 [回复]


回复stoneforestwhu:http://gnuwin32.sourceforge.net/packages/wget.htm

请在此下载wget for windows。

如果有不明白的地方请回复提问,我会尽力回答。

10楼 春城秋水 2012-03-12 13:18发表 [回复]


天呀,为啥我设置了zh-CN,能识别英语却识别不出中文呢?中文显示乱码。。。。。

Re: dlangu0393 2012-03-12 13:50发表 [回复]


回复Q951248:返回内容为UTF-8编码。请修改读取部分的代码。

9楼 forLoginAndLogin 2012-03-11 19:33发表 [回复]


楼主,你好。

你这片文章写得很好很详细。我有个问题解决不了,想请教楼主一下:

文中你提到google 这个api支持wav格式(就是改成audio/L16),我试了很多次,都不成功(返回的status:4),而我把它转换成flac格式又成功了,请问一下这是什么原因呢?谢谢~~~

Re: dlangu0393 2012-03-11 22:02发表 [回复]


回复forLoginAndLogin:请注意一下rate(采样率)是否正确。

Re: dlangu0393 2012-03-11 21:56发表 [回复]


回复forLoginAndLogin:以下是我测试所使用的WAV文件信息:

E:\MediaOutput\speechInput.wav

General

Complete name : E:\MediaOutput\speechInput.wav

Format : Wave

File size : 85.0 KiB

Audio #0

ID : 0

Format : PCM

Format settings, Endianness : Little

Codec ID : 1

Bit rate : 256 Kbps

Channel(s) : 1 channel

Sampling rate : 16.0 KHz

Bit depth : 16 bits

Stream size : 1.00 Byte (0%)

wget测试命令:

E:\MediaOutput>wget -O "GoogleSpeechAPI.txt" --user-agent="Mozilla/5.0" --post-file=speechInput.wav --header="Content-Type: audio/L16; rate=16000" "http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN&maxresults=1"

返回结果:

{"status":0,"id":"ca0c1b3b2c6f89d70ab1643a70599c0d-1","hypotheses":[{"utterance":"下午好","confidence":0.7916111}]}

Re: darou1000 2012-04-27 11:32发表 [回复]


回复dlangu0393:你好,请问你是用什么工具看到wav文件格式的?以及有没有什么工具可以把wav转换成speex

Re: dlangu0393 2012-04-27 17:55发表 [回复]


回复darou1000:我是从PotPlayer里拷贝的文件信息。

Speex请参看http://www.speex.org/

不过Speex在我这里测试成功率极低,甚至在64位系统下官方提供的编码器无法正常工作。

Re: darou1000 2012-05-02 14:28发表 [回复]


回复dlangu0393:非常感谢,我测试成功了,还想请教一下,是否可以在请求时发送语法定义呢?

8楼 春城秋水 2012-03-09 18:29发表 [回复]


我想问下,这个东西能应用到java写的系统么?

Re: dlangu0393 2012-03-09 20:42发表 [回复]


回复Q951248:当然可以哦,只要你用java实现就可以了。协议都是一样的。

Re: 春城秋水 2012-03-10 13:40发表 [回复]


回复dlangu0393:你好,我又多看了几遍,大概的过程已经知道,但是因为我不懂C和C++,只懂点java,但看样子应该是要网络编程,不知道java该如何实现的。。。

Re: 春城秋水 2012-03-10 10:45发表 [回复]


回复dlangu0393:你好,能否发一个完整的源代码例子给我看看呢?对于你说的这些感觉很散乱,我比较笨理不清思路........。邮箱:js.qiu@qq.com 谢谢啦!

7楼 Ostroff 2012-03-07 10:32发表 [回复]


LZ太强大了,我用WAV格式测试OK。我现在有个问题,就是这里的语言是中文普通话,lang=zh-CN,对吧,那设置用户读音为粤语和英语,lang参数应该为什么呢?

Re: dlangu0393 2012-03-07 12:49发表 [回复]


回复Ostroff:通用语言代号参考:http://msdn.microsoft.com/en-us/library/ms533052(v=vs.85).aspx

英语的话,请使用en-us。至于粤语,可以尝试一下zh-hk,不好意思不认识会粤语的朋友,没法测试是否可行。如果你测试可行的话,一定要来留言哦。

6楼 hill141592 2012-03-06 11:56发表 [回复]


十分感谢楼主分享!给了我非常大的帮助!非常给力!

然后我提醒下楼主,我在以audio/L16作为参数时候做测试的时候,wav文件中其实就是PCM格式的音频~

Re: dlangu0393 2012-03-06 12:49发表 [回复]


回复hill141592:我所测试的PCM是指原始的PCM数据(原始PCM数据应该用什么Content-Type我也不确定,只是从网上找到一个,从朋友那里拿到一个),而WAV是PCM数据加上头信息,两者还是有区别的。如果能直接传送PCM原始数据的话那就太方便了,从音频设备获取的数据都不用包装直接送往服务器就行了,虽然带宽上并不划算。

5楼 wb1989124 2012-03-05 21:40发表 [回复]


楼主你好,我最近要在linux上编一个语音自动应答模块,用C++,不知道要怎么运用到这个谷歌的语音识别引擎?不知道楼主能否给点意见和建议?

Re: dlangu0393 2012-03-05 21:45发表 [回复]


回复wb1989124:其实关键点在于那个请求地址以及POST的数据内容,在文章中已经给出了哦~(文笔不好大概不太好找)

至于实现,我使用的是Qt框架,示例代码也给出了哦。

其实这个接口的调用并没有什么难度,主要还是前端的一些处理,比如如何正确的截断音频输入(实例中只是简单地使用了定时器终止,后来使用了根据音频内容来终止,如果用户停止说话了,就自动截断)。

Re: wb1989124 2012-03-13 17:41发表 [回复]


回复dlangu0393:楼主能不能留个QQ?方便交流。

Re: wb1989124 2012-03-13 14:19发表 [回复]


回复dlangu0393:楼主,那我是不是要在linux环境下安装QT框架,然后在这个框架下按照这篇文章的例程,调用谷歌语音识别引擎?

Re: dlangu0393 2012-03-15 21:18发表 [回复]


回复wb1989124:本文着重介绍GoogleSpeechAPI,我只是使用Qt平台写了一个范例,并不一定非要用Qt平台。使用任何可以进行网络请求的语言和平台都可以。

4楼 Kevin_jiang2011 2012-02-27 22:27发表 [回复]


谢谢分享

3楼 kafeleung 2012-02-19 18:35发表 [回复]


你好,我对你的研究很感兴趣。但是有一些问题希望能请教一下:

1. 对于发送到google speech api的audioData是什么格式?

2.这个audioData好像是通过flac.exe对wav文件进行转换的,flac.exe这个是什么文件?哪里能找到?

谢谢你的分享。^_^

Re: dlangu0393 2012-02-19 21:46发表 [回复]


回复kafeleung:先从录制设备获取数据,然后使用flac或者speex进行编码,audioData即为编码后的数据。我的范例中使用的是flac编码,Header如下:

Content-Type: audio/x-flac; rate=16000

rate即采样率16kHz,经测试其他的rate同样可用,但一定要保证数据内容和Header一致,不然会出错。

flac.exe是FLAC编码器的binary,在
http://sourceforge.net/projects/flac/files/flac-win/
可以下载到。(本来想使用FLAC的库,结果遇到一些麻烦没有弄成功)

Re: kafeleung 2012-02-20 01:03发表 [回复]


回复dlangu0393:明白,谢谢。

2楼 waterman0405 2012-02-17 16:11发表 [回复] [引用] [举报]


谢谢楼主,不过话说你真是博学呀,这都能找到。

我找了一早上,终于找到想要的了,这还是多亏了你们这些大侠的帮助呀!3Q

Re: dlangu0393 2012-02-18 00:28发表 [回复] [引用] [举报]


回复waterman0405:博学什么的,不敢不敢…… 大家共同学习嘛!

1楼 waterman0405 2012-02-17 09:44发表 [回复]


楼主你好,我最近也要用到语音识别系统,但是我使用在android手机上的,我查找了google的voice actions,但是没有找到公开的API,想问下你有这方面的资料吗?谢谢

Re: dlangu0393 2012-02-17 12:41发表 [回复]


回复waterman0405:不好意思我还真没写过Android的应用,我看到了下面的这篇文章,不知道是否对你有用 :D
http://developer.android.com/resources/articles/speech-input.html
另外,如果android可以访问网络的话,本文描述的方法应该也是同样适用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  感想