用于执行语音识别的库,支持多个引擎和 API,在线和离线。
2022-02-09 更新:大家好!这个项目最初是一个技术演示,但现在它需要更多的时间来跟上所有的 PR 和问题。因此,我想向合作者发出公开邀请- 如果您有兴趣,请联系 [email protected]!
语音识别引擎/API 支持:
快速入门: pip install SpeechRecognition
。有关更多详细信息,请参阅“安装”部分。
要快速尝试,请在安装后运行python -m speech_recognition
。
项目链接:
图书馆参考记录了图书馆中每个可公开访问的对象。该文档也包含在reference/library-reference.rst
下。
有关安装语言、编译 PocketSphinx 以及从在线资源构建语言包的信息,请参阅使用 PocketSphinx 的注意事项。该文档也包含在reference/pocketsphinx.rst
下。
您必须安装 Vosk 模型才能使用 Vosk。这里有可用的模型。您必须将它们放在项目的模型文件夹中,例如“your-project-folder/models/your-vosk-model”
请参阅存储库根目录中的examples/
目录以获取使用示例:
recognizer_instance.energy_threshold
)首先,确保您满足“要求”部分中列出的所有要求。
安装它的最简单方法是使用pip install SpeechRecognition
。
否则,从 PyPI 下载源代码发行版,并解压存档。
在该文件夹中,运行python setup.py install
。
要使用该库的所有功能,您应该:
Microphone
时才需要)recognizer_instance.recognize_sphinx
时才需要)recognizer_instance.recognize_google_cloud
)recognizer_instance.recognize_vosk
时才需要)recognizer_instance.recognize_whisper
时才需要)recognizer_instance.recognize_openai
时才需要)recognizer_instance.recognize_groq
时才需要)以下要求是可选的,但在某些情况下可以改进或扩展功能:
以下部分将详细介绍每项要求。
第一个软件要求是 Python 3.9+。这是使用该库所必需的。
当且仅当您想使用麦克风输入( Microphone
)时才需要 PyAudio。需要 PyAudio 版本 0.2.11+,因为早期版本在某些情况下从麦克风录制时存在已知的内存管理错误。
如果未安装,库中的所有内容仍然可以工作,除了尝试实例化Microphone
对象会引发AttributeError
。
PyAudio网站上的安装说明相当不错——为了方便起见,总结如下:
pip install SpeechRecognition[audio]
。sudo apt-get install python-pyaudio python3-pyaudio
。sudo apt-get install portaudio19-dev python-all-dev python3-all-dev && sudo pip install SpeechRecognition[audio]
(如果有,请将pip
替换为pip3
使用Python 3)。brew install portaudio
。然后,使用 Pip 安装 PyAudio: pip install SpeechRecognition[audio]
。portaudio19-dev
和python-all-dev
(如果使用 Python 3,则安装python3-all-dev
)包(或其最接近的等效项),然后使用 PyAudio 进行安装使用 Pip: pip install SpeechRecognition[audio]
(如果使用 Python 3,请将pip
替换为pip3
)。为方便起见,在存储库根目录的third-party/
目录下包含了 Windows 和 Linux 上常见 64 位 Python 版本的 PyAudio 轮包。要安装,只需在存储库根目录中运行pip install wheel
,然后运行pip install ./third-party/WHEEL_FILENAME
(如果使用 Python 3,请将pip
替换为pip3
)。
当且仅当您想使用 Sphinx 识别器( recognizer_instance.recognize_sphinx
) 时,才需要 PocketSphinx-Python。
为了方便起见,在third-party/
目录下包含了适用于 Windows 上的 64 位 Python 3.4 和 3.5 的 PocketSphinx-Python 轮包。要安装,只需在 SpeechRecognition 文件夹中运行pip install wheel
,然后运行pip install ./third-party/WHEEL_FILENAME
(如果使用 Python 3,请将pip
替换为pip3
)。
在 Linux 和其他 POSIX 系统(例如 OS X)上,运行pip install SpeechRecognition[pocketsphinx]
。请按照使用 PocketSphinx 的注意事项中的“从源代码构建 PocketSphinx-Python”下的说明进行安装说明。
请注意,大多数软件包存储库中提供的版本都已过时,并且无法与捆绑的语言数据一起使用。建议使用捆绑的轮子包或从源代码构建。
有关安装语言、编译 PocketSphinx 以及从在线资源构建语言包的信息,请参阅使用 PocketSphinx 的注意事项。该文档也包含在reference/pocketsphinx.rst
下。
当且仅当您想要使用 Vosk 识别器( recognizer_instance.recognize_vosk
) 时,才需要 Vosk API。
您可以使用python3 -m pip install vosk
安装它。
您还必须安装 Vosk 模型:
这里有可供下载的模型。您必须将它们放在项目的模型文件夹中,例如“your-project-folder/models/your-vosk-model”
当且仅当您想要使用 Google Cloud Speech API ( recognizer_instance.recognize_google_cloud
) 时,才需要适用于 Python 的 Google Cloud Speech 库。
如果未安装,库中的所有内容仍然可以工作,除了调用recognizer_instance.recognize_google_cloud
会引发RequestError
。
根据官方安装说明,推荐使用 Pip 安装:执行pip install google-cloud-speech
(如果使用 Python 3,请将pip
替换为pip3
)。
需要使用 FLAC 编码器对音频数据进行编码才能发送到 API。如果使用 Windows(x86 或 x86-64)、OS X(仅限 Intel Mac、OS X 10.6 或更高版本)或 Linux(x86 或 x86-64),则它已与此库捆绑在一起 - 您无需安装任何内容。
否则,请确保您拥有flac
命令行工具,该工具通常可以通过系统包管理器获得。例如,在 Debian 衍生品上通常是sudo apt-get install flac
,或者在带有 Homebrew 的 OS X 上是brew install flac
。
当且仅当您想使用耳语( recognizer_instance.recognize_whisper
)时才需要耳语。
您可以使用python3 -m pip install SpeechRecognition[whisper-local]
安装它。
当且仅当您想使用 OpenAI Whisper API ( recognizer_instance.recognize_openai
) 时,才需要 openai 库。
您可以使用python3 -m pip install SpeechRecognition[openai]
安装它。
请在调用recognizer_instance.recognize_openai
之前设置环境变量OPENAI_API_KEY
。
当且仅当您想使用 Groq Whisper API ( recognizer_instance.recognize_groq
) 时,才需要 groq 库。
您可以使用python3 -m pip install SpeechRecognition[groq]
安装它。
请在调用recognizer_instance.recognize_groq
之前设置环境变量GROQ_API_KEY
。
尝试增加recognizer_instance.energy_threshold
属性。这基本上就是识别器对识别何时开始的敏感程度。值越高意味着灵敏度越低,如果您在吵闹的房间里,这会很有用。
该值完全取决于您的麦克风或音频数据。没有一刀切的值,但好的值通常在 50 到 4000 之间。
另外,请检查您的麦克风音量设置。如果太敏感,麦克风可能会拾取大量环境噪音。如果太不灵敏,麦克风可能会将语音视为噪声而拒绝。
recognizer_instance.energy_threshold
属性可能设置为一开始就太高的值,然后通过动态能量阈值调整自动调低。在达到良好水平之前,能量阈值非常高,以至于语音仅被视为环境噪声。
解决方案是降低这个阈值,或者预先调用recognizer_instance.adjust_for_ambient_noise
,这会自动将阈值设置为一个好的值。
尝试将识别语言设置为您的语言/方言。为此,请参阅recognizer_instance.recognize_sphinx
、 recognizer_instance.recognize_google
、 recognizer_instance.recognize_wit
、 recognizer_instance.recognize_bing
、 recognizer_instance.recognize_api
、 recognizer_instance.recognize_houndify
和recognizer_instance.recognize_ibm
的文档。
例如,如果您的语言/方言是英式英语,则最好使用"en-GB"
作为语言,而不是"en-US"
。
recognizer_instance.listen
上;具体来说,当它调用Microphone.MicrophoneStream.read
时。当您使用 Raspberry Pi 板时,通常会发生这种情况,该板本身不具有音频输入功能。这会导致 PyAudio 使用的默认麦克风在我们尝试读取它时简单地阻塞。如果您碰巧使用的是 Raspberry Pi,则需要 USB 声卡(或 USB 麦克风)。
执行此操作后,将Microphone()
的所有实例更改为Microphone(device_index=MICROPHONE_INDEX)
,其中MICROPHONE_INDEX
是麦克风的硬件特定索引。
要确定MICROPHONE_INDEX
的值应该是什么,请运行以下代码:
import speech_recognition as sr
for index , name in enumerate ( sr . Microphone . list_microphone_names ()):
print ( "Microphone with name " {1} " found for `Microphone(device_index={0})`" . format ( index , name ))
这将打印出如下内容:
为“麦克风(device_index=0)”找到名称为“HDA Intel HDMI: 0 (hw:0,3)”的麦克风 为“麦克风(device_index=1)”找到名称为“HDA Intel HDMI: 1 (hw:0,7)”的麦克风 为“麦克风(device_index=2)”找到名称为“HDA Intel HDMI: 2 (hw:0,8)”的麦克风 为“麦克风(device_index=3)”找到了名为“Blue Snowball: USB Audio (hw:1,0)”的麦克风 找到“麦克风(device_index=4)”的名称为“hdmi”的麦克风 找到“麦克风(device_index=5)”的名称为“pulse”的麦克风 为“麦克风(device_index=6)”找到了名称为“default”的麦克风
现在,要使用 Snowball 麦克风,您需要将Microphone()
更改为Microphone(device_index=3)
。
Microphone()
会出现错误IOError: No Default Input Device Available
。正如错误所示,程序不知道要使用哪个麦克风。
要继续,请使用Microphone(device_index=MICROPHONE_INDEX, ...)
而不是Microphone(...)
,或在操作系统中设置默认麦克风。您可以使用上面的故障排除条目中的代码获取MICROPHONE_INDEX
的可能值。
从 PyInstaller 版本 3.0 开始,开箱即用地支持 SpeechRecognition。如果您在使用 PyInstaller 编译程序时遇到奇怪的问题,只需更新 PyInstaller 即可。
您可以通过运行pip install --upgrade pyinstaller
轻松完成此操作。
“bt_audio_service_open”错误意味着您有一个蓝牙音频设备,但由于当前未连接物理设备,我们实际上无法使用它 - 如果您没有使用蓝牙麦克风,那么可以安全地忽略它。如果是,并且音频无法正常工作,请仔细检查以确保您的麦克风确实已连接。似乎没有一种简单的方法可以禁用这些消息。
对于“ALSA lib [...] Unknown PCM”形式的错误,请参阅此 StackOverflow 答案。基本上,要消除“Unknown PCM cards.pcm.rear”形式的错误,只需在/usr/share/alsa/alsa.conf
、 ~/.asoundrc
和 中注释掉pcm.rear cards.pcm.rear
即可/etc/asound.conf
。
对于“jack 服务器未运行或无法启动”或“connect(2) 调用 /dev/shm/jack-1000/default/jack_0 失败(err=没有此类文件或目录)”或“尝试连接到服务器失败”,这些是由 ALSA 尝试连接到 JACK 引起的,可以安全地忽略。除了在启动麦克风时完全禁用打印之外,我目前不知道有任何简单的方法可以关闭这些消息。
ChildProcessError
消息,指出它无法找到系统 FLAC 转换器,即使它已安装。直接从源代码安装适用于 OS X 的 FLAC 将不起作用,因为它无法将可执行文件正确添加到搜索路径。
使用 Homebrew 安装 FLAC 可确保搜索路径正确更新。首先,确保您有 Homebrew,然后运行brew install flac
来安装必要的文件。
要破解此库,首先请确保您满足“要求”部分中列出的所有要求。
speech_recognition/__init__.py
中。examples/
目录下,演示脚本位于speech_recognition/__main__.py
中。speech_recognition/
目录中。reference/
目录中找到。third-party/
目录中。要在本地安装/重新安装库,请在项目根目录中运行python -m pip install -e .[dev]
。
在发布之前,版本号会在README.rst
和speech_recognition/__init__.py
中发生变化。然后使用git config gpg.program gpg2 && git config user.signingkey DB45F6C431DE7C2DCD99FF7904882258A4063489 && git tag -s VERSION_GOES_HERE -m "Version VERSION_GOES_HERE"
创建版本标签。
发布是通过运行make-release.sh VERSION_GOES_HERE
来构建 Python 源包、对其进行签名并将其上传到 PyPI 来完成的。
运行所有测试:
python -m unittest discover --verbose
要运行静态分析:
python -m flake8 --ignore=E501,E701,W503 speech_recognition tests examples setup.py
为了确保 RST 格式良好:
python -m rstcheck README.rst reference/ * .rst
每次推送时,测试也会由 GitHub Actions 自动完成。
包含的flac-win32
可执行文件是官方 FLAC 1.3.2 32 位 Windows 二进制文件。
随附的flac-linux-x86
和flac-linux-x86_64
可执行文件是根据 FLAC 1.3.2 源代码与 Manylinux 构建的,以确保它与各种发行版兼容。
构建的 FLAC 可执行文件应该是可逐位重现的。要重建它们,请在类似 Debian 的系统上的项目目录中运行以下命令:
# download and extract the FLAC source code
cd third-party
sudo apt-get install --yes docker.io
# build FLAC inside the Manylinux i686 Docker image
tar xf flac-1.3.2.tar.xz
sudo docker run --tty --interactive --rm --volume " $( pwd ) :/root " quay.io/pypa/manylinux1_i686:latest bash
cd /root/flac-1.3.2
./configure LDFLAGS=-static # compiler flags to make a static build
make
exit
cp flac-1.3.2/src/flac/flac ../speech_recognition/flac-linux-x86 && sudo rm -rf flac-1.3.2/
# build FLAC inside the Manylinux x86_64 Docker image
tar xf flac-1.3.2.tar.xz
sudo docker run --tty --interactive --rm --volume " $( pwd ) :/root " quay.io/pypa/manylinux1_x86_64:latest bash
cd /root/flac-1.3.2
./configure LDFLAGS=-static # compiler flags to make a static build
make
exit
cp flac-1.3.2/src/flac/flac ../speech_recognition/flac-linux-x86_64 && sudo rm -r flac-1.3.2/
包含的flac-mac
可执行文件是从 xACT 2.39 中提取的,xACT 2.39 是 FLAC 1.3.2 的前端,可以方便地包含所有编码器的二进制文件。具体来说,它是xACT2.39.zip
中xACT 2.39/xACT.app/Contents/Resources/flac
的副本。
Uberi <[email protected]>(张安东尼) 博赛希洛尔 arvindch <[email protected]> (Arvind Chembarpu) kevinismith <[email protected]>(凯文·史密斯) 哈斯85 DelightRun <[email protected]> 特立独行者 kamushadenes <[email protected]> (Kamus Hadenes) sbraden <[email protected]>(莎拉·布雷登) tb0hdan(Bohdan Turkynewych) Thynix <[email protected]>(史蒂夫·多尔蒂) beeedy <[email protected]>(布罗德里克·卡林)
请在问题跟踪器中报告错误和建议!
如何引用这个库(APA风格):
张,A.(2017)。语音识别(版本 3.11)[软件]。可从 https://github.com/Uberi/speech_recognition#readme 获取。
如何引用这个库(芝加哥风格):
张,安东尼. 2017。语音识别(版本 3.11)。
另请查看 Python 百度语音 API,它基于该项目的旧版本,并添加了对百度语音的支持。请注意,百度语音仅在中国境内可用。
版权所有 2014-2017 安东尼·张 (Uberi)。该库的源代码可在 GitHub 上在线获取。
SpeechRecognition 在 3 条款 BSD 许可证下可用。有关详细信息,请参阅项目根目录中的LICENSE.txt
。
为方便起见,SpeechRecognition 的所有官方发行版均已包含必要的版权声明和许可证的副本。在您的项目中,您可以简单地说 SpeechRecognition 的许可信息可以在 SpeechRecognition README 中找到,并确保 SpeechRecognition 对用户可见(如果用户希望查看它) 。
SpeechRecognition 分发来自 CMU Sphinx 的源代码、二进制文件和语言文件。这些文件是 BSD 许可的,只要正确保留版权声明,就可以重新分发。有关各个部分的许可证详细信息,请参阅speech_recognition/pocketsphinx-data/*/LICENSE*.txt
和third-party/LICENSE-Sphinx.txt
。
SpeechRecognition 从 PyAudio 分发源代码和二进制文件。这些文件是 MIT 许可的,只要正确保留版权声明,就可以重新分发。有关许可证详细信息,请参阅third-party/LICENSE-PyAudio.txt
。
SpeechRecognition 从 FLAC 分发二进制文件speech_recognition/flac-win32.exe
、 speech_recognition/flac-linux-x86
和speech_recognition/flac-mac
。这些文件是 GPLv2 许可的并且是可再分发的,只要满足 GPL 的条款即可。 FLAC 二进制文件是单独程序的集合,因此这些 GPL 限制不适用于库或使用该库的程序,仅适用于 FLAC 本身。有关许可证详细信息,请参阅LICENSE-FLAC.txt
。