语音识别是将人类语音转换为文本的技术,在现代应用中非常有用。本教程将介绍如何使用Python实现基本的AI语音识别功能。
一、文字转语音
#文字转语音
#安装第三方库 pip install pyttsx3
#导包 : import pyttsx3
import pyttsx3
#创建语音引擎
a1 = pyttsx3.init()
# #转换为语音
# a1.say ('大家好')
#保存音频到本地
a1.save_to_file(text='大家好', filename='1.mp3')
#执行语音(播放)
a1.runAndWait()
二、文本转语音
#文本转语音
import pyttsx3
a1 = 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 pyttsx3
a1 = 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/models
from 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_buffer
import 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)