python语音识别的代码

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

关于无聊人

一个无聊人而已
此条目发表在技术生活分类目录。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注