百度API---語音識別

菜鳥xk_110發表於2020-12-19

百度API–語音識別

首先開啟百度的AI開放平臺,然後點短語音識別在這裡插入圖片描述

進入後的頁面是這樣的,點選立即使用在這裡插入圖片描述

然後就直接點建立應用就可以了
在這裡插入圖片描述

進入後是這個頁面,按自己的要求填寫就好了,然後就立即建立
在這裡插入圖片描述

建立成功之後在應用列表裡就可以看到這些東西,其中的AppID、API Key、Secret Key這三個資料是在呼叫API的時候要用到的。在這裡插入圖片描述
之後在技術文件裡就能看到相關的相關的呼叫方式及一些引數等的說明。
下面就是直接複製文件中的程式碼,直接用就可以了。

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()

# 識別本地檔案
print(client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
    'dev_pid': 1537,
}))

這裡需要注意,支援的語音識別格式要求,不符合要求的話,會返回錯誤資訊或識別不準確。在這裡插入圖片描述
剛開始直接用Win10自帶的錄音機錄的發現不太行,就改用Pyaudio錄製,下面是聲音錄製的程式碼。

import wave
from pyaudio import PyAudio, paInt16
 
 
CHUNK = 1024 # wav檔案是由若干個CHUNK組成的,CHUNK我們就理解成資料包或者資料片段。
FORMAT = paInt16 # 表示我們使用量化位數 16位來進行錄音
CHANNELS = 1 #代表的是聲道,1是單聲道,2是雙聲道。
RATE = 16000 # 取樣率 一秒內對聲音訊號的採集次數,常用的有8kHz, 16kHz, 32kHz, 48kHz,
RECORD_SECONDS = 10 # 錄製時間這裡設定了10秒
 
 
def save_wave_file(pa, filename, data):
    wf = wave.open(filename, 'wb')
    wf.setnchannels(CHANNELS)
    # wf.setsampwidth(sampwidth)
    wf.setsampwidth(pa.get_sample_size(FORMAT))
    wf.setframerate(RATE)
    wf.writeframes(b"".join(data))
    wf.close()
 
 
def get_audio(filepath):
    isstart = str(input("是否開始錄音? (是/否)")) 
    if isstart == str("是"):
        pa = PyAudio()
        stream = pa.open(format=FORMAT,
                         channels=CHANNELS,
                         rate=RATE,
                         input=True,
                         frames_per_buffer=CHUNK)
        print("*" * 10, "開始錄音:請在10秒內輸入語音")
        frames = []  # 定義一個列表
        for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):  # 迴圈,取樣率 44100 / 1024 * 5
            data = stream.read(CHUNK)  # 讀取chunk個位元組 儲存到data中
            frames.append(data)  # 向列表frames中新增資料data
        print(frames)
        print("*" * 10, "錄音結束\n")
 
        stream.stop_stream()
        stream.close()  # 關閉
        pa.terminate()  # 終結
 
        save_wave_file(pa, filepath, frames)
    elif isstart == str("否"):
        exit()
    else:
        print("無效輸入,請重新選擇")
        get_audio(filepath)
 
 
def play():
	"""播放錄製的音訊"""
    wf = wave.open(r"01.wav", 'rb')
    p = PyAudio()
    steam = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=
    wf.getnchannels(), rate=wf.getframerate(), output=True)
 
    # 讀資料
    data = wf.readframes(CHUNK)
 
    # 播放流
    while len(data) > 0:
        stream.write(data)
        data = wf.readframes(CHUNK)
 
    stream.stop_stream() # 暫停播放/錄製
    stream.close() # 終止播放
 
    p.terminate() # 終止portaudio會話
 
 
if __name__ == '__main__':
    filepath = '01.wav'
    get_audio(filepath)
    print('Over!')
    #play()

測試了幾個之後感覺,嘿,真不錯誒。。。

相關文章