Biblioteca para realização de reconhecimento de fala, com suporte a diversos motores e APIs, online e offline.
ATUALIZAÇÃO 09/02/2022 : Olá a todos! Este projeto começou como uma demonstração técnica, mas hoje em dia precisa de mais tempo do que eu para acompanhar todos os PRs e problemas. Portanto, gostaria de lançar um convite aberto para colaboradores - basta entrar em contato pelo e-mail [email protected] se estiver interessado!
Suporte a mecanismo/API de reconhecimento de fala:
Início rápido: pip install SpeechRecognition
. Consulte a seção "Instalação" para obter mais detalhes.
Para experimentar rapidamente, execute python -m speech_recognition
após a instalação.
Links do projeto:
A referência da biblioteca documenta todos os objetos acessíveis ao público na biblioteca. Este documento também está incluído em reference/library-reference.rst
.
Consulte Notas sobre o uso do PocketSphinx para obter informações sobre como instalar idiomas, compilar o PocketSphinx e construir pacotes de idiomas a partir de recursos online. Este documento também está incluído em reference/pocketsphinx.rst
.
Você deve instalar modelos Vosk para usar o Vosk. Aqui estão os modelos disponíveis. Você deve colocá-los na pasta models do seu projeto, como "your-project-folder/models/your-vosk-model"
Veja o diretório examples/
na raiz do repositório para exemplos de uso:
recognizer_instance.energy_threshold
para obter detalhes)Primeiro, certifique-se de ter todos os requisitos listados na seção “Requisitos”.
A maneira mais fácil de instalar isso é usando pip install SpeechRecognition
.
Caso contrário, baixe a distribuição fonte do PyPI e extraia o arquivo.
Na pasta, execute python setup.py install
.
Para usar todas as funcionalidades da biblioteca, você deve ter:
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
)Os seguintes requisitos são opcionais, mas podem melhorar ou ampliar a funcionalidade em algumas situações:
As seções a seguir abordam os detalhes de cada requisito.
O primeiro requisito de software é Python 3.9+. Isso é necessário para usar a biblioteca.
PyAudio é necessário se e somente se você quiser usar a entrada de microfone ( Microphone
). A versão 0.2.11+ do PyAudio é necessária, pois as versões anteriores apresentavam bugs conhecidos de gerenciamento de memória ao gravar de microfones em determinadas situações.
Se não for instalado, tudo na biblioteca ainda funcionará, exceto que a tentativa de instanciar um objeto Microphone
gerará um AttributeError
.
As instruções de instalação no site do PyAudio são muito boas - por conveniência, estão resumidas abaixo:
pip install SpeechRecognition[audio]
em um terminal.sudo apt-get install python-pyaudio python3-pyaudio
em um terminal.sudo apt-get install portaudio19-dev python-all-dev python3-all-dev && sudo pip install SpeechRecognition[audio]
(substitua pip
por pip3
se usando Python 3).brew install portaudio
. Em seguida, instale com PyAudio usando Pip: pip install SpeechRecognition[audio]
.portaudio19-dev
e python-all-dev
(ou python3-all-dev
se estiver usando Python 3) (ou seus equivalentes mais próximos) usando um gerenciador de pacotes de sua escolha e, em seguida, instale com PyAudio usando Pip: pip install SpeechRecognition[audio]
(substitua pip
por pip3
se estiver usando Python 3). Os pacotes PyAudio wheel para versões comuns do Python de 64 bits no Windows e Linux são incluídos por conveniência, no diretório third-party/
na raiz do repositório. Para instalar, basta executar pip install wheel
seguido de pip install ./third-party/WHEEL_FILENAME
(substitua pip
por pip3
se estiver usando Python 3) no diretório raiz do repositório.
PocketSphinx-Python é necessário se e somente se você quiser usar o reconhecedor Sphinx ( recognizer_instance.recognize_sphinx
).
Os pacotes PocketSphinx-Python wheel para Python 3.4 de 64 bits e 3.5 no Windows estão incluídos por conveniência, no diretório third-party/
. Para instalar, basta executar pip install wheel
seguido de pip install ./third-party/WHEEL_FILENAME
(substitua pip
por pip3
se estiver usando Python 3) na pasta SpeechRecognition.
No Linux e outros sistemas POSIX (como OS X), execute pip install SpeechRecognition[pocketsphinx]
. Siga as instruções em "Construindo PocketSphinx-Python a partir do código-fonte" em Notas sobre como usar o PocketSphinx para obter instruções de instalação.
Observe que as versões disponíveis na maioria dos repositórios de pacotes estão desatualizadas e não funcionarão com os dados de idioma incluídos. Recomenda-se usar os pacotes de roda incluídos ou compilar a partir do código-fonte.
Consulte Notas sobre o uso do PocketSphinx para obter informações sobre como instalar idiomas, compilar o PocketSphinx e construir pacotes de idiomas a partir de recursos online. Este documento também está incluído em reference/pocketsphinx.rst
.
A API Vosk é necessária se e somente se você quiser usar o reconhecedor Vosk ( recognizer_instance.recognize_vosk
).
Você pode instalá-lo com python3 -m pip install vosk
.
Você também deve instalar os modelos Vosk:
Aqui estão os modelos disponíveis para download. Você deve colocá-los na pasta models do seu projeto, como "your-project-folder/models/your-vosk-model"
A biblioteca Google Cloud Speech para Python será necessária se e somente se você quiser usar a API Google Cloud Speech ( recognizer_instance.recognize_google_cloud
).
Se não estiver instalado, tudo na biblioteca ainda funcionará, exceto chamar recognizer_instance.recognize_google_cloud
que gerará um RequestError
.
De acordo com as instruções oficiais de instalação, a forma recomendada de instalar é usando Pip: execute pip install google-cloud-speech
(substitua pip
por pip3
se estiver usando Python 3).
Um codificador FLAC é necessário para codificar os dados de áudio para enviar à API. Se estiver usando Windows (x86 ou x86-64), OS X (somente Intel Macs, OS X 10.6 ou superior) ou Linux (x86 ou x86-64), isso já vem junto com esta biblioteca - você não precisa instalar nada .
Caso contrário, certifique-se de ter a ferramenta de linha de comando flac
, que geralmente está disponível através do gerenciador de pacotes do sistema. Por exemplo, normalmente seria sudo apt-get install flac
em derivados do Debian ou brew install flac
no OS X com Homebrew.
O Whisper é necessário se e somente se você quiser usar o Whisper ( recognizer_instance.recognize_whisper
).
Você pode instalá-lo com python3 -m pip install SpeechRecognition[whisper-local]
.
A biblioteca openai é necessária se e somente se você quiser usar a API OpenAI Whisper ( recognizer_instance.recognize_openai
).
Você pode instalá-lo com python3 -m pip install SpeechRecognition[openai]
.
Defina a variável de ambiente OPENAI_API_KEY
antes de chamar recognizer_instance.recognize_openai
.
A biblioteca groq é necessária se e somente se você quiser usar a API Groq Whisper ( recognizer_instance.recognize_groq
).
Você pode instalá-lo com python3 -m pip install SpeechRecognition[groq]
.
Defina a variável de ambiente GROQ_API_KEY
antes de chamar recognizer_instance.recognize_groq
.
Tente aumentar a propriedade recognizer_instance.energy_threshold
. Isto é basicamente o quão sensível o reconhecedor é quando o reconhecimento deve começar. Valores mais altos significam que será menos sensível, o que é útil se você estiver em uma sala barulhenta.
Este valor depende inteiramente do seu microfone ou dados de áudio. Não existe um valor único, mas bons valores normalmente variam de 50 a 4.000.
Além disso, verifique as configurações de volume do microfone. Se for muito sensível, o microfone pode captar muito ruído ambiente. Se for muito insensível, o microfone pode rejeitar a fala como apenas ruído.
A propriedade recognizer_instance.energy_threshold
provavelmente está definida com um valor muito alto para começar e, em seguida, é ajustada automaticamente para baixo pelo ajuste dinâmico do limite de energia. Antes de atingir um bom nível, o limite de energia é tão alto que a fala é considerada apenas ruído ambiente.
A solução é diminuir esse limite ou chamar recognizer_instance.adjust_for_ambient_noise
antecipadamente, o que definirá o limite para um bom valor automaticamente.
Tente definir o idioma de reconhecimento para o seu idioma/dialeto. Para fazer isso, consulte a documentação para recognizer_instance.recognize_sphinx
, recognizer_instance.recognize_google
, recognizer_instance.recognize_wit
, recognizer_instance.recognize_bing
, recognizer_instance.recognize_api
, recognizer_instance.recognize_houndify
e recognizer_instance.recognize_ibm
.
Por exemplo, se o seu idioma/dialeto for o inglês britânico, é melhor usar "en-GB"
como idioma em vez de "en-US"
.
recognizer_instance.listen
; especificamente, quando está chamando Microphone.MicrophoneStream.read
.Isso geralmente acontece quando você está usando uma placa Raspberry Pi, que não possui recursos de entrada de áudio por si só. Isso faz com que o microfone padrão usado pelo PyAudio simplesmente bloqueie quando tentamos lê-lo. Se você estiver usando um Raspberry Pi, precisará de uma placa de som USB (ou microfone USB).
Depois de fazer isso, altere todas as instâncias de Microphone()
para Microphone(device_index=MICROPHONE_INDEX)
, onde MICROPHONE_INDEX
é o índice específico do hardware do microfone.
Para descobrir qual deve ser o valor de MICROPHONE_INDEX
, execute o seguinte código:
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 ))
Isso imprimirá algo como o seguinte:
Microfone com nome "HDA Intel HDMI: 0 (hw:0,3)" encontrado para `Microphone(device_index=0)` Microfone com nome "HDA Intel HDMI: 1 (hw:0,7)" encontrado para `Microphone(device_index=1)` Microfone com nome "HDA Intel HDMI: 2 (hw:0,8)" encontrado para `Microphone(device_index=2)` Microfone com o nome "Blue Snowball: USB Audio (hw:1,0)" encontrado para `Microphone(device_index=3)` Microfone com nome "hdmi" encontrado para `Microphone(device_index=4)` Microfone com nome "pulso" encontrado para `Microfone(device_index=5)` Microfone com nome "default" encontrado para `Microphone(device_index=6)`
Agora, para usar o microfone Snowball, você mudaria Microphone()
para Microphone(device_index=3)
.
Microphone()
gera o erro IOError: No Default Input Device Available
.Como diz o erro, o programa não sabe qual microfone usar.
Para continuar, use Microphone(device_index=MICROPHONE_INDEX, ...)
em vez de Microphone(...)
ou defina um microfone padrão em seu sistema operacional. Você pode obter valores possíveis de MICROPHONE_INDEX
usando o código na entrada de solução de problemas logo acima desta.
A partir do PyInstaller versão 3.0, o SpeechRecognition é compatível imediatamente. Se você estiver tendo problemas estranhos ao compilar seu programa usando o PyInstaller, simplesmente atualize o PyInstaller.
Você pode fazer isso facilmente executando pip install --upgrade pyinstaller
.
O erro "bt_audio_service_open" significa que você tem um dispositivo de áudio Bluetooth, mas como um dispositivo físico não está conectado no momento, não podemos usá-lo - se você não estiver usando um microfone Bluetooth, isso pode ser ignorado com segurança. Se estiver, e o áudio não estiver funcionando, verifique novamente para ter certeza de que o microfone está realmente conectado. Não parece haver uma maneira simples de desabilitar essas mensagens.
Para erros no formato "ALSA lib [...] Unknown PCM", consulte esta resposta do StackOverflow. Basicamente, para se livrar de um erro no formato "Unknown PCM cards.pcm.rear", basta comentar pcm.rear cards.pcm.rear
em /usr/share/alsa/alsa.conf
, ~/.asoundrc
, e /etc/asound.conf
.
Para "o servidor jack não está em execução ou não pode ser iniciado" ou "chamada connect(2) para /dev/shm/jack-1000/default/jack_0 falhou (err=Nenhum arquivo ou diretório)" ou "tentativa de conexão ao servidor falhou", estes são causados pela tentativa do ALSA de se conectar ao JACK e podem ser ignorados com segurança. Não conheço nenhuma maneira simples de desativar essas mensagens no momento, além de desativar totalmente a impressão ao iniciar o microfone.
ChildProcessError
dizendo que não foi possível encontrar o conversor FLAC do sistema, mesmo que esteja instalado.Instalar o FLAC para OS X diretamente do código-fonte não funcionará, pois não adiciona corretamente os executáveis ao caminho de pesquisa.
Instalar FLAC usando Homebrew garante que o caminho de pesquisa seja atualizado corretamente. Primeiro, certifique-se de ter o Homebrew e, em seguida, execute brew install flac
para instalar os arquivos necessários.
Para hackear esta biblioteca, primeiro certifique-se de ter todos os requisitos listados na seção “Requisitos”.
speech_recognition/__init__.py
.examples/
e o script de demonstração fica em speech_recognition/__main__.py
.speech_recognition/
.reference/
.third-party/
. Para instalar/reinstalar a biblioteca localmente, execute python -m pip install -e .[dev]
no diretório raiz do projeto.
Antes de um lançamento, o número da versão é inserido em README.rst
e speech_recognition/__init__.py
. As tags de versão são então criadas usando git config gpg.program gpg2 && git config user.signingkey DB45F6C431DE7C2DCD99FF7904882258A4063489 && git tag -s VERSION_GOES_HERE -m "Version VERSION_GOES_HERE"
.
Os lançamentos são feitos executando make-release.sh VERSION_GOES_HERE
para construir os pacotes fonte do Python, assiná-los e carregá-los no PyPI.
Para executar todos os testes:
python -m unittest discover --verbose
Para executar análise estática:
python -m flake8 --ignore=E501,E701,W503 speech_recognition tests examples setup.py
Para garantir que o RST esteja bem formado:
python -m rstcheck README.rst reference/ * .rst
O teste também é feito automaticamente pelo GitHub Actions, a cada push.
O executável flac-win32
incluído é o binário oficial do Windows FLAC 1.3.2 de 32 bits.
Os executáveis flac-linux-x86
e flac-linux-x86_64
incluídos são construídos a partir do código-fonte FLAC 1.3.2 com Manylinux para garantir que seja compatível com uma ampla variedade de distribuições.
Os executáveis FLAC construídos devem ser reproduzíveis bit a bit. Para reconstruí-los, execute o seguinte dentro do diretório do projeto em um sistema semelhante ao 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/
O executável flac-mac
incluído é extraído do xACT 2.39, que é um frontend para FLAC 1.3.2 que inclui convenientemente binários para todos os seus codificadores. Especificamente, é uma cópia de xACT 2.39/xACT.app/Contents/Resources/flac
em xACT2.39.zip
.
Uberi <[email protected]> (Anthony Zhang) bobsayshilol arvindch <[email protected]> (Arvind Chembarpu) Kevinismith <[email protected]> (Kevin Smith) haas85 [email protected]> independente kamushadenes <[email protected]> (Kamus Hadenes) sbraden <[email protected]> (Sarah Braden) tb0hdan (Bohdan Turkynewych) Thynix <[email protected]> (Steve Dougherty) lindo <[email protected]> (Broderick Carlin)
Por favor, relate bugs e sugestões no rastreador de problemas!
Como citar esta biblioteca (estilo APA):
Zhang, A. (2017). Reconhecimento de fala (versão 3.11) [Software]. Disponível em https://github.com/Uberi/speech_recognition#readme.
Como citar esta biblioteca (estilo Chicago):
Zhang, Antônio. 2017. Reconhecimento de fala (versão 3.11).
Confira também a API Python Baidu Yuyin, que é baseada em uma versão mais antiga deste projeto e adiciona suporte para Baidu Yuyin. Observe que o Baidu Yuyin está disponível apenas na China.
Direitos autorais 2014-2017 Anthony Zhang (Uberi). O código-fonte desta biblioteca está disponível online no GitHub.
SpeechRecognition está disponível sob a licença BSD de 3 cláusulas. Consulte LICENSE.txt
no diretório raiz do projeto para obter mais informações.
Por conveniência, todas as distribuições oficiais do SpeechRecognition já incluem uma cópia dos avisos e licenças de direitos autorais necessários. No seu projeto, você pode simplesmente dizer que as informações de licenciamento do SpeechRecognition podem ser encontradas no README do SpeechRecognition e garantir que o SpeechRecognition esteja visível para os usuários, caso eles desejem vê-lo .
SpeechRecognition distribui código-fonte, binários e arquivos de linguagem do CMU Sphinx. Esses arquivos são licenciados por BSD e redistribuíveis, desde que os avisos de direitos autorais sejam mantidos corretamente. Consulte speech_recognition/pocketsphinx-data/*/LICENSE*.txt
e third-party/LICENSE-Sphinx.txt
para obter detalhes de licença para peças individuais.
SpeechRecognition distribui código-fonte e binários do PyAudio. Esses arquivos são licenciados pelo MIT e redistribuíveis, desde que os avisos de direitos autorais sejam mantidos corretamente. Consulte third-party/LICENSE-PyAudio.txt
para obter detalhes da licença.
SpeechRecognition distribui binários de FLAC - speech_recognition/flac-win32.exe
, speech_recognition/flac-linux-x86
e speech_recognition/flac-mac
. Esses arquivos são licenciados pela GPLv2 e redistribuíveis, desde que os termos da GPL sejam atendidos. Os binários FLAC são um agregado de programas separados, portanto essas restrições da GPL não se aplicam à biblioteca ou aos seus programas que usam a biblioteca, apenas ao próprio FLAC. Consulte LICENSE-FLAC.txt
para obter detalhes da licença.