百度語音介面呼叫詳解以及案例
阿新 • • 發佈:2018-11-26
1.獲取的API Key及Secret Key
1.1 在控制檯中選擇語音
1.2 進入到如下介面進行建立應用(“介面選擇”這一項不用填寫)
2.呼叫介面
2.1 pycharm中新建一個python檔案(voice.py),輸入以下程式碼。
from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '#'
API_KEY = '#'
SECRET_KEY = '#'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
說明:
- AipSpeech是語音識別的Python SDK客戶端,為使用語音識別的開發人員提供了一系列的互動方法。python SDK(python軟體開發工具包)中集成了python中所有的範例、技術文件以及工具。
- APP_ID:標識使用者建立的一個應用
- API_KEY:公鑰
- SECRET_KEY:使用者用於加密認證字串和百度雲用來驗證認證字串的金鑰,其中SK必須保密,只有使用者和百度雲知道。
- 注:APP_ID、API_KEY、SECRET可在“應用列表”中檢視,它們三個對應同一個應用
- 認證過程:當百度雲接收到使用者的請求後,系統將使用相同的SK和同樣的認證機制生成認證字串,並與使用者請求中包含的認證字串進行比對。如果認證字串相同,系統認為使用者擁有指定的操作許可權,並執行相關操作;如果認證字串不同,系統將忽略該操作並返回錯誤碼。
- client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)用於使用者和百度雲之間的認證,認證通過後,返回一個用於識別語音的客戶端物件。
2.2 在voice.py檔案中輸入以下程式碼
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 識別本地檔案
res = client.asr(get_file_content(r'C:\Users\Administrator\Desktop\public\8k.pcm'), 'pcm', 8000, {
'dev_pid': 1536,
})
print(res)
- get_file_content(filePath):編寫了一個呼叫檔案的函式
- asr(path, fomat, rate, {"dev_pid" : "語種程式碼"})
- 作用:識別別本地檔案
- path:本地檔案路徑,檔案的格式必須是pcm、war或者amr格式(本地檔案是一個音訊檔案)
- fomat :檔案的型別(pcm、wav、amr)
- rate:取樣率(8k、16k)
- 語種程式碼
dev_pid |
語言 |
模型 |
是否有標點 |
備註 |
1536 |
普通話(支援簡單的英文識別) |
搜尋模型 |
無標點 |
支援自定義詞庫 |
1537 |
普通話(純中文識別) |
輸入法模型 |
有標點 |
不支援自定義詞庫 |
1737 |
英語 |
|
有標點 |
不支援自定義詞庫 |
1637 |
粵語 |
|
有標點 |
不支援自定義詞庫 |
1837 |
四川話 |
|
有標點 |
不支援自定義詞庫 |
1936 |
普通話遠場 |
遠場模型 |
有標點 |
不支援 |
- 示例
-
#呼叫麥克分 from pyaudio import PyAudio, paInt16 import numpy as np import wave class recoder: NUM_SAMPLES = 2000 #pyaudio內建緩衝大小 SAMPLING_RATE = 8000 #取樣頻率 LEVEL = 500 #聲音儲存的閾值 COUNT_NUM = 20 #NUM_SAMPLES個取樣之內出現COUNT_NUM個大於LEVEL的取樣則記錄聲音 SAVE_LENGTH = 8 #聲音記錄的最小長度:SAVE_LENGTH * NUM_SAMPLES 個取樣 TIME_COUNT = 15 #錄音時間,單位s Voice_String = [] def savewav(self,filename): wf = wave.open(filename, 'wb') #讀取音訊檔案 wf.setnchannels(1) #設定音訊檔案的聲道數,用在寫音訊流時 wf.setsampwidth(2) #設定音訊檔案每個取樣值的儲存位數,用在寫音訊流 wf.setframerate(self.SAMPLING_RATE) #設定取樣率,用在寫音訊時 wf.writeframes(np.array(self.Voice_String).tostring()) # wf.writeframes(self.Voice_String.decode()) wf.close() def recoder(self): pa = PyAudio() stream = pa.open(format=paInt16, channels=1, rate=self.SAMPLING_RATE, input=True, frames_per_buffer=self.NUM_SAMPLES) save_count = 0 save_buffer = [] time_count = self.TIME_COUNT while True: time_count -= 1 # print time_count # 讀入NUM_SAMPLES個取樣 string_audio_data = stream.read(self.NUM_SAMPLES) # 將讀入的資料轉換為陣列 audio_data = np.fromstring(string_audio_data, dtype=np.short) # 計算大於LEVEL的取樣的個數 large_sample_count = np.sum( audio_data > self.LEVEL ) print(np.max(audio_data)) # 如果個數大於COUNT_NUM,則至少儲存SAVE_LENGTH個塊 if large_sample_count > self.COUNT_NUM: save_count = self.SAVE_LENGTH else: save_count -= 1 if save_count < 0: save_count = 0 if save_count > 0 : # 將要儲存的資料存放到save_buffer中 #print save_count > 0 and time_count >0 save_buffer.append( string_audio_data ) else: #print save_buffer # 將save_buffer中的資料寫入WAV檔案,WAV檔案的檔名是儲存的時刻 #print "debug" if len(save_buffer) > 0 : self.Voice_String = save_buffer save_buffer = [] print("Recode a piece of voice successfully!") return True if time_count==0: if len(save_buffer)>0: self.Voice_String = save_buffer save_buffer = [] print("Recode a piece of voice successfully!") return True else: return False def radio(): r = recoder() r.recoder() r.savewav("test.wav")
#呼叫我寫的介面 from aip import AipSpeech from yuying import radio import time """ 你的 APPID AK SK """ APP_ID = '#' API_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() def radio(): r = recoder() r.recoder() r.savewav("test.wav") # 識別本地檔案 while True: radio() res = client.asr(get_file_content(r'test.wav'), 'wav', 8000, { 'dev_pid': 1536, }) if "result" in res.keys(): for i in res["result"]: print(i) else: break