Detecção de palavra-chave TinyML para controle de luzes RGB
Componentes e suprimentos
| × | 1 |
Aplicativos e serviços online
|
Sobre este projeto
A premissa
O aprendizado de máquina no limite é extremamente útil para criar dispositivos que podem realizar tarefas "inteligentes" com muito menos programação e fluxogramas lógicos em comparação com o código tradicional. É por isso que eu queria incorporar a detecção de palavras-chave no limite, que pode reconhecer certas palavras e, em seguida, executar uma tarefa com base no que foi dito.
Hardware
Este projeto tem apenas um componente:um Arduino Nano 33 BLE Sense. A mágica real acontece no modelo de aprendizado de máquina. O Arduino Nano 33 BLE Sense está cheio de sensores, incluindo um microfone, IMU de 9 eixos, sensor ambiental e um sensor de gesto / proximidade / cor / luz ambiente (APDS-9960). O microcontrolador é um nRF52840 que funciona a 64 MHz e contém 1 MB de memória flash e 256 KB de RAM. Este projeto também usa seu LED RGB integrado para exibir a cor atual.
Configurando o Edge Impulse
Comecei criando um novo projeto no Edge Impulse e depois instalei a ferramenta Edge Impulse CLI. Para obter mais instruções sobre como fazer isso, visite a página de instruções de instalação. Isso permite que o Arduino Nano se comunique com o serviço de nuvem para receber comandos e enviar dados do sensor automaticamente. Eu baixei o firmware mais recente do Edge Impulse e o atualizei para a placa clicando duas vezes no botão reset para fazê-lo entrar no modo bootloader. Então executei
flash_windows.bat
para transferi-lo. No prompt de comando, executei o
edge-Impulse-daemon
e seguiu o assistente para configurá-lo. Agora o Nano aparece na lista de dispositivos do projeto, o que permite que as amostras sejam coletadas e carregadas como parte do conjunto de dados de treinamento / teste.
Coletando Amostras
Treinar um modelo de aprendizado de máquina requer dados, e muitos deles. Eu queria ter os seguintes modos para a faixa de LED RGB:
- Ligado
- Desligado
- vermelho
- Verde
- azul
Eu obtive cerca de 1 minuto de som para cada modo em que disse repetidamente a palavra em intervalos de 1 a 2 segundos e dividi-os.
Mas apenas ter essas amostras não é suficiente, já que o ruído de fundo e outras palavras darão uma leitura falsa. Felizmente, o Edge Impulse já fornece um conjunto de dados pré-construído para ruído e palavras 'desconhecidas', então usei a ferramenta "Upload de dados existentes" para fazer upload desses arquivos de áudio nos dados de treinamento.
Por fim, rebalanceei o conjunto de dados para ter a divisão 80-20 recomendada para dados de treinamento e teste, respectivamente.
Treinando o modelo
Agora, munido de uma hora de dados de treinamento e muitos rótulos, era hora de treinar um modelo. O impulso que projetei leva o áudio como dados de série temporal com um tamanho de janela de 1 segundo e um aumento de janela de 500 ms. Em seguida, ele passa por um bloco MFCC em um bloco de rede neural Keras.
O bloco MFCC permite configurar como o áudio será processado, junto com um espectograma que mostra as frequências de forma visual.
Deixei as configurações da rede neural como padrão, mas também fiz algumas modificações. Primeiro, alterei o limite mínimo de confiança de 0,80 para 0,70 e adicionei um pouco de aumento de dados na forma de ruído adicional e faixas de tempo de mascaramento. Isso ajuda o NN a evitar um ajuste excessivo do modelo, pois ele possui dados mais diversos para trabalhar.
Implantando no Arduino Nano 33 BLE Sense
O Arduino Nano 33 BLE Sense atua como um microfone sempre ligado que faz a amostragem contínua do áudio e detecta se uma das palavras-chave foi falada. Assim que uma for encontrada, a palavra-chave é convertida em um índice que é usado para decodificar a cor desejada. Para a palavra-chave on ou off, o LED é definido como preto ou cinza claro.
Eu baixei o modelo como uma biblioteca e o adicionei ao IDE do Arduino, então compilei e atualizei o código para o Nano.
Código
- RGBLEDKeywordDetection
RGBLEDKeywordDetection C / C ++
/ * Exemplos do Edge Impulse Arduino * Copyright (c) 2020 EdgeImpulse Inc. * * A permissão é concedida, gratuitamente, a qualquer pessoa que obtenha uma cópia * deste software e arquivos de documentação associados (o "Software"), negociar * no Software sem restrições, incluindo, sem limitação, os direitos * de usar, copiar, modificar, mesclar, publicar, distribuir, sublicenciar e / ou vender * cópias do Software e permitir que pessoas a quem o Software seja * fornecido para tanto, sujeito às seguintes condições:* * O aviso de copyright acima e este aviso de permissão devem ser incluídos em * todas as cópias ou partes substanciais do Software. * * O SOFTWARE É FORNECIDO "COMO ESTÁ", SEM QUALQUER TIPO DE GARANTIA, EXPRESSA OU * IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, * ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM NENHUMA HIPÓTESE OS * AUTORES OU TITULARES DOS DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA * RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, DELITO OU DE OUTRA FORMA, DECORRENTE DE, * FORA DE OU EM CONEXÃO COM O SOFTWARE OU USO OU OUTRO NEGOCIAÇÕES NO * SOFTWARE. * /// Se o seu alvo é limitado na memória, remova esta macro para economizar 10K RAM # define EIDSP_QUANTIZE_FILTERBANK 0 / ** * Defina o número de fatias por janela do modelo. Por exemplo. uma janela de modelo de 1000 ms * com fatias por janela de modelo definida como 4. Resulta em um tamanho de fatia de 250 ms. * Para mais informações:https://docs.edgeimpulse.com/docs/continuous-audio-sampling * / # define EI_CLASSIFIER_SLICES_PER_MODEL_WINDOW 3 / * Inclui ------------------- --------------------------------------------- * / # inclui#include #include
Processo de manufatura
- Dicas de segurança IIoT e tendências para 2020
- Computação em nuvem e borda para IoT:um breve histórico
- Por que a computação de borda para IoT?
- Kontrons KBox A-150-WKL para aplicativos IoT Edge com uso intensivo de dados
- Benefícios do Edge Computing para cristalização de IA
- Quatro etapas para garantir o sucesso em Edge Computing
- Microsoft lança Azure Edge Zones para aplicativos 5G
- A necessidade de código aberto na borda (eBook)
- Sistema de detecção química para baixos níveis de concentração
- 3 razões para a manutenção de dispositivos de detecção de gás