python_视频中语音识别转出文本

注意:没有“stepladder”的同学建议不要看啦

目录

1. 安装需要的包

1.1 安装SpeechRecognition包

pip install SpeechRecognition

1.2 安装 PockSphinx包

在线装总是失败,采用本地安装

https://www.lfd.uci.edu/~gohlke/pythonlibs/#pocketsphinx

本机该项目是python3.7的环境所以选择37

python_视频中语音识别转出文本

执行本地安装

python_视频中语音识别转出文本

下载语言包

SpeechRecognition · PyPI

 python_视频中语音识别转出文本

 speech_recognition/pocketsphinx.rst at master · Uberi/speech_recognition · GitHub

python_视频中语音识别转出文本

 python_视频中语音识别转出文本

 python_视频中语音识别转出文本

 将下载后的文件复制到pocketsphinx的语言包目录下

python_视频中语音识别转出文本

 解压后如上图,将这个zh-CN文件夹复制到你自己python环境所在的目录下

python_视频中语音识别转出文本

1.3 安装moviepy

pip install moviepy 

1.4 安装pydub

pip install pydub

2. 视频转音频

from moviepy.editor import AudioFileClip
from moviepy.video.io.VideoFileClip import VideoFileClip
from pydub import AudioSegment
from pydub.utils import make_chunks
import speech_recognition as sr

# 导入视频,提取音频并保存
def video_2_audio():
    # 导入视频
    one_audio_clip = AudioFileClip('D:/temp002/000.mp4')
    # 提取音频并保存
    one_audio_clip.write_audiofile('D:/temp002/000.wav')
    pass

本例中运行的000.mp4文件大约有35分钟,这个提取音频的过程挺慢的,用了好几分钟,为便于甄别最终效果,我对原始文件进行了切割,只对某一部分做处理 

3. 对音频进行切割

def segment_audio():
    pre_save_dir = r'D:/temp002/000_a/'
    audio_file = r'D:/temp002/000.wav'
    audio = AudioSegment.from_file(audio_file,'wav')
    size = 30000 # 切割的毫秒数

    chunks = make_chunks(audio,size) # 30s一个片段

    for i,chunk in enumerate(chunks):
        # chunk是切割好的文件
        chunk_name = "v_{0}.wav".format(i)
        print(chunk_name)
        chunk.export(pre_save_dir+chunk_name,format='wav')
        pass
    pass

将音频文件按30秒的时长进行切割

python_视频中语音识别转出文本 

 

4. 对视频进行切割

# 切割视频
def segment_video():
    pre_save_dir = r'D:/temp002/000_v/'
    video_file = r'D:/temp002/000.mp4'
    source_video = VideoFileClip(video_file)
    video = source_video.subclip(0,30)
    video.write_videofile(pre_save_dir+'0_v.mp4')
    pass

视频切割耗费的时间比较长,我只切割出前30秒

python_视频中语音识别转出文本 

5. 从音频中识别出文本

5.1 使用离线方法

def voice_to_text_local():
    audio_file = 'D:/temp002/000/v_0.wav'
    r = sr.Recognizer()
    with sr.AudioFile(audio_file) as source:
        audio = r.record(source)

    res_txt = r.recognize_sphinx(audio,language='zh-CN')
    print(len(res_txt))
    print(res_txt)

识别出的结果:

长度:241
地 调 降 耗 这里是 独裁 堡 市 选出 本期 士兵 是 中国 版 拉 纽 股 复 牌 系列 的 第四 期 市 地 县 也 使我们 中国 上市 公司 里 涨幅 最大 的 一批 公司 为 家 乐 福 看 他们 上市 以来 的 股价 走势 和 经济部 的 最终 目的是 在 邵 氏 公司 的 年报 里 寻找 确定 新的 投资 机会 本期 我们 付款 的 公司 说 它 称为 是 我们 先 看 上海 同 为 四 上司 以来 的 股价 走势 泰国 卫生 二零零零年 在 儿孙 交 所 上市

结果非常糟糕。。。 

5.2 使用在线方法

附加说明pycharm设置代理ip方法

File->Settings->System Settings->Http Proxy

python_视频中语音识别转出文本

 填上ip和端口

以下回归正题:

def voice_to_text():
    audio_file = 'D:/temp002/000/v_0.wav'
    r = sr.Recognizer()
    with sr.AudioFile(audio_file) as source:
        audio = r.record(source)

    res_txt = r.recognize_google(audio,language='zh-cn')
    print(len(res_txt))
    print(res_txt)

识别出的结果:

长度:149
大家好这里是独裁暴雪选股本期视频是中国百大牛股护盘系列的第4集这个系列是以我们中国上市公司里涨幅最大的一批公司为样本复盘他们上市以来的股价走势和经济路到最终的目的是在上市公司的年报里寻找确定性的投资机会本期我们付款的公司是海康威视我们先看一下海康威视上市以来的股价走势排行为是2010年在深交所上市

 还不错

5.3 两种方法比较

人工识别的结果:

大家好这里是读财报学选股本期视频是中国百大牛股复盘系列的第4集这个系列是以我们中国上市公司里涨幅最大的一批公司为样本复盘他们上市以来的股价走势和经济情况,最终的目的是在上市公司的年报里寻找确定性的投资机会,本期我们复盘的公司是海康威视我们先看一下海康威视上市以来的股价走势,海康威视在2010年在深交所上市

比较两种方法:

本地方法获得的结果基本不可用;在线的方法没有出太多差错

6. 用到的包下载

链接:https://pan.baidu.com/s/1tDO3mNAqraBpbSnjqv6idQ 
提取码:zpjk

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
上一篇 2022年5月30日 上午10:54
下一篇 2022年5月30日 上午10:56

相关推荐

本站注重文章个人版权,不会主动收集付费或者带有商业版权的文章,如果出现侵权情况只可能是作者后期更改了版权声明,如果出现这种情况请主动联系我们,我们看到会在第一时间删除!本站专注于人工智能高质量优质文章收集,方便各位学者快速找到学习资源,本站收集的文章都会附上文章出处,如果不愿意分享到本平台,我们会第一时间删除!