
# -*- coding=utf-8 -*-
import base64
import urllib2
import urllib
import json
import wave
def get_token():
URL = 'http://openapi.baidu.com/oauth/2.0/token'
_params = urllib.urlencode({'grant_type': 'client_credentials',
'client_id': 'yours',#改成你自己的
'client_secret': 'yours'})#改成你自己的
_res = urllib2.Request(URL, _params)
_response = urllib2.urlopen(_res)
_data = _response.read()
_data = json.loads(_data)
return _data['access_token']
def wav_to_text(wav_file):
try:
wav_file = open(wav_file, 'rb')
except IOError:
print u'文件错误啊,亲'
return
wav_file = wave.open(wav_file)
n_frames = wav_file.getnframes()
frame_rate = wav_file.getframerate()
if n_frames != 1 or frame_rate not in (8000, 16000):
print u'不符合格式'
return
audio = wav_file.readframes(n_frames)
seconds = n_frames/frame_rate+1
minute = seconds/60 + 1
for i in range(0, minute):
sub_audio = audio[i*60*frame_rate:(i+1)*60*frame_rate]
base_data = base64.b64encode(sub_audio)
data = {"format": "wav",
"token": get_token(),
"len": len(sub_audio),
"rate": frame_rate,
"speech": base_data,
"cuid": "B8-AC-6F-2D-7A-94",
"channel": 1}
data = json.dumps(data)
res = urllib2.Request('http://vop.baidu.com/server_api',
data,
{'content-type': 'application/json'})
response = urllib2.urlopen(res)
res_data = json.loads(response.read())
print res_data['result'][0]
if __name__ == '__main__':
wav_to_text('demo.wav')
1、点击开始,点击控制面板;2、点击轻松访问;3、点击语音识别;
4、点击左边的“高级语音选项”;
5、把“启动时运行语音识别”前面的勾给去掉 ,点击确定即可。
首先添加一个系统的语音COM组件的引用microsoft speech object library然后在程序中声明一个语音类dim RC As SpeechLib.SpSharedRecoContext这个类有一些事件,如果你要处理它的一些事件,可以用withevent来声明然后在窗体LOAD事件或你需要的地方先创建一个实例RC = New SpeechLib.SpSharedRecoContext当一个RC被实例化后,系统就会运行语音识别程序.前提是你的系统已经正确安装这个功能.一般默认就已经安装好的.其次提醒一下,WIN7的语音识别比XP的好N倍.从阅读到侦听都好很多.然后就可以在你需要阅读的地方使用RC.Voice.Speak("hello 我", 11)11那里是一些枚举,用来标识系统用前台还是后台或其他方式来阅读文字,简单的来说就是阅读的时候不会卡住你的程序.你可以选其他的枚举来试试作用.以上为阅读部分.如果需要程序听你说话,则需要声明一个侦听类dim RG As SpeechLib.ISpeechRecoGrammar在初始化时将之与上面的RC建立关系,此时则必须要用withevent来声明上面的RC,因为涉及电脑听到你的语音后,会触发一个事件,并将听到的内容传递到该事件.其次,要让系统听到的解析为命令,就必须准备一个XML结构的文件来保存那些固定的命令.如果电脑在XML文件中找不到那些固定命令或同时不属于系统命令,电脑将会将其解释为听写.RG = RC.CreateGrammar '(0)RG.CmdLoadFromFile("听到.xml", SpeechLib.SpeechLoadOption.SLODynamic)
RG.CmdSetRuleIdState(0, SpeechLib.SpeechRuleState.SGDSActive)然后写一个过程来处理听到的事件Private Sub 听到命令(ByVal StreamNumber As Integer, ByVal StreamPosition As Object, ByVal RecognitionType As SpeechLib.SpeechRecognitionType, ByVal 话语 As SpeechLib.ISpeechRecoResult) Handles RC.RecognitionRC.Voice.Speak("我听到了" &话语.PhraseInfo.GetText, 11)End Sub以上为侦听部分.下面列一个XML的例文<?xml version="1.0" encoding="gb2312"?>
<GRAMMAR LANGID="804">
<RULE NAME="命令" TOPLEVEL="ACTIVE">
<L>
<P>打开播放器
<P>上我的QQ
<P>关闭你自己</L>
</RULE>
</GRAMMAR>要让系统正确地侦听到你说的话,前提你必须运行语音识别程序并让其激活到"正在聆听"状态.并且你必须有一个能正常使用的话筒而且保证话筒已经打开.(废话-_-|||)以上就是用VB.NET语音识别的最基本的一些 *** 作.希望对你有帮助.更深入的内容有兴趣的话可以和我一起研究.
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)