基於python實現語音錄入識別程式碼例項
阿新 • • 發佈:2020-01-18
這篇文章主要介紹瞭如何通過python實現語音錄入識別,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
一、介紹
1.第一步錄音存入本地
2.呼叫百度語音識別sdk
注意點:百度語音識別對聲音源有要求,位元率必須是256kbps
二、程式碼
#安裝必要庫 pip install baidu-aip #百度sdk pip install pyaudio
import wave import pyaudio from aip import AipSpeech def record(): # 定義資料流塊 CHUNK = 1024 FORMAT = pyaudio.paInt16 # 想要百度識別,下面這兩引數必須這樣設定,使得位元率為256kbps CHANNELS = 1 RATE = 16000 # 錄音時間 RECORD_SECONDS = 8 # 要寫入的檔名 WAVE_OUTPUT_FILENAME = "output.wav" # 建立PyAudio物件 p = pyaudio.PyAudio() # 開啟資料流 stream = p.open(format=FORMAT,channels=CHANNELS,rate=RATE,input=True,frames_per_buffer=CHUNK) print("* recording") # 開始錄音 frames = [] for i in range(0,int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print("* done recording") # 停止資料流 stream.stop_stream() stream.close() # 關閉PyAudio p.terminate() # 寫入錄音檔案 wf = wave.open(WAVE_OUTPUT_FILENAME,'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() def ASR(): # 錄音 record() """ 你的 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() # 識別本地檔案 res=client.asr(get_file_content('output.wav'),'wav',16000,{ 'dev_pid': 1536,}) print(res) if __name__ == '__main__': ASR()
三、語音命令控制程式
import wave import pyaudio from aip import AipSpeech import win32api def record(): # 定義資料流塊 CHUNK = 1024 FORMAT = pyaudio.paInt16 # 想要百度識別,下面這兩引數必須這樣設定,使得位元率為256kbps CHANNELS = 1 RATE = 16000 # 錄音時間 RECORD_SECONDS = 8 # 要寫入的檔名 WAVE_OUTPUT_FILENAME = "output.wav" # 建立PyAudio物件 p = pyaudio.PyAudio() # 開啟資料流 stream = p.open(format=FORMAT,}) if not res.get("err_no"): return res.get("result")[0] return res.get("err_no") def control(order): # 命令對應的程式路徑 open_order={"開啟QQ":r"C:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe","開啟記事本":r"D:\Notepad++\notepad++.exe","開啟瀏覽器":r"C:\Users\ffm11\AppData\Roaming\360se6\Application\360se.exe"} res=open_order.get(order) if res: # 引數1:用於指定父視窗控制代碼。當函式呼叫過程出現錯誤時,它將作為Windows訊息視窗的父視窗 # 引數2:用於指定要進行的操作。 # “open”操作表示執行由lpFile引數指定的程式,或開啟由lpFile引數指定的檔案或資料夾; # “print”操作表示列印由lpFile引數指定的檔案; # “explore”操作表示瀏覽由lpFile引數指定的資料夾。 # 引數3:用於指定要開啟的檔名、要執行的程式檔名或要瀏覽的資料夾名。 # 引數4:若lpFile引數是一個可執行程式,則此引數指定命令列引數,否則此引數應為NULL. # 引數5:若lpFile引數是一個可執行程式,則此引數指定程式視窗的初始顯示方式,否則此引數應設定為0。 # 這個引數常用的常數: # SW_HIDE 隱藏視窗,活動狀態給令一個視窗 # SW_MINIMIZE 最小化視窗,活動狀態給令一個視窗 # SW_RESTORE 用原來的大小和位置顯示一個視窗,同時令其進入活動狀態 # SW_SHOW 用當前的大小和位置顯示一個視窗,同時令其進入活動狀態 # SW_SHOWMAXIMIZED 最大化視窗,並將其啟用 # SW_SHOWMINIMIZED 最小化視窗,並將其啟用 # SW_SHOWMINNOACTIVE 最小化一個視窗,同時不改變活動視窗 # SW_SHOWNA 用當前的大小和位置顯示一個視窗,不改變活動視窗 # SW_SHOWNOACTIVATE 用最近的大小和位置顯示一個視窗,同時不改變活動視窗 win32api.ShellExecute(0,'open',res,'',1) else: print("語音命令失敗") if __name__ == '__main__': order=ASR() control(order.rstrip("。"))
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。