- Componentes necessários
- Diagrama de circuito
- Criação do conjunto de dados para máquina de detecção de tosse
- Treinar o modelo e ajustar o código
COVID19 é realmente uma pandemia histórica que afeta gravemente o mundo inteiro e as pessoas estão construindo muitos novos dispositivos para lutar contra ela. Também construímos uma máquina de higienização automática e uma pistola térmica para triagem de temperatura sem contato. Hoje vamos construir mais um dispositivo para ajudar no combate ao Coronavirus. É um sistema de detecção de tosse, que pode distinguir entre ruído e som de tosse e pode ajudar a localizar o suspeito Corona. Para isso, ele usará técnicas de aprendizado de máquina.
Neste tutorial, vamos construir um sistema de detecção de tosse usando o Arduino 33 BLE Sense e o Edge Impulse Studio. Ele pode diferenciar entre ruído de fundo normal e tosse em áudio em tempo real. Usamos o Edge Impulse Studio para treinar um conjunto de dados de amostras de tosse e ruído de fundo e construir um modelo TInyML altamente otimizado, que pode detectar um som de tosse em tempo real.
Componentes necessários
Hardware
- Sentido Arduino 33 BLE
- CONDUZIU
- Jumper Wires
Programas
- Estúdio Edge Impulse
- IDE Arduino
Cobrimos um tutorial detalhado sobre o Arduino 33 BLE Sense.
Diagrama de circuito
Diagrama de circuito para detecção de tosse usando o Arduino 33 BLE Sense é fornecido abaixo. A peça Fritzing para Arduino 33 BLE não estava disponível, então usei o Arduino Nano, pois ambos têm a mesma pinagem.
O terminal positivo do LED é conectado ao pino digital 4 do Arduino 33 BLE sense e o terminal negativo é conectado ao pino GND do Arduino.
Criação do conjunto de dados para máquina de detecção de tosse
Como mencionado anteriormente, estamos usando o Edge Impulse Studio para treinar nosso modelo de detecção de tosse. Para isso, temos que coletar um conjunto de dados que contém as amostras de dados que gostaríamos de reconhecer em nosso Arduino. Como o objetivo é detectar a tosse, você precisará coletar algumas amostras disso e outras amostras de ruído, para que possa distinguir entre tosse e outros ruídos.
Criaremos um conjunto de dados com duas classes “tosse” e “ruído”. Para criar um conjunto de dados, crie uma conta do Edge Impulse, verifique sua conta e inicie um novo projeto. Você pode carregar as amostras usando seu celular, sua placa Arduino ou pode importar um conjunto de dados para sua conta de impulso de borda. A maneira mais fácil de carregar as amostras em sua conta é usando seu telefone celular. Para isso, você precisa conectar seu celular com o Edge Impulse.
Para conectar o seu celular, clique em ' Dispositivos ' e depois clique em ' Conectar um Novo Dispositivo' .
Agora na próxima janela, clique em ' Use seu celular' , e um código QR aparecerá. Digitalize o código QR com seu telefone celular usando o Google Lens ou outro aplicativo de leitura de código QR.
Isso conectará seu telefone ao estúdio Edge Impulse.
Com seu telefone conectado ao Edge Impulse Studio, agora você pode carregar suas amostras. Para carregar as amostras, clique em ' Aquisição de dados' . Agora, na página de aquisição de dados, insira o nome do rótulo, selecione o microfone como sensor e insira o comprimento da amostra. Clique em ' Iniciar amostragem' para iniciar a amostragem de uma amostra de 40 segundos. Em vez de se forçar a tossir, você pode usar amostras de tosse online de diferentes comprimentos. Registre um total de 10 a 12 amostras de tosse de diferentes comprimentos.
Depois de enviar as amostras de tosse, agora defina o rótulo como 'ruído' e colete outras 10 a 12 amostras de ruído.
Esses exemplos são para o módulo de Treinamento, nas próximas etapas coletaremos os Dados de Teste. Os dados de teste devem ser pelo menos 30% dos dados de treinamento, então colete as 3 amostras de 'ruído' e 4 a 5 amostras de 'tosse'.
Em vez de coletar seus dados, você pode importar nosso conjunto de dados para sua conta do Edge Impulse usando o Edge Impulse CLI Uploader.
Para instalar o CLI Uploader, primeiro baixe e instale o Node.js em seu laptop. Depois disso, abra o prompt de comando e digite o comando abaixo:
npm install -g edge-boost-cli
Agora baixe o dataset (Dataset Link) e extraia o arquivo na pasta do seu projeto. Abra o prompt de comando, navegue até o local do conjunto de dados e execute os comandos abaixo:
edge-impulso-uploader --clean edge-impulso-uploader --categoria treinamento / *. json edge-impulso-uploader --categoria treinamento / *. cbor edge-impulso-uploader --categoria teste teste / *. json edge-impulso-uploader - teste de categoria / *. cbor
Treinar o modelo e ajustar o código
Como o conjunto de dados está pronto, agora vamos criar um impulso para os dados. Para isso, vá para a página ' Criar impulso '.
Agora na página ' Criar impulso' , clique em ' Adicionar um bloco de processamento' . Na próxima janela, selecione o bloco de Áudio (MFCC). Depois disso, clique em ' Adicionar um bloco de aprendizagem' e selecione o bloco Rede Neural (Keras). Em seguida, clique em ' Salvar Impulso' .
Na próxima etapa, vá para a página MFCC e clique em ' Gerar recursos' . Ele irá gerar blocos MFCC para todas as nossas janelas de áudio.
Depois disso, vá para a página ' NN Classifier' e clique nos três pontos no canto superior direito de ' Neural Network settings' e selecione ' Switch to Keras (expert) mode' .
Substitua o original pelo código a seguir e altere a 'Classificação de confiança mínima' para '0,70'. Em seguida, clique no botão ' Iniciar treinamento' . Ele começará a treinar seu modelo.
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 architecture model = Sequential () model.add (InputLayer (input_shape = (X_train.shape,), name = 'x_input')) model.add (Reshape ((int (X_train.shape / 13), 13, 1), input_shape = (X_train.shape,))) model.add (Conv2D (10, kernel_size = 5, activation = 'relu', padding = 'same', 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', name = 'y_pred', kernel_constraint = MaxNorm (3))) # isto controla a taxa de aprendizagem opt = Adam (lr = 0,005, beta_1 = 0,9, beta_2 = 0,999) # treinar a rede neural model.compile (loss = 'categorical_crossentropy', otimizador = opt, metrics =) model.fit (X_train, Y_train, batch_size = 32, épocas = 9, validação_dados = (X_test, Y_test), verboso = 2)verboso = 2)verboso = 2)
Após treinar o modelo, ele mostrará o desempenho do treinamento. Para mim, a precisão foi de 96,5% e a perda de 0,10, é bom prosseguir.
Agora que nosso modelo de detecção de tosse está pronto, vamos implantar esse modelo como uma biblioteca Arduino. Antes de baixar o modelo como uma biblioteca, você pode testar o desempenho acessando a página ' Classificação ao vivo '.
Vá para a página ' Implementação ' e selecione ' Biblioteca Arduino' . Agora role para baixo e clique em 'Build' para iniciar o processo. Isso criará uma biblioteca Arduino para o seu projeto.
Agora adicione a biblioteca em seu Arduino IDE. Para isso, abra o Arduino IDE e clique em Sketch> Include Library> Add.ZIP library.
Em seguida, carregue um exemplo acessando Arquivo> Exemplos> Nome do seu projeto - Edge Impulse> nano_ble33_sense_microphone.
Faremos algumas alterações no código para que possamos emitir um som de alerta quando o Arduino detectar tosse. Para isso, uma campainha é conectada ao Arduino e sempre que detecta tosse, o LED pisca três vezes.
As alterações são feitas nas funções void loop () onde é impresso os valores de ruído e tosse. No código original, ele imprime os rótulos e seus valores juntos.
para (size_t ix = 0; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {ei_printf ("% s:%.5f \ n", result.classification.label, result.classification.value); }
Vamos salvar os valores de ruído e tosse em diferentes variáveis e comparar os valores de ruído. Se o valor do ruído ficar abaixo de 0,50, isso significa que o valor da tosse é maior do que 0,50 e fará o som. Substitua o código original para loop () por este:
para (size_t ix = 1; ix <EI_CLASSIFIER_LABEL_COUNT; ix ++) {Serial.print (result.classification.value); float Data = result.classification.value; if (Dados <0,50) {Serial.print ("Tosse detectada"); alarme(); }}
Depois de fazer as alterações, carregue o código em seu Arduino. Abra o monitor serial em 115200 baud.
Portanto, é assim que uma máquina de detecção de tosse pode ser construída. Não é um método muito eficaz para localizar qualquer suspeito de COVID19, mas pode funcionar muito bem em uma área lotada.
Um vídeo de trabalho completo com biblioteca e código é fornecido abaixo: