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

python_视频中语音识别转出文本_第1张图片

执行本地安装

python_视频中语音识别转出文本_第2张图片

下载语言包

SpeechRecognition · PyPI

 python_视频中语音识别转出文本_第3张图片

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

python_视频中语音识别转出文本_第4张图片

 python_视频中语音识别转出文本_第5张图片

 

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

python_视频中语音识别转出文本_第6张图片

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

python_视频中语音识别转出文本_第7张图片

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_视频中语音识别转出文本_第8张图片 

 

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_视频中语音识别转出文本_第9张图片 

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_视频中语音识别转出文本_第10张图片

 填上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

你可能感兴趣的:(python寻常使用,python,语音识别,开发语言)