zoukankan      html  css  js  c++  java
  • 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/ 
      2. python -m pip install --upgrade pip
      3. 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   #关机命令
    • http://vop.baidu.com/server_api        #百度云api接口地址,我们的语音信息提交到这个接口就行了

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

    • 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
     六,代码编写如下:
    import time
    from pyaudio import PyAudio,paInt16
    from urllib.request import urlopen,Request    #专门处理http协议的模块
    import json
    import base64
    def play_audio(data): #播放音频
    	pa = PyAudio() #设备实例化
    	equip = pa.open(
    		format=paInt16,
    		channels=1, #单声道
    		rate=16000,
    		output=True,
    	) #打开设备,并且支持输出
    	equip.write(data) #设备的write函数,写入音频数据
    	equip.stop_stream() #关闭写入
    	equip.close()
    	pa.terminate() #关闭设备实例
    def record_audio():  #输入音频
    	pa = PyAudio() #设备实例化
    	equip = pa.open(
    		format=paInt16,
    		channels=1,
    		rate=16000,
    		input=True,
    		frames_per_buffer=1024,
    	) #打开设备,并且支持输入
    	data = [] #存储未来的语音输入
    		#一截一截的语音数据  [b'1',b'2',]
    	times = 0 #用来控制用户输入语音长度的
    	start = time.time()
    	while times < 50: #3S
    		data.append(equip.read(1024)) #读取设备中此时的语音数据
    		times += 1
    	end = time.time()
    	print('[TALK] %.2f' % (end - start)) #%.2f 保留2位小数点有效位数字
    	data = b''.join(data) #完整的音频流数据
    	equip.close()
    	pa.terminate() #关闭设备实例
    	return data
    def baidu_token():
    	API_Key = 'oAcBP47GDDpj6XIHWmcSkeRi'
    	Secret_Key = 'ba2EKROswCy6KXzLdTpnGqPnPhHSFHU7'
    	grant_type = 'client_credentials'
    	url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=%s&client_id=%s&client_secret=%s'
    	response = json.loads(urlopen(url % (grant_type,API_Key,Secret_Key)).read().decode())
    	access_token = response['access_token']
    	return access_token
    def baidu_fenxi(data):
    	url = 'http://vop.baidu.com/server_api'
    	data_len = len(data)
    	audio_data = base64.b64encode(data).decode() 
    	access_token = baidu_token()
    	post_data = json.dumps({
    	    "format":"wav",
    	    "rate":16000,
            "dev_pid":1536,
            "channel":1,
            "token":access_token,
            "cuid":"00-50-56-C0-00-08",
            "len":data_len,
            "speech":audio_data,
        }).encode() #变为json的二进制
    	headers = {'Content-Type':'application/json'}
    	req = Request(url=url,headers=headers,data=post_data)
    	result = json.loads(urlopen(req).read().decode()).get('result')
    	if result:
    		return result[0]
    	else:
    		return None
    def main():
    	data = record_audio()
    	res = baidu_fenxi(data)
    	print(res)
    if __name__ == '__main__':
    	#程序入口
    	main()
    运行结果:
    E:python学习资料上课代码编写代码练习py>python e:/python学习资料/上课代码编写/代码练习py/百度云.py
    [TALK] 3.21
    你好  
     
     
     
     
  • 相关阅读:
    ASP.NET Core 2.2 基础知识(二) 中间件
    ASP.NET Core 2.2 基础知识(一) 依赖注入
    初识.NET Core
    volatile 和 Interlocked
    线程池
    MySQL 将某个字段值的记录排在最后,其余记录单独排序
    MySQL 一张表中两个字段值互换
    (转) C#解惑:HashSet<T>类
    利用 ildasm 修改被编译后DLL文件
    shell 字符串判断
  • 原文地址:https://www.cnblogs.com/zhangan/p/10174167.html
Copyright © 2011-2022 走看看