35.百度雲語音識別接口使用及PyAudio語音識別模塊安裝

百度雲語音識別接口使用:


百度雲語音識別接口文檔:https://cloud.baidu.com/doc/SPEECH/ASR-API.html#JSON.E6.96.B9.E5.BC.8F.E4.B8.8A.E4.BC.A0

一. 解析用戶語音輸入,轉換爲字符串html

  • 捕獲用戶的語音輸入
    • 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 (採用的方法,可行)python

      一、在安裝pyaudio時,報錯failed error: portaudio.h: 沒有那個文件或目錄json

      二、pyaudio的運行須要依賴於portaudio這個庫,應該先安裝一個portaudio庫vim

      三、portaudio安裝步驟:windows

        a)下載portaudio庫http://portaudio.com/download.htmlapi

        b)將下載的文件進行解壓bash

        c)進入解壓後的portaudio文件,依次執行命令:服務器

          ./configure網絡

          makeapp

          make install

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

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

          而後執行命令source ~/.bashrc

      四、到此portaudio庫安裝成功

      五、安裝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
你好  
 
相關文章
相關標籤/搜索