1. 程式人生 > >百度語音介面呼叫詳解以及案例

百度語音介面呼叫詳解以及案例

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