Assistente de Voz Local: Criando seu Próprio Sistema Offline

Em um mundo cada vez mais conectado, os assistentes de voz tornaram-se parte essencial da automação residencial. No entanto, muitos usuários se preocupam com questões de privacidade e dependência de internet que os sistemas comerciais apresentam. A boa notícia é que você pode criar seu próprio assistente de voz totalmente

Sumário

Em um mundo cada vez mais conectado, os assistentes de voz tornaram-se parte essencial da automação residencial. No entanto, muitos usuários se preocupam com questões de privacidade e dependência de internet que os sistemas comerciais apresentam. A boa notícia é que você pode criar seu próprio assistente de voz totalmente offline, personalizado e que respeita sua privacidade. Neste guia completo, vamos explorar como implementar o Rhasspy em um Raspberry Pi para criar um poderoso sistema de voz local que funciona mesmo sem conexão com a internet.

Por que criar um assistente de voz offline?

Os assistentes de voz comerciais como Alexa, Google Assistant e Siri revolucionaram a forma como interagimos com nossas casas inteligentes, mas apresentam algumas limitações significativas. Primeiro, eles estão constantemente enviando dados para servidores remotos, o que levanta preocupações legítimas sobre privacidade. Segundo, eles dependem totalmente de uma conexão com a internet para funcionar. Terceiro, oferecem opções limitadas de personalização.

Um assistente de voz local como o Rhasspy resolve esses problemas. Ele processa tudo localmente no seu Raspberry Pi, sem enviar dados para a nuvem. Continua funcionando mesmo quando sua internet cai. E o melhor de tudo: você pode personalizá-lo completamente para atender às suas necessidades específicas.

O que é o Rhasspy?

Rhasspy (pronuncia-se “raspy”) é uma plataforma de assistente de voz de código aberto projetada para funcionar completamente offline. Diferente dos assistentes comerciais que tentam entender qualquer coisa que você diga, o Rhasspy é treinado para reconhecer comandos específicos, o que o torna extremamente preciso para tarefas de automação residencial.

Uma das grandes vantagens do Rhasspy é sua arquitetura modular. Você pode escolher diferentes componentes para reconhecimento de fala, síntese de voz e processamento de intenções, adaptando-o às capacidades do seu hardware e às suas preferências pessoais. Além disso, ele suporta múltiplos idiomas, incluindo português, e integra-se perfeitamente com o Home Assistant, uma das plataformas de automação residencial mais populares.

Implementação de Rhasspy em Raspberry Pi

Hardware necessário

Para implementar o Rhasspy, você precisará de um Raspberry Pi 4 (recomendado) ou Raspberry Pi 3B+ (mínimo), um cartão microSD de pelo menos 16GB (Classe 10), uma fonte de alimentação adequada para o Raspberry Pi, um microfone USB de boa qualidade e alto-falantes (via USB, HDMI ou jack de 3.5mm). Opcionalmente, uma caixa para o Raspberry Pi pode ser útil para proteção e estética.

O Raspberry Pi 4 com 2GB de RAM é suficiente para a maioria dos usuários, mas se você planeja usar modelos de reconhecimento de fala mais avançados, considere a versão com 4GB ou 8GB de RAM. O importante é garantir que seu Raspberry Pi tenha potência suficiente para processar o áudio em tempo real, o que pode ser um desafio para modelos mais antigos.

Preparando o Raspberry Pi

Comece instalando o Raspberry Pi OS (anteriormente conhecido como Raspbian) no seu cartão microSD. Você pode usar o Raspberry Pi Imager, uma ferramenta oficial que simplifica o processo. Baixe e instale o Raspberry Pi Imager do site oficial, insira o cartão microSD no seu computador, abra o Raspberry Pi Imager e selecione “Raspberry Pi OS (32-bit)” como sistema operacional. Selecione seu cartão microSD como destino, clique no ícone de engrenagem para acessar configurações avançadas, ative SSH, configure Wi-Fi, defina fuso horário e idioma do teclado, defina um nome de usuário e senha, clique em “Salvar” e depois em “Gravar”.

Após a conclusão, insira o cartão no Raspberry Pi e ligue-o. Você pode se conectar diretamente com monitor, teclado e mouse, ou remotamente via SSH. Para conexão SSH, use o comando “ssh [email protected]” no terminal do seu computador, substituindo “usuario” pelo nome de usuário que você definiu.

Uma vez conectado, execute os comandos para atualizar o sistema: “sudo apt update” seguido de “sudo apt upgrade -y”. Este processo pode levar alguns minutos, dependendo da velocidade da sua conexão com a internet e do seu cartão microSD.

Para garantir o melhor desempenho do nosso assistente de voz, precisamos fazer algumas otimizações no sistema. Aumente a memória swap para melhorar o desempenho durante tarefas intensivas editando o arquivo “/etc/dphys-swapfile” e alterando a linha “CONF_SWAPSIZE=100” para “CONF_SWAPSIZE=1024”. Salve o arquivo e reinicie o serviço de swap com o comando “sudo /etc/init.d/dphys-swapfile restart”.

Configure o áudio corretamente. Primeiro, verifique os dispositivos de áudio disponíveis com os comandos “arecord -l” e “aplay -l”. Anote os números de cartão e dispositivo do seu microfone e alto-falante. Em seguida, crie um arquivo de configuração de áudio “~/.asoundrc” e adicione a configuração apropriada para seus dispositivos.

Instale algumas bibliotecas de áudio úteis com o comando “sudo apt install -y alsa-utils pulseaudio pulseaudio-utils”. Teste se o microfone está funcionando corretamente gravando alguns segundos de áudio com “arecord -d 5 test.wav” e reproduzindo a gravação com “aplay test.wav”.

Instalando o Rhasspy

A maneira mais simples de instalar o Rhasspy é usando Docker, que permite executá-lo em um ambiente isolado e facilita atualizações futuras. Primeiro, instale o Docker no Raspberry Pi com os comandos “curl -sSL https://get.docker.com | sh” seguido de “sudo usermod -aG docker $USER”.

Faça logout e login novamente para que as alterações de grupo tenham efeito. Agora, baixe e execute o Rhasspy com o comando Docker apropriado, que inclui parâmetros para configurar o volume de dados, acesso aos dispositivos de áudio e o perfil de idioma desejado.

Este comando inicia o Rhasspy com o perfil em português. Você pode acessar a interface web navegando para “http://endereço-ip-do-raspberry:12101” no seu navegador.

Configuração inicial do Rhasspy

Na primeira execução, você verá a tela de configuração do Rhasspy. Vamos configurar os componentes principais, começando pela Wake Word (Palavra de Ativação), que é o que você diz para “acordar” o assistente antes de dar um comando. No Rhasspy, você tem várias opções como Porcupine, Snowboy e Precise. Para iniciantes, o Porcupine é recomendado. Selecione-o no menu suspenso e escolha uma palavra de ativação como “Computador” ou “Assistente”. Você pode ajustar a sensibilidade conforme necessário.

Para o Speech to Text (Reconhecimento de Fala), que converte sua voz em texto, as opções incluem Kaldi, DeepSpeech e PocketSphinx. Para o Raspberry Pi 4, Kaldi ou DeepSpeech são recomendados. Para o Raspberry Pi 3, o PocketSphinx pode ser mais adequado devido ao menor consumo de recursos.

No Intent Recognition (Reconhecimento de Intenções), que interpreta o que você quer dizer, mantenha “Fsticuffs” selecionado, que é o sistema padrão do Rhasspy e funciona bem para a maioria dos casos.

Para Text to Speech (Síntese de Voz), a voz do seu assistente, as opções incluem eSpeak, Festival, Larynx e MaryTTS. Para português, o eSpeak ou Larynx são boas opções. Teste diferentes vozes para encontrar a que mais lhe agrada.

No Dialog Management (Gerenciamento de Diálogo), selecione “Rhasspy” para gerenciamento local ou “Home Assistant” se planeja integrar com o Home Assistant (recomendado para automação residencial).

Após configurar todos os componentes, clique em “Salvar Configurações” e depois em “Reiniciar Rhasspy” para aplicar as alterações.

Testando a configuração básica

Para verificar se tudo está funcionando corretamente, na interface web do Rhasspy, vá para a seção “Frases” e adicione uma frase simples como “ligar a luz da sala”. Clique em “Salvar Frases” e depois em “Treinar”. Após o treinamento, clique no botão de microfone na parte superior da interface e diga sua palavra de ativação seguida do comando (por exemplo, “Assistente, ligar a luz da sala”).

Se o teste for bem-sucedido, você verá a intenção reconhecida na interface. Caso contrário, verifique as configurações de áudio e ajuste a sensibilidade do microfone ou da palavra de ativação.

Microfones e alto-falantes recomendados

A qualidade do microfone é crucial para o bom funcionamento do seu assistente de voz. Um microfone ruim resultará em reconhecimento impreciso, enquanto um bom microfone pode fazer toda a diferença.

Microfones recomendados

Entre os microfones USB standalone, o Blue Snowball oferece excelente qualidade de áudio e captação omnidirecional, ideal para ambientes maiores. O Fifine K669B é uma opção mais econômica com boa qualidade de áudio e construção sólida. O Samson Go Mic é compacto e portátil, com qualidade de áudio surpreendente para o tamanho.

Para arrays de microfones, o ReSpeaker 4-Mic Array foi desenvolvido especificamente para assistentes de voz, com quatro microfones e algoritmos de processamento de áudio avançados. O ReSpeaker 2-Mic HAT é uma opção mais econômica que se conecta diretamente ao GPIO do Raspberry Pi. O Matrix Voice é um array circular de 7 microfones com excelente captação de 360 graus.

Existem também soluções tudo-em-um como o Jabra Speak 510, um dispositivo de conferência USB que combina microfone e alto-falante em um único pacote, e surpreendentemente, o PlayStation Eye Camera, um acessório de videogame que contém um excelente array de quatro microfones.

Para a maioria dos usuários, o ReSpeaker 4-Mic Array ou o Blue Snowball são recomendados. Ambos oferecem excelente qualidade de captação e são relativamente fáceis de configurar.

Alto-falantes recomendados

Para a saída de áudio, você tem várias opções. Os alto-falantes USB como o Logitech Z120 ou JBL Pebbles são compactos e oferecem boa qualidade de som. Os alto-falantes Bluetooth conectados via Bluetooth ou cabo auxiliar oferecem mais flexibilidade de posicionamento. O Raspberry Pi possui saída de áudio de 3.5mm que pode ser conectada a praticamente qualquer alto-falante amplificado. Existem também HATs de áudio como o JustBoom DAC HAT, que melhoram significativamente a qualidade do áudio do Raspberry Pi.

Para uma solução simples, os alto-falantes USB são a melhor opção, pois não dependem da qualidade da saída de áudio do Raspberry Pi.

Configuração do áudio

Após conectar seu microfone e alto-falantes, você precisará configurá-los corretamente. Identifique os dispositivos de áudio com os comandos “arecord -l” e “aplay -l”. Teste o microfone com “arecord -D plughw:CARD=X,DEV=Y -d 5 -f cd test.wav”, substituindo X e Y pelos números do cartão e dispositivo do seu microfone. Teste os alto-falantes com “aplay -D plughw:CARD=X,DEV=Y test.wav”, substituindo X e Y pelos números do cartão e dispositivo dos seus alto-falantes.

Ajuste o volume com o comando “alsamixer” e use as teclas de seta para navegar e ajustar os níveis de volume. Para uma configuração permanente, edite o arquivo “.asoundrc” conforme mostrado anteriormente na seção de preparação do Raspberry Pi.

Para melhorar o reconhecimento de voz, posicione o microfone longe de fontes de ruído como ventiladores, ar-condicionado ou alto-falantes. A maioria dos microfones funciona melhor a uma distância de 1 a 3 metros, então teste diferentes posições para encontrar o ponto ideal. Considere também a acústica do ambiente. Salas com muitas superfícies duras podem criar eco, dificultando o reconhecimento. Adicionar alguns elementos macios como tapetes, cortinas ou painéis acústicos pode melhorar significativamente o desempenho. No Rhasspy, ajuste a sensibilidade do sistema de detecção de palavra de ativação para encontrar o equilíbrio entre responder quando chamado e evitar ativações falsas.

Criação de comandos personalizados

Uma das maiores vantagens do Rhasspy é a capacidade de criar comandos personalizados específicos para suas necessidades. Diferente dos assistentes comerciais que tentam entender qualquer coisa que você diga, o Rhasspy é treinado para reconhecer padrões específicos, o que o torna extremamente preciso para tarefas de automação residencial.

Entendendo o sistema de intenções

O Rhasspy utiliza um sistema de “intenções” (intents) e “slots” para entender comandos. Uma intenção representa a ação que você deseja realizar, enquanto os slots são variáveis dentro dessa ação. Por exemplo, na frase “ligar a luz da sala”, a intenção seria “ligar_dispositivo”, e os slots seriam “dispositivo=luz” e “local=sala”.

Definindo frases e slots

Na interface web do Rhasspy, vá para a seção “Frases” (Sentences). Aqui você pode definir padrões de frases que o assistente deve reconhecer. Vamos criar alguns exemplos:

Para a intenção “ligar_dispositivo”, podemos definir frases como “ligar (a | o) {dispositivo} (da | do) {local}” e “acender (a | o) {dispositivo} (da | do) {local}”. Para “desligar_dispositivo”, podemos usar “desligar (a | o) {dispositivo} (da | do) {local}” e “apagar (a | o) {dispositivo} (da | do) {local}”. Para “ajustar_dispositivo”, podemos definir “(ajustar | definir) (a | o) {dispositivo} (da | do) {local} para {valor} (por cento | graus)”.

Também precisamos definir os valores possíveis para cada slot: “dispositivo = (luz | lâmpada | ventilador | ar condicionado | televisão | tv)”, “local = (sala | cozinha | quarto | banheiro | escritório | varanda)” e “valor = (0..100){número}”.

Nesta sintaxe, os colchetes “[]” definem o nome da intenção, parênteses “()” indicam grupos opcionais de palavras, a barra vertical “|” representa alternativas, e chaves “{}” definem slots (variáveis).

Comandos avançados

Podemos criar comandos mais avançados para controle de múltiplos dispositivos, como “(ligar | acender) todas as luzes (da | do) {local}” e “(desligar | apagar) todos os dispositivos (da | do) {local}”.

Para comandos com temporização, podemos usar “(ligar | acender) (a | o) {dispositivo} (da | do) {local} por {duração} (minutos | horas)” e “desligar (a | o) {dispositivo} (da | do) {local} após {duração} (minutos | horas)”, com “duração = (1..120){número}”.

Para consultas de informação, podemos definir “qual (é | está) a {informacao} (da | do) {local}” e “como está a {informacao} (da | do) {local}”, com “informacao = (temperatura | umidade | luminosidade | consumo de energia)”.

Para comandos de cena, podemos usar “ativar (cena | modo) {cena}” e “mudar para (cena | modo) {cena}”, com “cena = (cinema | jantar | leitura | festa | noturno | ausente)”.

Testando seus comandos

Para testar se seus comandos estão funcionando corretamente, na interface web do Rhasspy, vá para a aba “Fala” (Speech), clique no botão do microfone, diga um dos comandos que você configurou, e o Rhasspy mostrará a intenção reconhecida e os valores dos slots.

Por exemplo, se você disser “ligar a luz da sala”, o Rhasspy deve mostrar algo como: “intent”: {“name”: “ligar_dispositivo”}, “slots”: {“dispositivo”: “luz”, “local”: “sala”}.

Lidando com variações de linguagem

Para tornar seu assistente mais natural, você pode adicionar variações de como as pessoas expressam o mesmo comando. Por exemplo, para “ligar_dispositivo”, além das frases básicas, você pode adicionar “(liga | acende) (a | o) {dispositivo} (da | do) {local} (por favor |)” e “(poderia | pode) (ligar | acender) (a | o) {dispositivo} (da | do) {local} (por favor |)”. Isso permite que o assistente entenda diferentes formas de pedir a mesma coisa, tornando a interação mais natural e flexível.

Integração com Home Assistant

O Home Assistant é uma das plataformas de automação residencial mais populares e poderosas disponíveis atualmente. A integração do Rhasspy com o Home Assistant cria um sistema completo de automação controlado por voz.

Instalando o Home Assistant

Se você ainda não tem o Home Assistant instalado, a maneira mais simples de instalá-lo no Raspberry Pi é usando Docker. Execute o comando Docker apropriado para instalar o Home Assistant, que inclui parâmetros para configurar o volume de dados, a porta de acesso e a rede.

Após a instalação, acesse a interface web do Home Assistant navegando para “http://endereço-ip-do-raspberry:8123” em seu navegador.

Configurando a integração

Para integrar o Rhasspy ao Home Assistant, precisamos configurar ambos os sistemas. No Home Assistant, edite o arquivo de configuração “/home/pi/homeassistant/configuration.yaml” e adicione as linhas para configurar a API e habilitar comandos de intenção. Reinicie o Home Assistant para aplicar as alterações.

No Rhasspy, vá para “Configurações” e faça as seguintes alterações: em “Intent Handling”, selecione “Home Assistant”; em “Home Assistant”, configure a URL (http://localhost:8123 ou o endereço IP do seu Home Assistant, se estiver em outro dispositivo) e a chave de acesso (crie uma chave de acesso de longa duração no Home Assistant, em Perfil do usuário > Tokens de acesso de longa duração). Clique em “Salvar Configurações” e reinicie o Rhasspy.

Criando automações no Home Assistant

Agora que a integração está configurada, vamos criar automações no Home Assistant que respondam às intenções do Rhasspy. No Home Assistant, vá para Configuração > Automações > Adicionar Automação, clique em “Pular” para ir diretamente ao editor YAML, e crie uma automação para ligar dispositivos.

A automação deve ser configurada para ser acionada pelo evento “rhasspy_intent” com a intenção “ligar_dispositivo”. A ação dependerá do tipo de dispositivo: para luzes, use “light.turn_on”; para ventiladores, use “fan.turn_on”; para ar condicionado, use “climate.set_hvac_mode”; para outros dispositivos, use “switch.turn_on”. Você também pode adicionar uma resposta por voz para confirmar que o comando foi entendido.

Crie uma automação similar para desligar dispositivos, usando os serviços apropriados para cada tipo de dispositivo.

Automações avançadas

Podemos criar automações mais avançadas para controle de cenas, consulta de informações e muito mais. Por exemplo, para ativar cenas, a automação seria acionada pela intenção “ativar_cena” e usaria o serviço “scene.turn_on” com a entidade correspondente à cena solicitada.

Para consulta de informações, a automação seria acionada pela intenção “consulta_informacao” e usaria o serviço “tts.speak” para informar o valor do sensor correspondente à informação solicitada.

Dicas para melhorar a integração

Para melhorar a integração entre Rhasspy e Home Assistant, nomeie suas entidades no Home Assistant de forma consistente com os slots do Rhasspy. Sempre inclua uma resposta por voz nas suas automações para confirmar que o comando foi entendido. Adicione condições para verificar se as entidades existem antes de tentar controlá-las. Use o componente “input_boolean” para rastrear estados que podem ser consultados posteriormente.

Dicas avançadas e solução de problemas

Melhorando o reconhecimento de voz

Para melhorar o reconhecimento de voz, posicione o microfone longe de fontes de ruído como ventiladores e alto-falantes. Considere a acústica do ambiente; salas com muitas superfícies duras podem criar eco, dificultando o reconhecimento. Ajuste a sensibilidade do sistema de detecção de palavra de ativação no Rhasspy para encontrar o equilíbrio ideal. Para melhorar o reconhecimento de palavras específicas, considere criar modelos de linguagem personalizados.

Otimizando o desempenho

Se o Raspberry Pi estiver com desempenho lento, considere usar componentes mais leves como PocketSphinx para reconhecimento de fala. Para Raspberry Pi 4, um overclock moderado pode melhorar significativamente o desempenho sem comprometer a estabilidade. Use ferramentas como “htop” para monitorar o uso de CPU e memória, identificando possíveis gargalos. Configure reinicializações periódicas para garantir estabilidade a longo prazo.

Solução de problemas comuns

Se o reconhecimento de fala estiver impreciso, verifique a qualidade do microfone, o posicionamento e o ambiente. Considere treinar novamente o modelo de linguagem com mais exemplos. Se o Rhasspy não responder, verifique os logs do Docker para identificar possíveis erros. Se a integração com Home Assistant falhar, verifique se a API está habilitada e se o token de acesso está correto. Para problemas de áudio, use os comandos “arecord -l” e “aplay -l” para verificar se os dispositivos de áudio estão sendo reconhecidos corretamente.

Expandindo seu sistema

Adicionando múltiplos satélites

Para cobrir uma casa maior, você pode criar um sistema com múltiplos “satélites” – dispositivos que captam áudio em diferentes cômodos e enviam para um servidor central. Configure um Raspberry Pi principal como servidor Rhasspy, configure Raspberry Pis adicionais como clientes, usando a opção “Satélite Rhasspy” nas configurações, e configure cada satélite para usar o servidor principal para processamento de intenções.

Integração com outros sistemas

Além do Home Assistant, o Rhasspy pode ser integrado com Node-RED para fluxos de automação mais complexos, MQTT para comunicação com dispositivos IoT, Zigbee2MQTT para controlar dispositivos Zigbee, e ESPHome para criar dispositivos IoT personalizados.

Recursos adicionais

Você pode criar sua própria palavra de ativação usando ferramentas como Snowboy ou Precise, explorar opções como MaryTTS ou Mozilla TTS para vozes mais naturais, e implementar diálogos de múltiplos turnos usando o gerenciador de diálogo do Rhasspy.

Perguntas Frequentes

P: O Rhasspy consome muitos recursos do Raspberry Pi? R: O consumo de recursos depende dos componentes que você escolher. Com configurações leves como PocketSphinx para reconhecimento de fala, o Rhasspy pode funcionar bem até mesmo em um Raspberry Pi 3. Para configurações mais avançadas com DeepSpeech ou Kaldi, um Raspberry Pi 4 com pelo menos 2GB de RAM é recomendado.

P: Posso usar o Rhasspy em outros idiomas além do português? R: Sim, o Rhasspy suporta vários idiomas, incluindo inglês, espanhol, francês, alemão, italiano, holandês, russo e muitos outros. A qualidade do reconhecimento pode variar dependendo do idioma e dos componentes escolhidos.

P: É possível usar o Rhasspy sem o Home Assistant? R: Absolutamente. Embora a integração com o Home Assistant ofereça muitas vantagens, o Rhasspy pode funcionar de forma independente. Você pode configurá-lo para executar scripts personalizados ou enviar comandos via MQTT quando intenções específicas são reconhecidas.

P: Qual é a distância máxima para o reconhecimento de voz? R: A distância efetiva depende muito do microfone escolhido e do ambiente. Com um bom array de microfones como o ReSpeaker 4-Mic, você pode obter reconhecimento confiável a até 3-5 metros em condições ideais. Em ambientes ruidosos, essa distância pode ser reduzida significativamente.

P: O sistema pode reconhecer diferentes vozes ou usuários? R: O Rhasspy em si não distingue entre diferentes usuários. No entanto, você pode implementar essa funcionalidade usando técnicas de verificação de locutor ou criando perfis diferentes para cada usuário com comandos específicos.

P: Quanto tempo leva para configurar todo o sistema? R: Para um usuário com experiência básica em Linux e Raspberry Pi, o processo completo pode levar de 2 a 4 horas. A maior parte desse tempo é gasta na configuração inicial e na criação de comandos personalizados. Usuários mais experientes podem completar o processo mais rapidamente.

P: O Rhasspy pode controlar dispositivos que não estão no Home Assistant? R: Sim, você pode configurar o Rhasspy para executar scripts personalizados ou enviar comandos via MQTT, HTTP ou WebSockets quando determinadas intenções são reconhecidas. Isso permite controlar praticamente qualquer dispositivo que possa ser acessado por essas interfaces.

Conclusão

Criar seu próprio assistente de voz offline com Rhasspy e Raspberry Pi é um projeto gratificante que oferece privacidade, personalização e independência de internet. Embora exija algum conhecimento técnico e paciência para configurar, os benefícios superam em muito o esforço inicial.

Com o sistema configurado, você terá um assistente de voz totalmente sob seu controle, que pode ser expandido e personalizado conforme suas necessidades evoluem. Você não estará mais limitado pelas decisões corporativas sobre quais recursos implementar ou como seus dados são utilizados.

O mundo da automação residencial DIY está em constante evolução, e ter um assistente de voz local é um componente fundamental para criar uma casa verdadeiramente inteligente e respeitosa com sua privacidade. Experimente, personalize e, o mais importante, divirta-se construindo seu próprio assistente de voz!