語音識別是將人類語音轉換為文本的技術,在現代應用中非常有用。本教程將介紹如何使用Python實現基本的AI語音識別功能。
一、文字轉語音
#文字轉語音
#安裝第三方庫 pip install pyttsx3
#導包 : import pyttsx3import pyttsx3#創建語音引擎
a1 = pyttsx3.init()# #轉換為語音
# a1.say ('大家好')#保存音頻到本地
a1.save_to_file(text='大家好', filename='1.mp3')#執行語音(播放)
a1.runAndWait()
二、文本轉語音
#文本轉語音import pyttsx3a1 = pyttsx3.init() # 使用 init() 來初始化引擎# 獲取指定文本內容轉換語音
with open('1.txt', 'r', encoding='utf-8') as f:a2 = f.read()a1.say(a2) #播放
#a1.save_to_file(a2, filename='3.mp3') #保存本地
#a1.save_to_file(a2, filename=r"D:\桌面\6\2.mp3")#指定目錄保存
a1.runAndWait()
三、設置語速、音量
# 設置語速、音量import pyttsx3a1 = pyttsx3.init()# 設置語速(默認200)
a1.setProperty('rate', 200)
# 設置音量(1.0)
a1.setProperty('volume', 1)#a1.say("你好") #播放
a1.save_to_file("你好", '4.mp3') #保存本地
a1.runAndWait()
四、語音轉文字
語音模型下載網站:VOSK 模型
# 語音轉文字/語音識別
# 安裝三方庫(阿里云源):pip install vosk -i https://mirrors.aliyun.com/pypi/simple/
# 檢查安裝版本命令pip show vosk
# 導包:from vosk import Model, KaldiRecognizer
# 導包:import wave
# 導包:import json
# 語音識別模型下載:https://alphacephei.com/vosk/modelsfrom vosk import Model, KaldiRecognizer
import wave
import json# 加載語音模型'zh-2'為下載模型
a1 = Model('zh-2')
# 打開音頻文件
a2 = wave.open('1.mp3')
# 創建語音識別器 KaldiRecognizer(模型對象, 采樣率16000)
a3 = KaldiRecognizer(a1, 16000)
print('開始識別')
while True:# 每次讀取音頻文件多少幀(1秒=16000幀)a4 = a2.readframes(4000)# 如果讀取不到數據就退出循環if not a4:break# 傳入讀取數據進行識別a3.AcceptWaveform(a4)
# 識別器對象.FinalResult() 返回的是所有識別結果(json格式)
a5 = json.loads(a3.FinalResult())['text'].replace(' ', '')
print(a5)
五、實時語音識別為文字
# 實時語音識別
# 安裝三方庫(阿里源):pip install pyaudio -i https://mirrors.aliyun.com/pypi/simple/ (處理麥克風相關組件)
# 檢查pyaudio是否安裝成功
# python -c "import pyaudio; print('PyAudio 已安裝,版本:', pyaudio.__version__)"
# 導包:import pyaudio
# frames_per_bufferimport pyaudio
from vosk import Model, KaldiRecognizer
import json# 加載模型
a1 = Model('zh-2')
# 創建麥克風對象
p = pyaudio.PyAudio()
# 接收麥克風
a2 = p.open(# 16位深度音頻數據format=pyaudio.paInt16,# 聲道,單聲道channels=1,# 采樣率rate=16000,# 從麥克風獲取數據input=True,# 每次讀取數據塊大小frames_per_buffer=4000
)
# 創建語音識別器
a3 = KaldiRecognizer(a1, 16000)
print('開始實時識別')while True:# 從麥克風讀取數據a4 = a2.read(4000)# 如果讀取到數據if a3.AcceptWaveform(a4):# 實時輸出識別結果a5 = a3.Result()a6 = json.loads(a5)['text'].replace(' ', '')print(a6)