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

Posted 程序猿与金融与科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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. 视频转音频

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秒的时长进行切割

 

 

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秒

 

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

 填上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 中使用 win32com.client 文本到语音/语音识别

【中文标题】在 Python 中使用 win32com.client 文本到语音/语音识别【英文标题】:Usage of win32com.client text to speech/speech recognition in Python 【发布时间】:2012-08-20 01:05:38 【问题描述】:

所以我将文本转为语音部分,例如:

from win32com.client import constants
import win32com.client
import pythoncom
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak("message")

但我不知道该怎么做是使用上述系统进行语音识别(如果这甚至有语音识别)。更具体地说,文本系统的口头替代

variable = string(input("Question")).

我需要使用它来构建一个系统,该系统将解析我的语音,然后使用当前关键字来调用不同的函数。确实,我需要这样的语音识别功能:

WORD_LIST_ONE = ('term', 'term'...)
variable = string(input("Question?"))
if variable in WORD_LIST_ONE:
    function()

所以基本上,我用什么来解析用户语音? 另外,如果这个系统不包括语音识别,请指点我。

谢谢

【问题讨论】:

【参考方案1】:

看看https://***.com/a/6351055/90236。你没有说你运行的是什么操作系统,但 Windows 7 和 Vista 都带有完整的语音识别引擎。对于 Microsoft 的 Windows 服务器,您可以下载免费的服务器语音引擎,请参阅http://www.microsoft.com/en-us/download/details.aspx?id=27226。

还有一个 Python 模块,我看到人们提到它可能会对您有所帮助。见http://code.google.com/p/pyspeech/

如果您使用的是 SAPI API,您正在访问 Microsoft 语音的 C++/COM 接口。见http://msdn.microsoft.com/en-us/library/ms723627(v=vs.85).aspx。

如果您可以访问 .NET 接口 (System.Speech),您会发现会更容易。见http://msdn.microsoft.com/en-us/library/hh361625和http://msdn.microsoft.com/en-us/magazine/cc163663.aspx

【讨论】:

我会问如何让 pyspeech 工作,但我不会有两个原因: 1. 我认为我们不应该在 cmets 中提出新问题。 2. 我有一个关于该主题的现有问题。此外,你会得到正确的答案。

以上是关于python_视频中语音识别转出文本的主要内容,如果未能解决你的问题,请参考以下文章

Python调用百度接口(情感倾向分析)和讯飞接口(语音识别关键词提取)处理音频文件

用Python教你微信防撤回(文本图片语音视频名片等...)

Python实力操作-网页正文转换语音文件

如何将视频中的语音转成文字

Python使用Speech_Recognition实现普通话识别

语音识别后控制