一. 解析用戶語音輸入,轉換爲字符串html
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
二,音頻數據給到百度雲
三,捕獲百度雲返回的結果
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 你好