python 音频转文字

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可能需要从官网下载,并加入系统环境变量。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值