语音识别和 python 入门

Posted

技术标签:

【中文标题】语音识别和 python 入门【英文标题】:Getting started with speech recognition and python 【发布时间】:2012-08-27 16:08:36 【问题描述】:

我想知道从哪里开始使用语音识别。不是图书馆或任何相当“黑盒”的东西,而是我想知道我可以在哪里实际制作一个简单的语音识别脚本。我做了一些搜索,发现并不多,但我看到的是有“声音”或音节的字典可以拼凑成文本。所以基本上我的问题是我可以从哪里开始?

另外,由于这有点乐观,我也可以(目前)在我的程序中使用一个库。我看到一些文本库和 API 的语音只吐出一个结果。这没关系,但这将是不现实的。我当前的程序已经检查了输入的任何文本的语法和所有内容,所以如果我要说,前十名来自语音到文本软件的结果,而不是它可以检查每一个并排除任何没有意义的内容.

【问题讨论】:

【参考方案1】:

更新:这不再起作用了

因为谷歌关闭了它的平台

--

你可以使用https://pypi.python.org/pypi/pygsr

$> pip install pygsr

示例用法:

from pygsr import Pygsr
speech = Pygsr()
# duration in seconds
speech.record(3)
# select the language
phrase, complete_response = speech.speech_to_text('en_US')

print phrase

【讨论】:

我在安装上面链接中给出的软件包后尝试了它,它给了我错误 root@ubuntu:/home/mp/n# python pygsr.py Traceback(最近一次调用最后):文件“pygsr .py",第 1 行,在 中 from pygsr import Pygsr File "/home/mp/n/pygsr.py",第 1 行,在 from pygsr import Pygsr ImportError: cannot import name Pygsr 现在 google 网址 http://www.google.com/speech-api/v1/recognize?lang=%s 不起作用。给出 404 响应。 -1 因为它只是谷歌“黑匣子”的包装。不是可以用来查看语音识别工作原理的工具包。【参考方案2】:

如果您真的想从头开始理解语音识别,请寻找一个好的 Python 信号处理包,然后独立地阅读该软件的语音识别。

但语音识别是一个极其复杂的问题(主要是因为我们说话时声音会以各种方式相互作用)。即使您从可以获得的最好的语音识别库开始,您也绝不会发现自己无事可做。

【讨论】:

【参考方案3】:

Pocketsphinx 也是一个不错的选择。通过 SWIG 提供的 Python 绑定可以轻松集成到脚本中。

例如:

from os import environ, path
from itertools import izip

from pocketsphinx import *
from sphinxbase import *

MODELDIR = "../../../model"
DATADIR = "../../../test/data"

# Create a decoder with certain model
config = Decoder.default_config()
config.set_string('-hmm', path.join(MODELDIR, 'hmm/en_US/hub4wsj_sc_8k'))
config.set_string('-lm', path.join(MODELDIR, 'lm/en_US/hub4.5000.DMP'))
config.set_string('-dict', path.join(MODELDIR, 'lm/en_US/hub4.5000.dic'))
decoder = Decoder(config)

# Decode static file.
decoder.decode_raw(open(path.join(DATADIR, 'goforward.raw'), 'rb'))

# Retrieve hypothesis.
hypothesis = decoder.hyp()
print 'Best hypothesis: ', hypothesis.best_score, hypothesis.hypstr

print 'Best hypothesis segments: ', [seg.word for seg in decoder.seg()]

# Access N best decodings.
print 'Best 10 hypothesis: '
for best, i in izip(decoder.nbest(), range(10)):
    print best.hyp().best_score, best.hyp().hypstr

# Decode streaming data.
decoder = Decoder(config)
decoder.start_utt('goforward')
stream = open(path.join(DATADIR, 'goforward.raw'), 'rb')
while True:
    buf = stream.read(1024)
    if buf:
        decoder.process_raw(buf, False, False)
    else:
        break
decoder.end_utt()
print 'Stream decoding result:', decoder.hyp().hypstr

【讨论】:

文件“source_file.py”,第 40 行 break SyntaxError: 'break' outside loop 可能是缩进 pb,确实修复了 while 循环 欣赏代码;只需要研究一下。那么,所有这些音频都会去 Google 服务器进行处理吗? 不,不是这个。它使用的是OSS的pocketsphinx软件。您应该查看他们的网站:github.com/cmusphinx/pocketsphinx 或 cmusphinx.sourceforge.net/【参考方案4】:

我知道这个问题很老,但只针对未来的人:

我使用speech_recognition-Module,我喜欢它。 唯一的是,它需要互联网,因为它使用谷歌来识别语音。但这在大多数情况下应该不是问题。 识别工作几乎完美。

编辑:

speech_recognition 包不仅可以使用 google 进行翻译,还可以使用 CMUsphinx(允许离线识别)等。唯一的区别是识别命令的细微变化:

https://pypi.python.org/pypi/SpeechRecognition/

这是一个小代码示例:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:                # use the default microphone as the audio source
    audio = r.listen(source)                   # listen for the first phrase and extract it into audio data

try:
    print("You said " + r.recognize_google(audio))    # recognize speech using Google Speech Recognition - ONLINE
    print("You said " + r.recognize_sphinx(audio))    # recognize speech using CMUsphinx Speech Recognition - OFFLINE
except LookupError:                            # speech is unintelligible
    print("Could not understand audio")

只有一件事不适合我:在无限循环中聆听。几分钟后挂断。 (它没有崩溃,只是没有响应。)

编辑: 如果你想使用没有无限循环的麦克风,你应该指定录音长度。 示例代码:

import speech_recognition as sr

r = sr.Recognizer()
with sr.Microphone() as source:
    print("Speak:")
    audio = r.listen(source, None, "time_to_record")  # recording

【讨论】:

这似乎对我不起作用。我一直在说话,等待它吐出结果。但是什么都没有! 嗯,尝试让它无限循环监听。 (Try-Except-Block 进入while 1-loop。) TypeError: 函数只需要 2 个参数(给定 3 个)我在audio = r.listen(source)【参考方案5】:

对于那些想深入了解 Python 语音识别主题的人,这里有一些链接:

http://www.slideshare.net/mchua/sigproc-selfstudy-17323823 - Python 中的信号处理,包括最有趣的音频信号。

【讨论】:

但这与语音识别本身没有任何关系。幻灯片包含一般音频处理 - 但与识别无关 @lonesword 问题是关于入门的,信号处理是理解语音和声音处理的先决条件。【参考方案6】:

Dragonfly 为 Windows 上的语音识别提供了一个干净的框架。检查他们的Documentation 例如用法。由于您不是在寻找 Dragonfly 提供的大规模功能,您可能想看看不再维护的 PySpeech 库。

他们的源代码看起来很容易理解,也许这就是你想首先看的内容

【讨论】:

我现在正在使用 Windows 64 位,所以我无法工作,不过谢谢【参考方案7】:

这可能是最重要的学习内容:基本概念 信号处理,特别是数字信号处理 (DSP)。 对抽象概念的一点理解将为您做好准备 scipy.signal 中令人眼花缭乱的工具集。

首先是模数转换 (ADC)。这真的在域中 音频工程的,现在,是录音过程的一部分, 即使您所做的只是将麦克风连接到您的计算机。

如果您从模拟录音开始,这可能是一个问题 将旧磁带或黑胶长播放唱片转换为数字形式, 或从旧录像带中提取音频。最简单的就是玩 输入电脑的音频输入插孔并使用内置的 用于捕获原始线性脉冲编码调制的硬件和软件 (LPCM) 数字信号到文件。你提到的 Audacity 是一个 很好的工具,等等。

傅立叶变换是您的朋友。在数据科学术语中,它是 非常适合特征提取和特征空间降维, 特别是如果您正在寻找跨越声音变化的功能 在整个样本的过程中。这里没有解释的地方,但是 时域中的原始数据对于机器学习来说要困难得多 比原始数据在频域中处理的算法。

特别是您将使用快速傅里叶变换 (FFT),这是一种 离散傅里叶变换 (DFT) 的非常有效的形式。如今 FFT 通常在 DSP 硬件中完成。

【讨论】:

【参考方案8】:
import speech_recognition as SRG 
import time
store = SRG.Recognizer()
with SRG.Microphone() as s:
     
    print("Speak...")
     
    audio_input = store.record(s, duration=7)
    print("Recording time:",time.strftime("%I:%M:%S"))
    
    try:
        text_output = store.recognize_google(audio_input)
        print("Text converted from audio:\n")
        print(text_output)
        print("Finished!!")
 
        print("Execution time:",time.strftime("%I:%M:%S"))
    except:
           print("Couldn't process the audio input.")

这应该可行。您会将默认麦克风的音频输入保存到 text_output 变量中的文本格式中。 您可以查看此链接了解更多信息:https://www.journaldev.com/37873/python-speech-to-text-speechrecognition

我们基本上做的是首先从麦克风录制音频,然后使用该音频作为语音识别器的输入。 这里唯一需要的是您需要有效的互联网连接以及这两个必需的 Python 库 speech_recognitionpyaudio

【讨论】:

以上是关于语音识别和 python 入门的主要内容,如果未能解决你的问题,请参考以下文章

CMU Sphinx 语音识别入门:构建拼音字典

语音识别 从入门到进阶 一 文末附项目/源码

语音识别 从入门到进阶 一 文末附项目/源码

人工智能入门:语音识别基本模型

入门NLP实现语音识别和语音合成,用这个开源工具SoEasy | 英伟达NLP公开课

语音识别学习资料入门整理