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


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

    目录

    1. 安装需要的包

    2. 视频转音频

    3. 对音频进行切割

    4. 对视频进行切割

    5. 从音频中识别出文本

    5.1 使用离线方法

    5.2 使用在线方法

    5.3 两种方法比较

    6. 用到的包下载


    1. 安装需要的包

    1.1 安装SpeechRecognition包

    pip install SpeechRecognition

    1.2 安装 PockSphinx包

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

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

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

    执行本地安装

    下载语言包

    SpeechRecognition · PyPI

     

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

     

     

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

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

    1.3 安装moviepy

    pip install moviepy 

    1.4 安装pydub

    pip install pydub

    2. 视频转音频

    1. from moviepy.editor import AudioFileClip
    2. from moviepy.video.io.VideoFileClip import VideoFileClip
    3. from pydub import AudioSegment
    4. from pydub.utils import make_chunks
    5. import speech_recognition as sr
    6. # 导入视频,提取音频并保存
    7. def video_2_audio():
    8. # 导入视频
    9. one_audio_clip = AudioFileClip('D:/temp002/000.mp4')
    10. # 提取音频并保存
    11. one_audio_clip.write_audiofile('D:/temp002/000.wav')
    12. pass

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

    3. 对音频进行切割

    1. def segment_audio():
    2. pre_save_dir = r'D:/temp002/000_a/'
    3. audio_file = r'D:/temp002/000.wav'
    4. audio = AudioSegment.from_file(audio_file,'wav')
    5. size = 30000 # 切割的毫秒数
    6. chunks = make_chunks(audio,size) # 30s一个片段
    7. for i,chunk in enumerate(chunks):
    8. # chunk是切割好的文件
    9. chunk_name = "v_{0}.wav".format(i)
    10. print(chunk_name)
    11. chunk.export(pre_save_dir+chunk_name,format='wav')
    12. pass
    13. pass

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

     

     

    4. 对视频进行切割

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

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

     

    5. 从音频中识别出文本

    5.1 使用离线方法

    1. def voice_to_text_local():
    2. audio_file = 'D:/temp002/000/v_0.wav'
    3. r = sr.Recognizer()
    4. with sr.AudioFile(audio_file) as source:
    5. audio = r.record(source)
    6. res_txt = r.recognize_sphinx(audio,language='zh-CN')
    7. print(len(res_txt))
    8. print(res_txt)

    识别出的结果:

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

    结果非常糟糕。。。 

    5.2 使用在线方法

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

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

     填上ip和端口

    以下回归正题:

    1. def voice_to_text():
    2. audio_file = 'D:/temp002/000/v_0.wav'
    3. r = sr.Recognizer()
    4. with sr.AudioFile(audio_file) as source:
    5. audio = r.record(source)
    6. res_txt = r.recognize_google(audio,language='zh-cn')
    7. print(len(res_txt))
    8. print(res_txt)

    识别出的结果:

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

     还不错

    5.3 两种方法比较

    人工识别的结果:

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

    比较两种方法:

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

    6. 用到的包下载

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

  • 相关阅读:
    Bootstrap对段落和文本的设置(与段落-和文本相关的类)
    Maven配置单仓库与多仓库(Nexus)
    Java中Math.ceil()方法具有什么功能呢?
    vue.js毕业设计,基于vue.js前后端分离在线小说电子书阅读系统(H5移动项目) 开题报告
    react-antd项目,一个多tab页面,共用一个title相同的table表格,并且在切换tab时实现数据更新
    (附源码)ssm产品裂变管理系统 毕业设计 100953
    【Node.js】深度解析搭建后台服务器-http模块
    element-ui :封装el-input 遇到的问题
    C# Winform 自定义进度条ProgressBar
    深入理解synchronized关键字
  • 原文地址:https://blog.csdn.net/m0_37967652/article/details/125024203