26

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

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

4

8 回答 8

7

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

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

于 2012-09-02T21:38:23.100 回答
7

更新:这不再起作用

因为谷歌关闭了它的平台

--

你可以使用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
于 2013-05-14T19:33:45.870 回答
7

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
于 2014-06-23T17:05:21.683 回答
7

我知道这个问题很旧,但只适用于未来的人:

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

编辑:

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
于 2015-12-25T09:42:18.617 回答
6

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

于 2015-12-17T09:05:03.537 回答
4

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

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

于 2012-09-02T20:04:33.847 回答
0

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

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

如果您从模拟录音开始,这可能是将旧磁带或黑胶长播放记录转换为数字形式,或从旧录像带中提取音频的问题。最简单的方法是将源播放到计算机的音频输入插孔中,然后使用内置的硬件和软件将原始线性脉冲编码调制 (LPCM) 数字信号捕获到文件中。你提到的 Audacity 是一个很好的工具,甚至更多。

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

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

于 2020-01-06T17:37:23.090 回答
0
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.

于 2021-01-30T12:51:50.880 回答