一、功能概述
實現語音為文字,可以擴展到多種場景進行工作,這里只實現其基本的語言接收及轉換功能。
在語言錄入時,根據語言內容的多少與停頓時間,自動截取音頻進行轉換。
工作示例:
二、軟件環境
-
操作系統: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=0
while 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 += 1
elif i == INTERVAL*2:
self.__save_wave_file('00.wav',buf) # 保存測試音頻
err,a = tr.get_word('00.wav') # 得到測試音頻是否有效
if err == 0:
break
i = 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 與 錯誤內容
源碼
附:我又回來了,這個是不是大項目,正在寫,敬請期待!寒假會更一些學習筆記,一起加油
以上