Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Detector de linguagem TinyML baseado em Edge Impulse e Arduino

Componentes e suprimentos

Arduino Nano 33 BLE Sense
× 1
Dispositivos de Controle Nacional PCA9685 Válvula Proporcional de Driver de 8 canais 8W 12V FET Controlador com interface I2C
× 1
Micro servo motor SG90
× 3
Clipe de bateria 9V
× 1

Ferramentas e máquinas necessárias

Impressora 3D (genérica)
Ferro de soldar (genérico)

Aplicativos e serviços online

Edge Impulse Studio
Arduino IDE
Autodesk Fusion 360

Sobre este projeto





Visão geral


A ideia deste projeto é criar um classificatório de linguagem, utilizando uma rede neural / deep learning implementada em um microcontrolador. O dispositivo identificará uma palavra para os idiomas italiano, inglês e França. As palavras a serem reconhecidas são " si "para o italiano," oui "para os franceses, e" sim "para o inglês. O dispositivo está ouvindo continuamente e assim que uma das 3 palavras for reconhecida, surge a bandeira do idioma associado.

O projeto é baseado nos dois componentes principais:o microcontrolador Arduino Nano 33 BLE Sense e a plataforma de desenvolvimento Edge Impulse Studio.

A implementação do projeto seguiu estas etapas:
  • Amostragem / criação do conjunto de dados
  • Projete o modelo
  • Treinamento do modelo
  • Testando o modelo
  • Personalize para o hardware
  • Implantação do modelo e sua personalização
  • Construa o dispositivo final (o hardware em torno do modelo).









Amostragem / Criação do conjunto de dados


O conjunto de dados é composto pela gravação de 3 palavras (oui, si, sim) globalmente com duração aproximada de 30 minutos (10 minutos para cada palavra).

Para cada palavra foi criado um arquivo de som contínuo, onde a mesma palavra foi repetida continuamente, então usando o aplicativo Audacity o arquivo foi dividido em vários arquivos cada um com a duração de um segundo. Cada arquivo contém um exemplo da palavra.

Esses arquivos foram carregados para o impulso do edge e rotulados de acordo com a palavra.

Além desses arquivos, outro conjunto de arquivos de gravação com a duração de 1 segundo foi carregado e rotulado como ruído de fundo.

Globalmente, os dados de treinamento foram compostos por 33 minutos (10 minutos para cada palavra e 3 minutos para o ruído de fundo)





Projete o modelo


O modelo foi implementado aproveitando a plataforma de impulso de borda, onde a maioria dos algoritmos necessários já estavam definidos e diminuídos.

A primeira etapa para criar o modelo é transformar o som em uma série temporal. Em seguida, a série temporal é particionada com um tamanho de janela de tempo predefinido.

(Esta primeira transformação é mostrada no lado vermelho da imagem abaixo).

A segunda etapa é utilizar a técnica de processamento de sinais, neste caso o MFCC (Mel Frequency Cepstral Coefficients), para extrair as feições das séries temporais que melhor caracterizam cada uma das 4 classes (3 palavras + fundo).

Abaixo um exemplo da transformação MFCC e seus coeficientes.

A convolução da série temporal e os coeficientes são usados ​​para alimentar redes neurais. Finalmente, a saída das redes neurais fornece uma probabilidade de pertencer a cada classe.

Abaixo, uma visão geral da implementação da rede neural e seus desempenhos de classificação.





Treinamento - Personalize para o Arduino Nano 33 BLE Sense


Para o treinamento e para a personalização do modelo final, uma nova opção está disponível no Edge Impulse Studio chamada " EON Tuner ". Ele permite escolher a arquitetura ideal para um aplicativo de aprendizado de máquina embarcado.

Ele executa muitas instâncias de modelos possíveis em paralelo, cada instância com uma configuração diferente (técnica digital de sinal diferente e arquiteturas de redes neurais diferentes).

Esta opção requer apenas algumas informações para ser executada:
  • O " Alvo "que representa o tipo de modelo (neste caso" Spotting de palavras-chave ")
  • O hardware em que o aplicativo é executado (neste caso " Arduino Nano 33 BLE Sense (Cortex-M4F 64 MHz) ".

Para cada instância, ele fornece algumas métricas de desempenho de classificação, o tempo que leva para o cálculo, a quantidade de memória RAM e o espaço do sistema de arquivos usado no sistema de arquivos do microcontrolador.

Para este projeto selecionamos as 5 melhores instâncias para a acurácia da classificação e delas foi escolhida a mais rápida.





Teste


O teste foi realizado através da coleta de um novo conjunto de arquivos do gravador e verificação da qualidade da classificação.

Uma vez que foi verificado que a classificação estava correta. Passamos para a próxima etapa da implementação, a implantação final.





Implantação


A implantação graças ao estúdio de impulso de borda foi bastante direta.

Foi selecionada a opção de biblioteca Arduino entre as opções de implantação. Isso nos dá um arquivo arduino C padrão do modelo, que pode ser personalizado para nossas necessidades.

Uma vez concluída a construção pelo edge-boost, um arquivo zip é criado e baixado na máquina local, bastando para isso ser importado no Arduino Ide para a customização final.





Código


O código está disponível no link. O código é baseado no código baixado do Edge-Impulse com poucas personalizações, listado abaixo.

1. Foi adicionada a biblioteca Adafruit_PWMServoDriver.h para conduzir os servos anexados às bandeiras.

2. Foi definida a função servos_selector para coordenar os servos de acordo com os resultados da classificação.
  void servos_selector (int iter) {
time_now =millis ();
delta =time_now - time_was;
if (delta> 2000) {
time_was =time_now;
switch (iter) {
case 0:
pwm.setPWM (0, 0, 350);
delay (500);
pwm.setPWM ( 0, 0, 200);
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
quebrar;
caso 1:
pwm.setPWM (1, 0, 350);
Serial.println ("2222");
atraso (500);
pwm.setPWM (0, 0, 200 );
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
quebrar;
caso 2:
pwm .setPWM (2, 0, 350);
Serial.println ("333");
atraso (500);
pwm.setPWM (0, 0, 200);
pwm.setPWM (1, 0, 200);
pwm.setPWM (2, 0, 200);
quebrar;
}
}
}

3. Finalmente, foi adicionada uma condição IF que invoca o servos_select função baseada em " result.classification "objeto.
  for (size_t ix =0; ix  ei_printf ("% s:% .5f \ n", result.classification [ix] .label, 
result.classification [ix] .value);
}

#if EI_CLASSIFIER_HAS_ANOMALY ==1
ei_printf ("pontuação de anomalia:% .3f \ n", result.anomaly);
#endif
print_results =0;
}
if (result.classification [1] .value> 0,80) {
servos_selector (0);
}
else if (result.classification [2] .value> 0,80) {
servos_selector (1);
}
else if (result.classification [3] .value> 0,80) {
servos_selector (2);
}
}





Circuitos elétricos


O circuito elétrico é baseado no microcontrolador Arduino Nano 33 BLE Sense e está utilizando um PCA9685 para drivers de 3 servos.

A carga de trabalho PCA9685 é suportada por uma bateria externa de 9v.

Isso é tudo.

Código

código
https://github.com/EnzoCalogero/Tensorflow_Lite_embeded/tree/main/nano_sense_EdgeImpulse/language_detection/nano_ble33_sense_microphone_continuous

Peças personalizadas e gabinetes

Esquemas

languagedetection_9RxXhRX5sj.fzz

Processo de manufatura

  1. Jogo Arduino Gyroscope com MPU-6050
  2. Dados digitais Arduino
  3. Homem de Ferro
  4. Encontre-me
  5. Controle do umidificador Arduino
  6. Sonar usando arduino e exibição no IDE de processamento
  7. MobBob:DIY Arduino Robot Controlado por Smartphone Android
  8. Arduino Audio Reactive Desk Light
  9. NeoMatrix Arduino Pong
  10. Joystick Arduino