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

Detecção de tosse com TinyML no Arduino

Componentes e suprimentos

Arduino Nano 33 BLE Sense
× 1

Aplicativos e serviços online

Edge Impulse Studio

Sobre este projeto


Há uma grande necessidade de soluções baratas e fáceis de implementar para COVID-19 e outras formas de detecção precoce relacionadas à gripe. Juntamente com a ONU, Hackster, Edge Impulse e muitos outros, lançamos recentemente o Desafio Covid Detect &Protect da ONU com o objetivo de criar soluções facilmente implantáveis ​​para a prevenção e detecção de gripe em países em desenvolvimento. Neste tutorial, mostramos como usar o aprendizado de máquina Edge Impulse em um Arduino Nano BLE Sense para detectar a presença de tosse em áudio em tempo real. Construímos um conjunto de dados de amostras de tosse e ruído de fundo e aplicamos um modelo TInyML altamente otimizado para construir um sistema de detecção de tosse que funciona em tempo real em menos de 20 kB de RAM no Nano BLE Sense. Essa mesma abordagem se aplica a muitas outras aplicações de correspondência de padrões de áudio incorporados, por exemplo, cuidados com idosos, segurança e monitoramento de máquinas. Este projeto e conjunto de dados foi originalmente iniciado por Kartik Thakore para ajudar no esforço do COVID-19.





Primeiros passos


Este tutorial tem os seguintes requisitos:
  • Conhecimento básico de desenvolvimento de software e Arduino
  • Arduino IDE ou CLI instalado
  • Celular Android ou iOS
  • Arduino Nano BLE Sense ou placa Cortex-M4 + equivalente com um microfone (opcional)

Usaremos o Edge Impulse, uma plataforma de desenvolvimento online para aprendizado de máquina em dispositivos de ponta. Crie uma conta gratuita inscrevendo-se aqui. Faça login em sua conta e dê um nome ao seu novo projeto clicando no título. Chamamos o nosso de “Tutorial do Arduino para a tosse”.





Coletando o conjunto de dados


A primeira etapa em qualquer projeto de aprendizado de máquina é coletar um conjunto de dados que representa amostras conhecidas de dados que gostaríamos de corresponder em nosso dispositivo Arduino. Para começar, criamos um pequeno conjunto de dados com 10 minutos de áudio em duas classes, “tosse” e “ruído”. Mostraremos como importar este conjunto de dados para o seu projeto Edge Impulse, adicionar suas próprias amostras ou até mesmo iniciar seu próprio conjunto de dados do zero. Este conjunto de dados é pequeno e tem um número limitado de amostras de tosse e ruídos de fundo suaves. Assim, o conjunto de dados é apropriado apenas para experimentação, e o modelo produzido neste tutorial é capaz de diferenciar apenas entre ruído de fundo silencioso e um pequeno intervalo de tosses. Incentivamos você a estender o conjunto de dados com uma gama mais ampla de tosse, ruído de fundo e outras classes, como fala humana, para melhorar o desempenho.

Nota: Forçar-se a tossir é muito difícil para as cordas vocais, tome cuidado ao coletar dados e fazer testes!

Primeiro baixe nosso conjunto de dados de tosse e extraia o arquivo em seu PC em um local de sua escolha:https://cdn.edgeimpulse.com/datasets/cough.zip

Você pode importar este conjunto de dados para seu projeto Edge Impulse usando o Edge Impulse CLI Uploader. Instale o Edge Impulse CLI seguindo estas instruções de instalação.

Abra um terminal ou prompt de comando e navegue até a pasta onde você extraiu o arquivo.

Corre:
  $ edge-Impulse-uploader --clean 
$ edge-Impulse-uploader --category training training / *
$ edge-Impulse-uploader --category testing testing / *

Será solicitado que você forneça seu nome de usuário, senha do Edge Impulse e o projeto ao qual deseja adicionar o conjunto de dados. As amostras do conjunto de dados agora estarão visíveis na página Aquisição de dados página. Ao clicar em uma amostra, podemos ver a aparência da amostra e ouvir o áudio clicando no botão play abaixo de cada gráfico.

10 minutos de amostras de dados de tosse e ruído são suficientes para começar. Você pode opcionalmente estender o conjunto de dados com suas próprias amostras de tosse e ruído de fundo. Podemos coletar novas amostras de dados diretamente de dispositivos da aquisição de dados página. Amostras de áudio no formato WAV também podem ser carregadas usando o Edge Impulse CLI Uploader.

A maneira mais fácil de começar é coletar dados de áudio usando seu telefone celular (tutorial completo aqui). Vá para Dispositivos página e clique no botão ‘+ Conectar um novo dispositivo’ no canto superior direito. Selecione ‘Usar seu telefone celular’. Isso produzirá um código QR exclusivo para abrir um aplicativo da web no navegador do telefone. Tire uma foto do código QR e selecione para abrir o link.

O aplicativo da web se conectará ao seu projeto Edge Impulse e deve ser parecido com este:

Agora podemos coletar amostras de dados de áudio diretamente do telefone da aquisição de dados página de Edge Impulse. Na seção ‘Gravar novos dados’, digite um rótulo de ‘tosse’ ou ‘ruído’, certifique-se de que ‘Microfone’ esteja selecionado como o sensor e clique em ‘Iniciar amostragem’. Seu telefone irá coletar uma amostra de áudio e adicioná-la ao seu conjunto de dados.

A coleta de dados de áudio diretamente da placa Nano BLE Sense também é suportada. Siga estas instruções para instalar o firmware e daemon do Edge Impulse. Assim que o dispositivo estiver conectado ao Edge Impulse, você pode coletar amostras de dados da mesma forma que com seu telefone celular acima.





Criando seu impulso


Em seguida, selecionaremos os blocos de processamento de sinal e aprendizado de máquina, na seção Criar impulso página. O impulso começará em branco, com dados brutos e blocos de recursos de saída. Deixe as configurações padrão de um tamanho de janela de 1000 ms e aumento de janela de 500 ms. Isso significa que nossos dados de áudio serão processados ​​1 s por vez, começando a cada 0,5 s. Usar uma pequena janela economiza memória no dispositivo embutido, mas significa que precisamos de dados de tosse de amostra sem grandes intervalos entre as tosses.

Clique em ‘Adicionar um bloco de processamento’ e selecione Áudio (MFCC) quadra. Em seguida, clique em ‘Adicionar um bloco de aprendizagem’ e selecione a Rede Neural (Keras) quadra. Clique em ‘Salvar impulso’. O bloco de áudio extrairá um espectrograma para cada janela de áudio e o bloco de rede neural será treinado para classificar o espectrograma como uma "tosse" ou "ruído" com base em nosso conjunto de dados de treinamento. Seu impulso resultante será semelhante a este:

Em seguida, geraremos recursos do conjunto de dados de treinamento no MFCC página. Esta página mostra a aparência do espectrograma extraído para cada janela de 1 segundo de qualquer uma das amostras do conjunto de dados. Podemos deixar os parâmetros com seus padrões.

Em seguida, clique no botão ‘Gerar recursos’, que processa todo o conjunto de dados de treinamento com este bloco de processamento. Isso cria o conjunto completo de recursos que serão usados ​​para treinar nossa rede neural na próxima etapa. Pressione o botão ‘Gerar recursos’ para iniciar o processamento; isso levará alguns minutos para ser concluído.

Agora podemos prosseguir para configurar e treinar nossa rede neural no Classificador NN página. A rede neural padrão funciona bem para sons contínuos, como água corrente. A detecção da tosse é mais complicada, portanto, configuraremos uma rede mais rica usando a convolução 2D no espectrograma de cada janela. A convolução 2D processa o espectrograma de áudio de maneira semelhante à classificação de imagens. Pressione o canto superior direito da seção "Configurações de rede neural" e selecione "Alternar para o modo Keras (especialista)".

Substitua a definição de 'Arquitetura de rede neural' pelo código a seguir e defina a configuração de 'Classificação de confiança mínima' para '0,70'. Em seguida, clique no botão ‘Iniciar treinamento’. O treinamento levará alguns segundos.
  import tensorflow as tf 
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, InputLayer, Dropout, Flatten, Reshape, BatchNormalization, Conv2D, MaxPooling2D, AveragePooling2D
de tensorflow.keras.optimizers import Adam
from tensorflow.keras.constraints import MaxNorm
# model arquitetura
model =Sequential ()
model.add (InputLayer ( input_shape =(X_train.shape [1],), name ='x_input'))
model.add (Reshape ((int (X_train.shape [1] / 13), 13, 1), input_shape =( X_train.shape [1],)))
model.add (Conv2D (10, kernel_size =5, ativação ='relu', preenchimento ='mesmo', kernel_constraint =MaxNorm (3)))
model.add (AveragePooling2D (pool_size =2, padding ='mesmo'))
model.add (Conv2D (5, kernel_size =5, ativação ='relu', preenchimento ='mesmo', kernel_constraint =MaxNorm (3 )))
model.add (AveragePooling2D (pool_size =2, padding ='mesmo'))
model.add (Flatten ())
model.add (Dense (classes, ativação ='softmax', nome ='y_pred', kernel_co nstraint =MaxNorm (3)))
# isso controla a taxa de aprendizagem
opt =Adam (lr =0,005, beta_1 =0,9, beta_2 =0,999)
# treina a rede neural
model.compile (loss ='categorical_crossentropy', otimizador =opt, metrics =['precisão'])
model.fit (X_train, Y_train, batch_size =32, epochs =9, validation_data =(X_test, Y_test) , verboso =2)

A página mostrará o desempenho do treinamento e o desempenho no dispositivo, que deve ser assim, dependendo do seu conjunto de dados:

Nosso algoritmo de detecção de tosse do Arduino agora está pronto para ser testado!





Treinamento e teste


A classificação ao vivo A página nos permite testar o algoritmo com os dados de teste existentes que vieram com o conjunto de dados ou por streaming de dados de áudio de seu telefone celular ou dispositivo Arduino. Podemos começar com um teste simples, escolhendo qualquer uma das amostras de teste e pressionando 'Carregar amostra'. Isso classificará a amostra de teste e mostrará os resultados:

Também podemos testar o algoritmo com dados ao vivo. Comece com seu telefone celular, atualizando a página do navegador em seu telefone que abrimos anteriormente. Em seguida, selecione seu dispositivo na seção ‘Classificar novos dados’ e pressione ‘Iniciar amostragem’. Você pode transmitir amostras de áudio de forma semelhante do seu Nano BLE Sense quando conectado ao projeto por meio do edge-impulso-daemon como na etapa de coleta de dados.





Implantação


Podemos facilmente implantar nosso algoritmo de detecção de tosse no telefone celular. Vá para a janela do navegador em seu telefone e atualize, em seguida, pressione o botão ‘Alternar para o modo de classificação’. Isso irá construir automaticamente o projeto em um pacote WebAssembly e executá-lo em seu telefone continuamente (nenhuma nuvem necessária depois disso, mesmo ir para o modo avião!)

Em seguida, podemos implantar o algoritmo para o Nano BLE Sense, indo para Implantação página. Selecione ‘Arduino Nano 33 BLE Sense’ em ‘Build firmware’ e clique em ‘Build’.

Isso criará um firmware completo para o Nano BLE Sense, incluindo seu algoritmo mais recente. Siga as instruções na tela para atualizar sua placa Arduino com o binário.

Uma vez que o Arduino é ativado, podemos abrir uma porta serial para o dispositivo enquanto ele está conectado ao USB a 115, 200 baud. Assim que a porta serial estiver aberta, pressione Enter para obter um prompt e, em seguida:
 > AT + RUNIMPULSE 
Configurações de inferência:
Intervalo:0,06 ms.
Tamanho do quadro:16000
Comprimento da amostra:1000 ms.
Não. de classes:2
Iniciando a inferência, pressione 'b' para interromper
Gravação ...
Gravação feita
Previsões (DSP:495 ms., Classificação:84 ms., Anomalia :0 ms.):
tosse:0,01562
ruído:0,98438
Iniciando a inferência em 2 segundos ...
Gravação ...
Gravação feita
Predições (DSP:495 ms., Classificação:84 ms., Anomalia:0 ms.):
tosse:0,01562
ruído:0,98438
Iniciando a inferência em 2 segundos ...
Gravação ...
Gravação feita
Previsões (DSP:495 ms., Classificação:84 ms., Anomalia:0 ms.):
tosse:0,86719
ruído:0,13281
Começando a inferência em 2 segundos ...
Gravação ...
Gravação feita
Previsões (DSP:495 ms., Classificação:84 ms., Anomalia:0 ms.) :
tosse:0,01562
ruído:0,98438





Trabalho futuro


O céu é o limite com TinyML, sensores e Edge Impulse no Arduino, aqui estão algumas ideias para trabalhos futuros:
  • Estenda o conjunto de dados padrão com sua própria tosse e sons de fundo, lembre-se de treinar periodicamente e teste. Você pode configurar testes de unidade na página Teste para garantir que o modelo ainda está funcionando conforme é estendido.
  • Adicione uma nova classe e dados para sons humanos que não sejam tosse, como fala ao fundo, bocejo etc.
  • Comece com um novo conjunto de dados, coletando amostras de áudio para detectar algo novo. Dica:você pode fazer upload apenas dos dados da classe de ruído deste conjunto de dados para começar!
  • A partir dessas instruções, implante na Biblioteca Arduino como parte de um Arduino Sketch para mostrar a detecção de tosse usando o LED ou um display
  • Use outros sensores, como o acelerômetro de 3 eixos do Nano BLE Sense, seguindo este tutorial.

Processo de manufatura

  1. Monitoramento de CO2 com Sensor K30
  2. Comunicação para surdos-cegos com 1Sheeld / Arduino
  3. Aceitar moeda de controle com Arduino
  4. Arduino com Bluetooth para controlar um LED!
  5. Sensor capacitivo de impressão digital com um Arduino ou ESP8266
  6. Brincando com Nextion Display
  7. Braço robótico controlado por Nunchuk (com Arduino)
  8. Determinando a saúde das plantas com TinyML
  9. Sistema de monitoramento e detecção de incêndios florestais (com alertas SMS)
  10. Medindo a radiação solar com Arduino