一、功能概述
實現語音為文字,可以擴展到多種場景進行工作,這里只實現其基本的語言接收及轉換功能。
在語言錄入時,根據語言內容的多少與停頓時間,自動截取音頻進行轉換。
工作示例:
二、軟件環境
- 操作系統:win10
- 語言:Python 版本:3.6.0
Python庫:AipSpeech(百度語音識別SDK客戶端),wave,PyAudio,paInt16
###Python庫安裝:除百度為:pip install baidu-aip,其他直接 pip install *(庫名) 即可。
三、原理概述
利用wave,PyAudio搭建一個wav格式的簡易錄音機,基于百度API進行wav格式的音頻轉文本。
- 簡易錄音機類(WWAV)有__save_wave_file音頻文件保存方法與my_record音頻錄制方法。在錄制音頻的方法中,加入了有效音頻測試的代碼,可以測試一小段時間內是否有有效音頻輸入,否則退出音頻錄制。
- 轉換類(Translation)則為__get_file_content方法與get_word音頻轉換主方法。
四、核心代碼
my_record音頻錄制方法(WWAV類)
def my_record(self,TIME = 60,INTERVAL = 5):'''錄制并保存音頻文件,TIME錄制時間,INTERVAL測試間隔'''pa=PyAudio()tr = Translation()stream=pa.open(format = paInt16,channels=self.__channels,rate=self.__framerate,input=True,frames_per_buffer=self.__NUM_SAMPLES)my_buf=[] # 主音頻源buf=[] # 測試音頻源i=0while i < TIME*2: #控制錄音時間string_audio_data = stream.read(self.__NUM_SAMPLES) # 獲取音頻片段my_buf.append(string_audio_data)if i < INTERVAL*2:buf.append(string_audio_data)i += 1elif i == INTERVAL*2:self.__save_wave_file('00.wav',buf) # 保存測試音頻err,a = tr.get_word('00.wav') # 得到測試音頻是否有效if err == 0:breaki = 0 # 初始化buf = [] # 同上print('.',end = ' ')self.__save_wave_file('01.wav',my_buf)stream.close()
get_word音頻轉換方法(Translation類)
def get_word(self,filePath):'''音頻轉文字,參數filePath為wav音頻地址,返回雙值:狀態(1為轉換成功)及轉換后文本或錯誤信息'''word = self.__client.asr(self.__get_file_content(filePath),'wav',8000,{'lan': 'zh'}) # 參數:語音對象,文件格式,采樣率,語種類型if word['err_no'] == 0: # 錯誤值為0(即正確)return 1,word['result'][0] # 返回 1 與 文本信息else:return 0,word['err_no'] # 否則返回 0 與 錯誤內容
源碼
GitHub地址
附:我又回來了,這個是不是大項目,正在寫,敬請期待!寒假會更一些學習筆記,一起加油
以上