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

发表在 技术生活 | 留下评论

raspberry pi安装gevent

raspberry pi安装python的gevent是件麻烦事呢,默认用apt-ge安装的python-gevent不能用, 昨晚删掉python-gevent、python-greenlet等模块,然后使用python的pip安装工具再按装这两个模块,然后运行程序才没问题, 怪啊.

反正是要在树莓派下进行编译才行, 这样的gevent才能用.

搞定gevent就是为了我在raspberry pi上编程方便,也为了能用goagent, 嘻嘻.

发表在 一般生活 | 留下评论

go语言判断中文

go语言判断中文, 参考自网上的python版本改过来的,win7 64位, go1.1下通过

package main

import (

“fmt”
“regexp”
)

func main() {
var myexpx = regexp.MustCompile(“[\u4e00-\u9fa5]+”)
arrb:=myexpx.FindStringSubmatch(“xxxs123a我da们sas”)
fmt.Println(len(arrb))
if len(arrb)>0{
fmt.Printf(“V%”,arrb)
}

}

golang语言好多东西可以从python改过来.

发表在 一般生活 | 留下评论

原来是go程序写的查询函数问题

搞了一下午,原来是go程序写的查询函数问题, 拖慢了整个并发,哈哈哈,golang并发确实简单,原来也是我大意写的函数造成,不过其实也是sql语句问题,哈哈,又一个经验了.

是写的函数关闭不了连接,每次查询,又产生一个mysql连接,然后就越来越多的连接了,差点令mysql的连接死掉, java那边的写法也差不多,但没产生多一个连接呢,奇怪啊.

短短的来两句,这个go语言爬虫以后好用了,反正比python速度快,爽啊, java的爬虫也是,现在理论上以go语言的为主,java爬虫为辅,不过反正都是代码积累呢.
日常处理还是以python为主,毕竟模块多,开发效率很高,处理一般事情够了。

发表在 一般生活 | 留下评论

go并发慢原来是mysql驱动问题

今天开机后尝试go的爬虫,居然很快,晕死,而且作为发力搞到2点多搞定java爬虫,java的多线程好爽啊,不过今天比较了一个早上,发觉速度都是差不多,总之比python写的爬虫快吧,java的mysql连接始终维持在20个连接左右,golang的始终维持在200,有时达到400, 现在好肯定是mysql的连接问题影响了并发,看来我对go语言的并发理解还是对的.

今早在跑java的爬虫时,发觉吃内存很大,甚至吃到300多兆,但确实性能很不错,mysql驱动很成熟,等有时间再找个postgresql驱动试试,反正java的问题很好解决,毕竟发展了这么多年了,解决问题很容易,网上的各样java资料很丰富呢,但程序确实复杂,刚才看了一个所谓的mysql连接池,哇,很复杂,一头烟呢,回头再看python, 简单得要死,果然开发效率是python没错啊.

以后非必要性能的问题,都用python解决算了,用java搞的话,不知道要死多少脑细胞呢,go语言网上资料少,搞这个,也要死不少脑细胞.

发表在 一般生活 | 留下评论

对go语言写爬虫失望

刚才完成了go语言的爬虫采集程序,大致概念是跟python的程序结构写的,可惜的就是,完成后,golang线程完全不动,程序慢得要死,唉,可能是我对go语言的并发理解错误吧,反正很不行,python的线程跑得还快呢,而且代码比go语言少一半,容易理解很多,呜呜,失望啊,超级失望啊,看来还是要重新理解一下go语言的并发模式,不过现在对golang语言比较熟练也是一件好事吧!

python里的线程模型容易操控呢。

好,放下这个,跑去完成java的爬虫,其实我也完成了大半的,但还是放慢点脚步,继续完善python爬虫.

发表在 一般生活 | 留下评论