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来控制光电耦合开关,这样就可以做很多事情了.