语音识别是将人类语音转换为文本的技术,在现代应用中非常有用。本教程将介绍如何使用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)