Quero fazer o processamento de fala no Raspberry Pi para detectar pessoas específicas (algo como identificação exclusiva).
Eu preferiria usar apenas o processador on-board para isso; você poderia assumir que a Internet não está acessível.
Além disso, quais são as limitações do Raspberry Pi executando o processamento de fala? Se eu quiser usar isso como uma máquina de atendimento automático, como devo proceder?
audio
home-automation
input-device
speech-recognition
speech-synthesis
Ruthvik Vaila
fonte
fonte
Respostas:
Este é o principal projeto ao qual meu Raspberry Pi está dedicado agora, então acho que posso adicionar meus dois centavos. Lembre-se de que este projeto ainda é um trabalho em andamento.
Eu escolhi usar a linguagem de programação C para este projeto exclusivamente no sistema operacional Raspbian, e isso pode ter afetado algumas das minhas decisões e instruções. Vou listar apenas softwares livres e de código aberto , pois é tudo o que eu uso.
Para as instruções de instalação, assumirei que você possui um sistema totalmente atualizado .
Reconhecimento de fala
Aqui estão algumas opções para os mecanismos de reconhecimento de fala :
Pocketsphinx - Uma versão do Sphinx que pode ser usada em sistemas embarcados (por exemplo, com base em um processador ARM).
Prós : em desenvolvimento ativo e incorpora recursos como aritmética de ponto fixo e algoritmos eficientes para computação GMM . Todo o processamento ocorre no Raspberry Pi, portanto ele pode ser usado offline. Suporta reconhecimento de fala em tempo real
Contras : é complicado de configurar e entender para iniciantes. Para mim, era muito impreciso para minha inscrição. Todo o processamento ocorre no Raspberry Pi, tornando-o um pouco mais lento.
Instruções de instalação :
Faça o download das versões estáveis mais recentes do Sphinxbase e Pocketsphinx :
Extraia os arquivos baixados:
Para compilar esses pacotes, você precisará instalar o bison e os cabeçalhos de desenvolvimento da ALSA.
NOTA : É importante que os cabeçalhos da ALSA sejam instalados antes da criação do Sphinxbase. Caso contrário, o Sphinxbase não utilizará o ALSA. Parece também que o ALSA não será usado se o PulseAudio estiver instalado (algo ruim para desenvolvedores como eu).
cd
no diretório Sphinxbase e digite os seguintes comandos:cd
no diretório Pocketsphinx e digite os seguintes comandos:Teste o Pocketsphinx executando:
Se você quiser ajustá-lo, recomendo que você leia algumas informações no Wiki do CMUSphinx .
libsprec - Uma biblioteca de reconhecimento de fala desenvolvida pelo H2CO3 (com poucas contribuições de minha parte, principalmente correções de bugs).
Prós : usa a API do Google Speech , tornando-a mais precisa. O código é mais fácil de entender (na minha opinião).
Contras : Possui dependências de outras bibliotecas que o H2CO3 desenvolveu (como a libjsonz ). O desenvolvimento é irregular. Ele usa a API do Google Speech, ou seja, o processamento não ocorre no próprio Raspberry Pi e requer uma conexão à Internet. Requer uma pequena modificação no código-fonte antes da compilação para funcionar corretamente no Raspberry Pi.
Instruções de instalação :
Instale libflac , libogg e libcurl :
Baixe a versão mais recente do libsprec
Descompacte o pacote baixado:
Agora você deve ter uma pasta nomeada
libsprec-master
em seu diretório atual.Baixe a versão mais recente do libjsonz :
Descompacte o pacote baixado:
Agora você deve ter uma pasta nomeada
libjsonz-master
em seu diretório atual.cd
nolibjsonz-master
diretório, compile e instale:cd
fora dolibjsonz-master
diretório e nolibsprec-master/src
diretório. Edite a linha 227:Precisamos disso para dizer:
Isso é feito para que o programa use o ALSA para apontar para o microfone USB.
Compile e instale:
Agora você pode usar a biblioteca em seus próprios aplicativos. Procure na pasta de exemplo em
libsprec-master
exemplos.Julius - Umsoftware de decodificador dereconhecimento contínuo de voz ( LVCSR ) dealto desempenho e duas passagenspara pesquisadores e desenvolvedores relacionados à fala.
Prós : ele pode executar o reconhecimento de fala quase em tempo real no próprio Raspberry Pi. Formatos padrão de modelos de fala são adotados para lidar com outros kits de ferramentas de modelagem gratuitos.
Contras : Desenvolvimento irregular, com sua última atualização há mais de um ano. Seu reconhecimento também é muito impreciso e lento para o meu uso. Longo tempo de instalação
Instruções de instalação :
Existem alguns pacotes que precisamos instalar para que o sistema funcione corretamente:
Faça o download do Julius da fonte do CVS:
Defina os sinalizadores do compilador pelas variáveis de ambiente:
cd
na pastajulius4
e digite os seguintes comandosJulius precisa de uma variável de ambiente chamada
ALSADEV
para dizer qual dispositivo usar para um microfone:Faça o download de um modelo acústico gratuito para Julius usar. Depois de fazer o download,
cd
entre no diretório e execute:Depois disso, você poderá iniciar a entrada de fala.
Crie sua própria biblioteca - para o meu projeto específico, optei por criar minha própria biblioteca de reconhecimento de fala que grava áudio de um microfone USB usando ALSA via PortAudio , armazena-o em um arquivo FLAC via libsndfile e envia-o ao Google para que eles processem isto. Eles então me enviam um arquivo JSON bem compactado que eu processo para obter o que disse ao meu Raspberry Pi.
Prós : eu controlo tudo (do que gosto). Eu aprendo muito (do que gosto).
Contras : É muito trabalho. Além disso, algumas pessoas podem argumentar que, na verdade, eu não estou processando o Raspberry Pi com esta biblioteca de reconhecimento de fala. Eu sei que . O Google pode processar meus dados com muito mais precisão do que agora. Estou trabalhando na criação de uma opção precisa de reconhecimento de fala offline.
Síntese de fala
Aqui estão algumas opções para os mecanismos de síntese de fala :
tritium - Um mecanismo de síntese de fala de qualidade premium gratuito, escrito completamente em C (e desenvolvido verdadeiramente pelo seu).
Prós: Extremamente portátil (sem dependências além do CMake para construir), extremamente pequeno (o menor que eu poderia encontrar), fácil de construir.
Contras: A saída da fala em si pode ser imprecisa às vezes. O suporte para uma ampla variedade de idiomas está ausente, pois eu sou o único desenvolvedor no momento, com pouco tempo livre, mas esse é um dos objetivos futuros do projeto. Além disso, a partir de agora apenas uma biblioteca é impressa quando compilada e nenhum executável utilizável / testável.
eSpeak - Um sintetizador de fala compacto de software de código aberto para Linux, Windows e outras plataformas.
Prós : Ele usa um método de síntese de formantes , fornecendo muitos idiomas falados em um tamanho pequeno. Também é muito preciso e fácil de entender. Eu originalmente usei isso no meu projeto, mas por causa dos contras, tive que mudar para outro mecanismo de síntese de fala.
Contras : Possui algumas dependências estranhas no X11 , causando algumas vezes gaguejamento. A biblioteca também é consideravelmente grande em comparação com outras.
Instruções de instalação :
Instale o software eSpeak:
Para dizer o que você quer no eSpeak:
Para ler de um arquivo no eSpeak:
Festival - Um sistema geral de síntese de fala multilíngue.
Prós : Ele foi projetado para suportar vários idiomas falados. Ele pode usar o projeto Festvox, que visa tornar a construção de novas vozes sintéticas mais sistemática e melhor documentada, possibilitando que qualquer pessoa construa uma nova voz.
Contras : Está escrito em C ++ (mais especificamente para mim). Ele também tem uma base de código maior, então seria difícil para mim entender e portar o código.
Instruções de instalação :
Instale o software Festival:
Para executar o Festival, coloque o texto ou o arquivo que você deseja ler:
Flite - Um pequeno mecanismo de síntese de fala em tempo de execução, derivado do Festival e do projeto Festvox.
Prós : Em constante desenvolvimento na Carnegie Mellon University. Motor muito pequeno comparado a outros. Ele também tem uma base de código menor, portanto é mais fácil passar. Ele quase não tem dependências (um grande profissional para mim e outra razão pela qual decidi usar esse mecanismo no meu projeto).
Contras : A saída de fala em si nem sempre é precisa. O discurso tem um som não metálico e não humano (mais do que os outros motores). Não suporta muitos idiomas.
Instruções de instalação :
Instale o software Flite:
Para executar o Flite:
Respostas para suas perguntas específicas :
Programadores não têm limites.
:P
Em uma nota mais séria, o Raspberry Pi possui muitos recursos para lidar com o processamento de fala. Desde que a pessoa que executa o processamento da fala saiba o que está fazendo, o Raspberry Pi deve ser capaz de lidar bem com isso.
Nenhuma dessas opções é precisa o suficiente para diferenciar pessoas específicas ainda . Isso é algo em que estou trabalhando no meu projeto (e provavelmente será por um tempo). Se você está procurando uma opção melhor para o comparecimento automático, eu examinaria o reconhecimento facial . Porém, existem mais limitações no reconhecimento facial para o Raspberry Pi, então lembre-se disso.
fonte
Fui com pocketsphinx_continuous e uma placa de som de US $ 4 .
Para gerenciar o fato de que ele precisa parar de ouvir ao usar o sintetizador de voz, usei o amixer para manipular a entrada de volume no microfone (essa foi a melhor prática recomendada pela CMU, pois o mecanismo de parada de partida resultará em um reconhecimento mais fraco)
Com um comando correspondente para silenciar a audição quando o sintetizador de voz é reproduzido
Para calcular os horários certos para silenciar, basta executar o soxi via lua e defina o unmute.sh (oposto ao mute.sh) para executar "x" segundos a partir da inicialização. Não há dúvida de muitas maneiras de lidar com isso. Estou feliz com os resultados desse método.
LUA SNIPPET:
Para realmente pegar a voz no pi, eu uso:
Novamente, existem outras maneiras, mas eu gosto da minha saída dessa maneira.
Para o sintetizador, usei a solução pi incipiente da Cepstrals, mas não está disponível on-line, você deve contatá-los diretamente para combinar a compra e custa cerca de US $ 30. Os resultados são aceitáveis, no entanto, o discurso cria alguns cliques e estalos desagradáveis, a empresa respondeu dizendo que não possui mais um RaspPi e não está disposta a melhorar o produto. YMMV
O reconhecimento de voz fica em torno de 12% da CPU quando "ocioso" e dispara rapidamente ao fazer um pedaço de reconhecimento.
A criação de voz atinge cerca de 50-80% ao renderizar.
O play / sox pesa bastante, mas aplico efeitos em tempo real às vozes renderizadas enquanto as toco;)
O pi é bastante simplificado usando todos os guias que pude encontrar para interromper serviços desnecessários e é executado no modo CLI completo. 800 mhz com over-clock (menor).
scaling_governor definido como: performance
Quando em pleno funcionamento: funciona a cerca de 50ºC sob luz solar direta e 38ºC na sombra. Eu tenho dissipadores de calor instalados.
Último ponto: na verdade, eu uso todo esse equipamento na IA "impulsionada pela Internet" como um ótimo extra.
O pi lida com tudo isso perfeitamente, e reproduz qualquer áudio em rede em tempo real, e áudio totalmente em loop para qualquer outra caixa Unix. etc.
Para lidar com a sobrecarga da CPU de fala grande, implementei um sistema de cache baseado em md5sum para que as mesmas expressões não sejam renderizadas duas vezes. (cerca de 1000 arquivos a 220 mb no total cobrem 70% das declarações que geralmente recebo da IA) isso realmente ajuda a reduzir a carga total da CPU em geral.
Na prática, tudo isso é totalmente factível. no entanto, o reconhecimento de voz será apenas tão bom quanto a qualidade de seus microfones, seu modelo de idioma, quão especificamente as vozes dos sujeitos estão próximas do público-alvo original (eu uso um modelo en_US em crianças en_UK, não é perfeito) e outras minúcias de detalhes que com esforço você pode reduzir a um resultado decente.
E para o registro, eu já fiz tudo isso uma vez antes em um Kindle (e isso também funcionou com cmu esfinge e flite). Espero que isto ajude.
fonte
Sim. use o PocketSphinx para reconhecimento de fala, o Festvox para texto para fala (TTS) e algum áudio USB com entrada de linha (ou uma webcam antiga suportada que também tenha entrada de linha).
As pesquisas do Google por esses pacotes de software e o "Raspberry Pi" fornecem muitos exemplos e tutoriais para configurar isso.
fonte
Conforme apontado por Lenik, você precisará de alguma forma para gravar áudio ou possivelmente enviar arquivos de áudio ao Raspberry Pi para que eles sejam decodificados de alguma forma.
fonte
O Raspberry Pi não possui ADC embutido nem entrada de microfone. A menos que você esteja planejando usar um microfone USB externo, basicamente não há como obter seu fluxo de áudio no dispositivo. Além disso, não há limitações sérias, a CPU é poderosa o suficiente para qualquer processamento de som que você possa tentar implementar.
fonte
Primeiro, você deve selecionar um conjunto de palavras para o processo de classificação. Depois disso, você deve coletar os dados de usuários / assuntos. Será um sinal não estacionário. Você precisa reduzir seus dados para reduzir custos computacionais / melhorar a taxa de sucesso com os métodos de extração de recursos, para procurar métodos adequados de extração de recursos para seu aplicativo. Você pode obter um vetor de recurso como resultado desses métodos (valor absoluto médio, RMS, comprimento da forma de onda, cruzamento de zero, valor absoluto integrado, coeficientes de RA, frequência mediana, frequência média, etc.). Então, você deve usar um método de classificação como knn, redes neurais etc. para classificar seus dados. Por fim, você deve verificar sua precisão. Resumindo:
Vi projetos de processamento de vídeo com o RPi na internet para que ele possa fazer essa classificação.
Você pode usar o NI 6009 USB DAQ (que suporta RPi) para coletar dados analógicos, mas eles são um pouco caros.
fonte
Isso pode ser útil para você reconhecer o alto-falante:
https://code.google.com/p/voiceid/
fonte