介绍
这篇文章运用简单易懂的例子给大家介绍使用python实现百度语音识别和图灵对话,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。
图例如下
https://github.com/Dongvdong/python_Smartvoice
- <李>上电后,只要周围声音超过2000年开始录音5 s 李> <李>录音上传百度识别,并返回结果文字输出李> <>李继续等待,周围声音是否超过2000年,没有就等待。李> <李>点用电脑API语音交互李>
代码如下
# - * -编码:utf - 8 - * #树莓派 从进口pyaudio pyaudio paInt16 进口numpy np 从datetime进口datetime 进口波 导入的时间 库导入请求#导入请求 进口urllib urllib。请求,pycurl 进口base64 进口json 进口操作系统 导入系统 从加强进口重新加载 #调用电脑API生成语音交互 进口的演讲 进口win32api 进口操作系统 导入系统 导入的时间 进口win32con 重载(系统) #系统。setdefaultencoding (“utf-8") #一些全局变量 save_count=0 save_buffer=[] t=0 和=0 time_flag=0 flag_num=0 文件名=& # 39;& # 39; 机关=& # 39;1 & # 39; def getHtml (url): html=requests.get (url) # html。=& # 39;编码utf - 8 # 39; #防止中文乱码 返回html.text def get_token (): apiKey=癆xXDYEN27Ks9XHocsGmCEdPm" secretKey=?1 cd52759f4d704d91c155a22ff7183d" auth_url=癶ttps://openapi.baidu.com/oauth/2.0/token& # 63; grant_type=client_credentials& client_id=?+ apiKey +“, client_secret=?+ secretKey; res=requests.get (auth_url) # res。=& # 39;编码utf - 8 # 39; #防止中文乱码 #打印(res.text) 返回json.loads (res.text) [& # 39; access_token& # 39;】 def dump_res (buf): #输出百度语音识别的结果 全球机关 #打印(“字符串类型“) #打印(buf) 一个=eval (buf) #打印(类型(a)) 如果一个[& # 39;err_msg& # 39;]==& # 39;成功# 39;公司: #打印((& # 39;结果# 39;][0])#终于搞定了,在这里可以输出,返回的语句 机关=(& # 39;结果# 39;][0] 打印(“我:“+机关) def use_cloud(令牌):#进行合成 fp=波。open (filename, & # 39; rb # 39;) nf=fp.getnframes () f_len=nf * 2 audio_data=https://www.yisu.com/zixun/fp.readframes (nf) cuid=" 9120612 " #产品id srv_url=' http://vop.baidu.com/server_api ' + ' & # 63; cuid=' + cuid +的令牌=+令牌 http_header=[ 内容类型:pcm音频/;率=8000”, 内容长度:% d % f_len ] c=pycurl.Curl () c.setopt (pycurl。URL, str (srv_url)) #卷发不支持unicode # c.setopt (c。RETURNTRANSFER, 1) c.setopt (c。HTTPHEADER, http_header) #必须列表,而不是东西 c.setopt (c。,1) c.setopt (c。CONNECTTIMEOUT, 30) c.setopt (c。超时,30) c.setopt (c。WRITEFUNCTION dump_res) c.setopt (c。POSTFIELDS audio_data) c.setopt (c。POSTFIELDSIZE f_len) # pycurl.perform c.perform()()没有返回瓦尔 #将数据中的数据保存到名为文件名的WAV文件中 def save_wave_file(文件名、数据): wf=波。open (filename,“世界银行”) wf.setnchannels (1) wf.setsampwidth (2) wf.setframerate (SAMPLING_RATE) wf.writeframes (b . join(数据))" " wf.close () NUM_SAMPLES=2000 # pyAudio内部缓存的块的大小 SAMPLING_RATE=8000 #取样频率 水平=1500 #声音保存的阈值 COUNT_NUM=20 # NUM_SAMPLES个取样之内出现COUNT_NUM个大于水平的取样则记录声音 SAVE_LENGTH=8 #声音记录的最小长度:SAVE_LENGTH * NUM_SAMPLES个取样 exception_on_overflow=False #开启声音输入pyaudio对象 pa=PyAudio () 流=??格式=paInt16频道=1,率=SAMPLING_RATE、输入=True, frames_per_buffer=NUM_SAMPLES) 令牌=get_token() #获取令牌 关键=' 35 ff2856b55e4a7f9eeb86e3437e23fe ' api=' http://www.tuling123.com/openapi/api& # 63;关键=' +键+的信息=' 而(真正的): #读入NUM_SAMPLES个取样 string_audio_data=stream.read (NUM_SAMPLES、假); #将读入的数据转换为数组 audio_data=np.fromstring (string_audio_data dtype=np.short) #计算大于水平的取样的个数 large_sample_count=np。总和(audio_data>水平) temp=np.max (audio_data) 如果临时> 2000 t==0: t=1 #开启录音 打印(“- - - - - - - - - - - -主人我在听你说! (5 s) - - - - - - - - - - -”) 开始=time.time () #打印(临时) 如果t: #打印(np.max (audio_data)) 如果np.max (audio_data)使用python实现百度语音识别和图灵对话