python調用百度語音(語音識別-鬥地主語音記牌器)
阿新 • • 發佈:2018-03-01
receive idt 本地文件 file post 最終 callback import pri
一、概述
本篇簡要介紹百度語音語音識別的基本使用(其實是鬥地主時想弄個記牌器又沒money,抓包什麽的又不會,只好搞語音識別的了)
二、創建應用
打開百度語音官網,產品與使用->語音識別->立即使用->創建應用
出現如下頁面
依照提示依次填寫,最終結果
(ps:我就想弄個記牌的,就起了個計數器的名)
點右方的 ‘查看key’ 記下App ID,API Key,Secret Key。接下來要用到
需要安裝模塊 pip install baidu-aip pip install pyaudio
語音識別代碼
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = ‘你記下的APP_ID‘ API_KEY = ‘你記下的API_KEY‘ SECRET_KEY = ‘你記下的SECRET_KEY‘ client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 讀取文件 def get_file_content(filePath): with open(filePath, ‘rb‘) as fp: return fp.read() # 識別本地文件 li=client.asr(get_file_content(‘01.pcm‘), ‘pcm‘, 8000, { ‘lan‘: ‘zh‘, }) print(li) # 從URL獲取文件識別 # client.asr(‘‘, ‘pcm‘, 16000, { # ‘url‘: ‘http://121.40.195.233/res/16k_test.pcm‘, # ‘callback‘: ‘http://xxx.com/receive‘, # })
python錄音代碼
import wave from pyaudio import PyAudio,paInt16 framerate=8000 NUM_SAMPLES=2000 channels=1 sampwidth=2 TIME=2 def save_wave_file(filename,data): ‘‘‘save the date to the wavfile‘‘‘ wf=wave.open(filename,‘wb‘) wf.setnchannels(channels) wf.setsampwidth(sampwidth) wf.setframerate(framerate) wf.writeframes(b"".join(data)) wf.close() def my_record(): pa=PyAudio() stream=pa.open(format = paInt16,channels=1, rate=framerate,input=True, frames_per_buffer=NUM_SAMPLES) my_buf=[] count=0 while count<TIME*5:#控制錄音時間 string_audio_data = stream.read(NUM_SAMPLES) my_buf.append(string_audio_data) count+=1 print(‘.‘) save_wave_file(‘01.pcm‘,my_buf) stream.close() chunk=2014 def play(): wf=wave.open(r"01.pcm",‘rb‘) p=PyAudio() stream=p.open(format=p.get_format_from_width(wf.getsampwidth()),channels= wf.getnchannels(),rate=wf.getframerate(),output=True) while True: data=wf.readframes(chunk) if data=="":break stream.write(data) stream.close() p.terminate() if __name__ == ‘__main__‘: my_record() print(‘Over!‘) play()
效果如下圖:
幫助文檔:
百度語音幫助文檔or手冊
三、後記
本代碼未完全實現,有興趣可自行整理,玩鬥地主的時候聲音可能要大點,因為識別有時候會報3001錯誤,音頻質量過差,不過被打可別找我
python調用百度語音(語音識別-鬥地主語音記牌器)