python语音识别的代码,最近从网上找下来,并改了一小点代码,话说python是万金油,什么玩意都能玩啊。
这个是使用google的语音api的,换言之一定要联网,这服务有可能给某墙头封掉呢,所以影响的因素好多,其实可以通过goagent连接google,这样或许能稳定好多.
废话不说,下边是代码:
#coding=utf8 #import socks import socket #socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 1070) #socket.socket = socks.socksocket import pyaudio import wave import sys,os import urllib2 import string import time import json socket.setdefaulttimeout(60) def gogo(): chunk = 1024 #chunk = 2048 FORMAT = pyaudio.paInt16 CHANNELS = 1 #RATE = 44100 RATE = 16000 RECORD_SECONDS = 10 WAVE_OUTPUT_FILENAME = "output.wav" FLAC_OUTPUT_FILENAME = "output.flac" p = pyaudio.PyAudio() stream = p.open(format = FORMAT, channels = CHANNELS, rate = RATE, input = True, frames_per_buffer = chunk) print chr(7) #beepx() print "* recording" all = [] for i in range(0, RATE / chunk * RECORD_SECONDS): data = stream.read(chunk) all.append(data) print "* done recording" stream.close() p.terminate() # write data to WAVE file data = ''.join(all) wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(data) wf.close() print "end..." cmd = 'flac ' + WAVE_OUTPUT_FILENAME + ' -f -o ' + FLAC_OUTPUT_FILENAME; #print cmd os.system(cmd); os.remove(WAVE_OUTPUT_FILENAME); xurl = 'http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=zh-CN' audio=open(FLAC_OUTPUT_FILENAME ,'rb').read() headers = {'Content-Type' : 'audio/x-flac; rate=16000'} req = urllib2.Request(xurl, audio, headers) response = urllib2.urlopen(req) strlist = response.read().decode('UTF-8') list_data = json.loads(strlist)["hypotheses"] mystr="nono" for n in list_data: mystr=n['utterance'] return mystr while True: try: astr = gogo() print 'say:',astr astr = astr.encode("utf8") if astr.find("关闭系统") !=-1: print "system exit" sys.exit() except Exception, e: print "error:",e pass time.sleep(1) print "go..."
其实传送文件那部分如果用上线程,这样就不用等这么久了,话说google的识别率还是不错啊,以上代码,你只要说【关闭系统】,就能停掉了.
以下是所需要其它程序:
pyaudio win安装版,python2.7的: pyaudio
flac-1.2.1b: flac-1.2.1b
如果在raspberry pi装上这玩意,然后再用gpio来控制光电耦合开关,这样就可以做很多事情了.