python版本3.10.14 (最好大于3.8)
1,安装相关库
pip install SpeechRecognition # 自带google语言识别
pip install PyAudio
pip install ffmpeg
pip install pydub
pip install vosk # 亲测这个比google好用
pip install pocketsphinx # sphinx 一般
2,下载中文语音模型(sphinx和vosk都需要下载)
2.1 Sphinx 见链接,下载Mandarin下的压缩包。
解压至安装路径~\speech_recognition\pocketsphinx-data\下。
文件夹重命名为zh-CN。子文件/夹按下图重命名。
2.2 Vosk 见链接,下载自己所需要的模型,解压文件夹至当前项目目录,并重命名文件夹为model。
3,音频转文字
from pydub import AudioSegment
import speech_recognition as sr
# 将MP3文件加载为AudioSegment对象
audio = AudioSegment.from_mp3("day1.mp3")
# 转换为wav格式,因为SpeechRecognition库需要wav格式的音频
audio = audio.set_channels(1).set_frame_rate(16000)
#audio.export("audio.wav", format="wav") 此行代码适用于不用分割的音频。
# 分割音频为300秒一段,分段识别。
# 太长容易报错,据说该语音识别方法只适用1分钟内。
# 注意:开启科学上网。
segment_length = 300 * 1000 # 分割音频为300秒一段
for i, segment in enumerate(audio[::segment_length]):
segment_path = f"segment_{i}.wav"
segment.export(segment_path, format="wav")
# 初始化识别器
recognizer = sr.Recognizer()
# 读取音频文件
AudioFile = sr.AudioFile(segment_path)
try:
with AudioFile as source:
audio_data = recognizer.record(source)
# google自带,几乎无法识别音频。
# text = recognizer.recognize_google(audio_data, language='zh-CN')
# sphinx同上。
# text = recognizer.recognize_sphinx(audio_data, language='zh-CN')
# Vosk还行,下载的small模型都比前两个好。
text = recognizer.recognize_vosk(audio_data)
with open('segment'+str(i)+'out.txt', "w", encoding="utf-8") as text_file:
text_file.write(text)
except sr.UnknownValueError:
print("无法理解音频")
except sr.RequestError as e:
print(f"无法请求结果; {e}")
except sr.IncompleteRead as e:
print(f"读取音频文件时发生错误: {e}")
注意:如果from pydub import AudioSegment的时候出现warning,那么ffmpeg可能需要从官网下载,并加入系统环境变量。