35.百度云语音识别接口使用及PyAudio语音识别模块安装

百度云语音识别接口使用:


百度云语音识别接口文档:https://cloud.baidu.com/doc/SPEECH/ASR-API.html\#JSON.E6.96.B9.E5.BC.8F.E4.B8.8A.E4.BC.A0

一. 解析用户语音输入,转换为字符串

  • 捕获用户的语音输入

  • windows安装

  1. pip3 install PyAudio   #如果报错可以尝试2,3步骤 丶 如果用pip3下载安装报错可以在python第三方安装包下载地址搜索下载安装https://pypi.org/ 
    1. python -m pip install --upgrade pip
    2. pip install PyAudio
  • CentOS 7.4 下安装PyAudio 需要先安装 portaudio (采用的方法,可行)

1、在安装pyaudio时,报错failed error: portaudio.h: 没有那个文件或目录

2、pyaudio的运行需要依赖于portaudio这个库,应该先安装一个portaudio库

3、portaudio安装步骤:

a)下载portaudio库http://portaudio.com/download.html

b)将下载的文件进行解压

c)进入解压后的portaudio文件,依次执行命令:

./configure

make

make install

d)进入~/.bashrc文件:vim ~/.bashrc

在文件最后一行加入  export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

然后执行命令source ~/.bashrc

4、到此portaudio库安装成功

5、安装pyaudio库,pip3 install pyaudio (wget https://files.pythonhosted.org/packages/ab/42/b4f04721c5c5bfc196ce156b3c768998ef8c0ae3654ed29ea5020c749a6b/PyAudio-0.2.11.tar.gz)

 成功后显示版本为0.2.11

二,音频数据给到百度云

  • 音频数据的格式规则  

  • format:格式  wav

    • rate:采样率  16000
    • channel:声道  1单声道
    • cuid:用户ID  MAC地址,只要保证唯一
    • token:身份识别  在百度云接口平台注册后,才能拿到
    • dev_pid:  1536英文,1537中文
    • len:数据的长度 原始的  len(data) ->
    • speech:数据对象  

  1,base64 编码

  2,经常用于网络中的音频图像二进制的数据传输

  3,base64.b64encode(data)

  • **JSON**格式POST上传本地音频流数据

  • header:Content-Type:application/json

  • 标识,

    • GET:直接获取服务器上的数据
    • POST:客户端先向服务端提交数据,服务端在返回,POST一定会向服务器提交数据
  • RESTFUL:资源定义成了连接(url 同一资源,这个要了解一下)

  • 连接,www.baidu.com

    • POST提交数据,
    • WEB服务 HTTP协议
    • RESTFUL:ip/?shutdown   #关机命令

 

 

三,捕获百度云返回的结果

  • JSON的返回    #无论什么方式上传都会以JSON格式返回结果

  • json.loads() 解析json数据变为Python中数据对象 字典

    • j'son.dumps() dict -> dict
  • result   #音频返回的结果在result字段中

四,接口使用:

  • PyAudio:对象,实例化一个设备

  • pa.open(format=存储位深 int 16位, channels=声道,rate=采样率,input=True,frame_per_buffer=1024)

五,注册登录百度云管理中心创建任务         ### https://console.bce.baidu.com/ai/?_=1545815700081\#/ai/speech/app/create

 六,代码编写如下:

1import time 2from pyaudio import PyAudio,paInt16 3from urllib.request import urlopen,Request #专门处理http协议的模块 4import json 5import base64 6def play_audio(data): #播放音频 7 pa = PyAudio() #设备实例化 8 equip = pa.open( 9 format=paInt16, 10 channels=1, #单声道 11 rate=16000, 12 output=True, 13 ) #打开设备,并且支持输出 14 equip.write(data) #设备的write函数,写入音频数据 15 equip.stop_stream() #关闭写入 16 equip.close() 17 pa.terminate() #关闭设备实例 18def record_audio(): #输入音频 19 pa = PyAudio() #设备实例化 20 equip = pa.open( 21 format=paInt16, 22 channels=1, 23 rate=16000, 24 input=True, 25 frames_per_buffer=1024, 26 ) #打开设备,并且支持输入 27 data = [] #存储未来的语音输入 28 #一截一截的语音数据 [b'1',b'2',] 29 times = 0 #用来控制用户输入语音长度的 30 start = time.time() 31 while times < 50: #3S 32 data.append(equip.read(1024)) #读取设备中此时的语音数据 33 times += 1 34 end = time.time() 35 print('[TALK] %.2f' % (end - start)) #%.2f 保留2位小数点有效位数字 36 data = b''.join(data) #完整的音频流数据 37 equip.close() 38 pa.terminate() #关闭设备实例 39 return data 40def baidu_token(): 41 API_Key = 'oAcBP47GDDpj6XIHWmcSkeRi' 42 Secret_Key = 'ba2EKROswCy6KXzLdTpnGqPnPhHSFHU7' 43 grant_type = 'client_credentials' 44 url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=%s&client_id=%s&client_secret=%s' 45 response = json.loads(urlopen(url % (grant_type,API_Key,Secret_Key)).read().decode()) 46 access_token = response['access_token'] 47 return access_token 48def baidu_fenxi(data): 49 url = 'http://vop.baidu.com/server_api' 50 data_len = len(data) 51 audio_data = base64.b64encode(data).decode() 52 access_token = baidu_token() 53 post_data = json.dumps({ 54 "format":"wav", 55 "rate":16000, 56 "dev_pid":1536, 57 "channel":1, 58 "token":access_token, 59 "cuid":"00-50-56-C0-00-08", 60 "len":data_len, 61 "speech":audio_data, 62 }).encode() #变为json的二进制 63 headers = {'Content-Type':'application/json'} 64 req = Request(url=url,headers=headers,data=post_data) 65 result = json.loads(urlopen(req).read().decode()).get('result') 66 if result: 67 return result[0] 68 else: 69 return None 70def main(): 71 data = record_audio() 72 res = baidu_fenxi(data) 73 print(res) 74if __name__ == '__main__': 75 #程序入口 76 main() 77

运行结果:

1E:\python学习资料\上课代码编写\代码练习py>python e:/python学习资料/上课代码编写/代码练习py/百度云.py 2[TALK] 3.21 3你好   4

 

 

 

 

转载于:https://www.cnblogs.com/zhangan/p/10174167.html

代码交流 2021