Time
O time responsável pela execução do projeto é composto por colaboradores do Grupo de Arquitetura de Soluções (GAS) do Instituto Atlântico com especialidade em diferentes áreas chaves do desafio proposto: Engenharia de Hardware, Software Embarcado e Aprendizagem de Máquina.
- Alex Fernandes Figueirêdo – Graduação em Engenharia Elétrica pela Universidade Federal de Campina Grande com especialização em Informática de Sistemas Embarcados pela École nationale Supérieure d’Ingénieurs des Systèmes Avancés et Réseaux (Grenoble INP – ESISAR) e mestrado em andamento em Ciência da Computação (Inteligência Artificial) pela Universidade Federal do Amazonas. Possui experiência profissional em design e desenvolvimento de software embarcado de tempo real (FreeRTOS) para microcontroladores e desenvolvimento de aplicações para Linux Embarcado (User Space e Kernel Space);
- Francisco das Chagas Fontenele Marques Junior – Graduação em Ciência da Computação pela Universidade Estadual do Piauí com mestrado em andamento em Ciência da Computação pela Universidade Estadual do Ceará. Possui experiência profissional em processamento de imagens, visão computacional, ciência de dados, aprendizado de máquina e aprendizado profundo;
- Marcus Vinicius Zanon Castelo Branco – Graduação em Engenharia de Controle e Automação pela Universidade de Fortaleza. Possui ampla experiência profissional em projetos de Engenharia de Hardware.
Descrição do projeto
Com base em dados de 2022 sobre os 5 anos de Indústria 4.0 no Brasil, divulgados pela Confederação Nacional da Indústria (CNI), a digitalização traz aumento de produtividade, melhoria da qualidade dos produtos e diminuição dos custos de produção. No entanto, enquanto 7% das empresas industriais envolvidas na pesquisa utilizam 10 ou mais das tecnologias avaliadas, 26% das empresas industriais utilizam apenas de 1 a 3 dessas tecnologias. Esses números comprovam uma grande disparidade tecnológica presente na indústria nacional. Além disso, esta mesma pesquisa aponta que o alto custo de implantação é percebido como a maior barreira interna à empresa para a adoção de tecnologias digitais.
É neste contexto que este projeto busca contribuir com respostas para o seguinte desafio da indústria nacional:
Como podemos desenvolver uma solução de baixo custo que acelere o processo de digitalização da indústria brasileira com foco nos três principais benefícios enxergados pelo setor: aumento de produtividade, a melhoria da qualidade dos produtos e a diminuição dos custos de produção?
Com os resultados obtidos, o projeto pretende demonstrar a viabilidade de utilização de dispositivos de baixo custo para habilitar e acelerar a digitalização de linhas de produção industriais. Para isso, alguns dos pontos críticos e desafios que precisaram ser superados durante o desenvolvimento da solução são:
- Portabilidade dos modelos inteligentes do estado da arte para o módulo ESP32-S3-Eye ou mesmo para frameworks de TinyML disponíveis;
- Performance (acurácia e latência) na detecção de defeitos pelos modelos inteligentes em execução na ESP32-S3-Eye;
- Prototipagem de hardware e mecânica necessários para montagem de uma ambiente que simule uma linha/esteira de produção.
Superados os desafios apresentados, a abordagem proposta possui um conjunto de vantagens que podem ser exploradas com a sua implantação na indústria nacional:
- Aplicação de uma solução de baixo custo no cenário de um problema de alta relevância para a indústria;
- Validação de um fluxo ponta-a-ponta de apoio a tomada de decisão inteligente orientada a dados com uso de conceitos inovadores de inteligência artificial na borda em dispositivos de IoT (TinyML);
- Solução integrada com a nuvem, habilitando a exploração de todo o ecossistema de serviços já disponíveis nessas plataformas que podem ser utilizados, entre outras coisas, para realizar manutenções preditivas, análise e previsão de desempenho da linha de produção.
Visão Geral da Solução
De forma a atender aos desafios discutidos anteriormente, propomos a utilização do módulo ESP32-S3-EYE da Espressif para demonstrar a viabilidade de utilização de dispositivos de baixo custo na construção de soluções para a indústria que habilitem a implantação de processos de controle de qualidade e apoio a tomada de decisão inteligente orientado a dados, como o apresentado a seguir:
De forma mais específica, a solução proposta explora o cenário de detecção e remoção de produtos defeituosos em uma linha de produção, assim como a integração e análise dos dados resultantes deste processo por meio de serviços de IoT, análise e monitoramento de dados disponíveis em plataformas de nuvem. Para isso, o módulo ESP32-S3-EYE da Espressif é utilizado para captura de imagens e identificação de produtos defeituosos em tempo-real por meio de modelos inteligentes otimizados e embarcados na plataforma de hardware (TinyML).
Para demonstrar a viabilidade da solução para aplicação em um cenário real, foi realizada a prototipação de um ambiente para simular a operação de uma esteira de produtos em uma linha de produção. Este ambiente é composto por um carrossel com velocidade controlada por motor, permitindo a simulação da passagem de produtos em frente ao módulo ESP32-S3-EYE e habilitando a exploração de desafios relacionados à velocidade da linha de produção, a acurácia e a latência de classificação de produtos pela solução proposta. Os eventos de detecção de defeitos gerados pelos algoritmos inteligentes em execução na ESP32-S3-EYE são publicados em um Broker de mensagens (MQTT), que executa em um Gateway de IoT local, e são consumidos pelo firmware de controle embarcado em um segundo módulo da Espressif, o ESP32.
Com base nos eventos de classificação de produtos, o firmware de controle desenvolvido e implantado no módulo ESP32 aciona um mecanismo para remoção dos produtos do carrossel, simulando assim o cenário de controle automático de qualidade em uma linha de produção real. Além disso, os eventos de classificação de produtos são enviados para uma plataforma de nuvem (ex.: AWS), habilitando a utilização de serviços de armazenamento, análise e visualização de métricas relevantes do processo produtivo para apoio a tomada de decisão inteligente orientada a dados. A seguir, apresentamos um vídeo com o resultado final da solução desenvolvida, assim como um diagrama de arquitetura com os principais componentes da solução e o seu fluxo de operação.
Ao longo do restante deste documento detalharemos cada um dos principais aspectos da solução apresentada e as técnicas utilizadas para o seu desenvolvimento.
Projeto de Hardware e Mecânica
A seguir é apresentada uma lista com as placas de desenvolvimento que foram utilizadas para implantação e execução dos componentes de firmware e software embarcado que compõem a solução. Além disso, uma lista com os principais componentes de hardware utilizados no desenvolvimento da solução está disponível no APÊNDICE A.
| Módulo de TinyML | IoT Gateway | Módulo de Controle |
|---|---|---|
| ESP32-S3-Eye | Raspberry PI 3 Model B | ESP32-DevKitC |
| | | |
- Módulo de TinyML (ESP32-S3-Eye) – Plataforma de desenvolvimento para AIoT/TinyML com dimensões reduzidas (6x3cm) e baixo custo ($50), produzida pela Espressif tomando como base o SoC ESP32-S3 e o framework ESP-WHO para desenvolvimento de aplicações de IA. O kit de desenvolvimento inclui camera de 2MP, display LCD e microfone que podem ser usados em aplicações de reconhecimento o de audio e imagem. Além disso, a plataforma possui 8 MB Octal PSRAM e 8 MB flash para armazenamento, conectividade Wifi e Bluetooth LE. Com isso, esta placa atendo aos requisitos necessários para captura de imagens e classificação de produtos em tempo-real na solução proposta;
- IoT Gateway (Raspberry PI 3 Model B) – Single board computer executando o Raspbian, uma distribuição de Linux embarcado baseada em Debian. Com uma CPU 64bits Quad Core 1.2GHz (Broadcom BCM2837), 1GB RAM e conectividade Wifi, esta placa atende as necessidades do IoT Gateway presente na solução proposta, sendo usada para execução de um Broker MQTT local e sincronização de dados com a plataforma de nuvem;
- Módulo de Controle (ESP32-DevKitC) – Plataforma de desenvolvimento para IoT de baixíssimo custo ($10) desenvolvida pela Espressif. Com uma arquitetura Xtensa dual-core 32-bit, 240 MHz, 512KB RAM, 4MB de Flash e conectividade Wifi, esta placa atende a necessidade do módulo de controle da solução proposta, sendo usada na interface e controle do motor de giro do carrossel, assim como para controlar o motor integrado ao mecanismo de rejeito de produtos defeituosos.
O carrossel usado para simular a esteira de uma linha de produção foi produzido por meio de manufatura aditiva, com uso da impressora 3D Creality Ender 3 e do software FreeCAD. Conforme apresentado a seguir, foi realizado um projeto customizado com modelagem 3D do carrossel:
O mecanismo de remoção de produtos defeituosos do carrossel foi projetado e implementado através de um Servo Motor e um conjunto formado por Laser e Sensor de Luminosidade para detectar a passagem de produtos. Já para a rotação do carrossel, foi utilizado um Motor de Passo. O esquemático, o funcionamento do hardware de controle do carrossel e o protótipo final com todos os componentes montados e integrados são apresentados a seguir:


Projeto de Firmware e Software Embarcado
IoT Gateway com broker MQTT e integração com a nuvem
A solução proposta possui um IoT Gateway implementado por meio de um conjunto de componentes/aplicações implantados na borda em um Single Board Computer. Os principais objetivos da solução alcançados por meio do IoT Gateway são:
- Disponibilizar um broker de mensagens (MQTT) local que habilite um canal de comunicação de baixa latência para que os eventos de classificação de produtos defeituosos publicados pelo módulo de TinyML (ESP32-S3-Eye) sejam rapidamente entregues ao módulo de controle (ESP32) responsável pela remoção de produtos defeituosos da linha de produção. Este processo deve ser completamente independente de conexão com a internet, dependendo apenas da cobertura de rede local (Wifi e Ethernet);
- Sincronizar os eventos de classificação de produtos com a nuvem de modo a habilitar, entre outras coisas, a utilização de serviços para ingestão, armazenamento, análise e visualização dos dados da linha de produção.
Para execução do projeto o IoT Gateway foi implementado por meio de uma Raspberry Pi 3 Model B executando o Sistema Operacional oficial da Raspberry. No entanto, um outro modelo de Raspberry Pi ou mesmo um Single Board Computer (SBC) de outro fabricante poderia ser utilizado. Ainda durante o projeto a solução foi testada de forma satisfatória com a Raspberry Pi 1 Model B e a plataforma BeagleBone Black.
Para garantir a escalabilidade da solução uma vez que esta venha a ser implantada em um cenário real optou-se por executar as aplicações e componentes do IoT Gateway por meio do K3S, uma solução de Kubernetes otimizada para dispositivos embarcados e computação em borda. Desta forma, quando necessário, a solução que inicialmente utiliza apenas um dispositivo (Raspberry Pi) como IoT Gateway pode ser expandida de forma transparente para utilizar um cluster de dispositivos capazes de executar processamento em paralelo na borda e integrar um volume maior de dispositivos de IoT (ESP32 e ESP32-S3-Eye), entregando uma solução com performance e disponibilidade superior.
A solução Open Source Eclipse Mosquitto foi utilizada como Broker MQTT para barramento local de eventos. O Eclipse Mosquitto é um broker de mensagem que implementa as versões 5.0, 3.1.1 e 3.1 do protocolo MQTT, além de ser leve e desejável para utilização em dispositivos de baixo consumo na borda. A instalação no K3S e do Broker MQTT na Raspberry Pi foi realizada tomando como referência os tutoriais “How to build a Raspberry Pi Kubernetes Cluster with k3s” e “Install and run Mosquitto on a Kubernetes Cluster”. Vale ressaltar que, apesar dos resultados satisfatórios na Raspberry Pi 3 Model B e Beaglebone Black, houve problemas ao tentar configurar o Kubernetes (K3S) com o IoT Gateway alternativo testado com a Raspverry Pi 1. Uma razão para isto seria uma possível incompatibilidade dos binários do K3S disponíveis com a arquitetura ARM11 presente neste dispositivo.
Firmware para captura de imagens e classificação de produtos em tempo-real (ESP32-S3-Eye)
Este firmware foi projetado para detecção de defeitos em tempo-real em produtos em uma linha de produção por meio de técnicas de TinyML e classificação de imagens. Para isso, o módulo ESP32-S3-EYE foi utilizado juntamente com os frameworks ESP-IDF e ESP-WHO da Espressif, assim como o framework de tinyML TensorFlow Lite para Microcontroladores (TFLite Micro). Dentre as referências utilizada no projeto e implementação do firmware, destacam-se:
- Exemplos da plataforma ESP-WHO para a ESP-S3-EYE
- Exemplos do framework TFLite Micro para os hardwares da Espressif
- Rock, Paper, Scissors on ESP-EYE using ESP-IDF, TfLite Micro, FreeRTOS
As principais funcionalidades implementadas pelo firmware são descritas a seguir:
- Captura de imagem – captura contínua de imagem por meio da câmera presente na placa ESP32-S3-Eye. As imagens provenientes desta captura alimentam as aplicações downstream para visualização e classificação de produtos. A configuração de frame size e pix format da câmera deve ser feita de forma a otimizar a performance do modelo de classificação de produto, por isso está sendo usada a configuração GRAYSCALE-96×96. Para configuração e captura de imagem com a câmera disponível na plataforma ESP32-S3-Eye está sendo utilizado o componente
esp32-camerada Espressif; - Streaming de imagem – as imagens capturadas pela câmera alimentam dois fluxos distintos que podem ser usados para visualização:
- LCD streaming – as imagens coletadas pela câmera são desenhadas no display LCD disponível na placa. A API
dl::image::resize_image_nearestdisponibilizada no componenteesp-dldo framework ESP-WHO é utilizada para redimensionar a imagem do tamanho capturado pela câmera (96×96) para as dimensões do display LCD (240×240). De modo a otimizar a performance do firmware, reduzindo a carga das tarefas executando em paralelo, a funcionalidade “LCD streaming” é desabilitada por padrão. Para habilitar a funcionalidade o usuário pode utilizar os botões da placa (up, down, menu, play); - Webserver streaming – quando conectado a uma rede wifi, as imagens coletadas pela câmera podem ser visualizadas em tempo-real em um navegador web através do endereço http://${ESP32_S3_EYE_IP}/stream disponibilizado por um webserver executado pelo firmware. O webserver é implementado por meio do
app_wifidisponível no módulo web da plataforma ESP-WHO em conjunto com o componenteesp_http_serverdo framework ESP-IDF.
- LCD streaming – as imagens coletadas pela câmera são desenhadas no display LCD disponível na placa. A API
- Classificação de produtos – o modelo inteligente de classificação de produtos, resultante do processo de aprendizado de máquina e TinyML descrito em seções posteriores, é implantado no firmware por meio do framework TFLite Micro integrado ao componente ESP-NN da espressif, que possui kernel otimizado para o hardware ESP32-S3, conforme descrito em TensorFlow Lite Micro for Espressif Chipsets. O modelo de classificação de produtos é alimentado em tempo-real pelas imagens coletadas pela câmera, fornecendo como resultado a inferência com a probabilidade de ocorrência das diferentes classes de produto específicas para cada problema;
- Notificação de eventos – sempre que um produto é classificado com um nível de confiança acima de um limite predefinido, o firmware faz a publicação de um evento com o resultado da classificação em um Broker MQTT conectado via rede local (Wifi). Para evitar que o mesmo produto emita mais de um evento ao passar em frente a câmera, o firmware também impõe um limiar mínimo de tempo entre eventos consecutivos de classificação de produtos, que pode ser ajustado para diferentes problemas. O resultado da classificação é publicado no tópico /eyespecialist/detect em formato JSON. A conexão e envio de mensagens para o Broker MQTT são feitos por meio do componente
mqtt_clientdo framework ESP-IDF com esquema de autenticação por usuário e senha. Para fins de teste, a ferramenta MQTTX pode ser usada para se inscrever nos tópicos e verificar as mensagens que o firmware está publicando;
O firmware com as funcionalidades descritas e em execução na plataforma ESP32-S3-Eye foi projetado com base em uma arquitetura modular e multitarefa onde as diferentes tasks estão distribuídas entre o dois cores disponíveis na plataforma de modo a otimizar a performance da aplicação. Este firmware implementa um pipeline de processamento para o framebuffer capturado pela câmera, passando-o entre as diferentes tasks do firmware por meio de filas do FreeRTOS, garantindo assim sincronismo e desacoplamento entre os seus componentes. A arquitetura e pipeline de processamento do firmware são apresentados a seguir:
Firmware para controle de rotação e remoção de produtos defeituosos da esteira (ESP32-DevkitC)
Em um cenário real de implantação da solução proposta em uma linha de produção, o ponto onde é realizada a inspeção da qualidade dos produtos pode estar distante do ponto onde a linha de produção possui um mecanismo de rejeito (remoção dos produtos defeituosos da linha). Além disso, o firmware necessário para controlar o mecanismo de remoção de produtos da linha não necessita da utilização de algoritmos inteligentes (TinyML), podendo ser implantado em hardwares de menor capacidade computacional e, consequentemente, menor custo. Com isto, a solução proposta utiliza o módulo ESP32-DevkitC em conjunto com o framework de desenvolvimento ESP-IDF da Espressif para implantação e desenvolvimento de um firmware de controle que implementa as seguintes funcionalidades:
- Recebimento de eventos de classificação de produtos por meio de integração com Broker MQTT em execução no IoT Gateway e conectado à rede Wifi local. Assim como no firmware em execução na plataforma ESP32-S3-Eye, a implementação dos clientes Wifi e MQTT utilizados nesta funcionalidade é feita através do
app_wifidisponível no componentewebda plataforma ESP-WHO e pelo componentemqtt_clientdo framework ESP-IDF com esquema de autenticação por usuário e senha; - Acionamento do mecanismo de remoção de produtos integrado à linha de produção por meio do controle de um servo motor. Quando o firmware recebe um evento de classificação de produto defeituoso, o mesmo entra em um estado de espera até que haja a detecção da passagem de um produto na área de remoção através de um mecanismo composto por um conjunto laser e Light Dependent Resistor (LDR). Assim que a passagem do produto é detectada, o firmware aciona o servo motor para realizar a remoção do produto do carrossel. Este processo é ilustrado na máquina de estados a seguir:
- Controle da rotação do carrossel que simula a esteira da linha de produção por meio do controle de um motor de passo. Com a interface MQTT do firmware de controle pode-se enviar eventos para os tópicos
/eyespecialist/speedupe/eyespecialist/slowdownpara aumentar ou diminuir a velocidade da esteira, respectivamente.
O firmware de controle em execução na esp32 também foi projetado e desenvolvido usando uma arquitetura modular e multitarefa, conforme apresentado a seguir:
Projeto de Aprendizado de Máquina
O problema central da solução proposta consiste na identificação de falhas em rótulos de produtos em uma linha de produção utilizando técnicas de aprendizado de máquina e visão computacional na borda (TinyML). Para viabilizar o desenvolvimento e validação da solução foi feita a confecção de um produto genérico com rótulos personalizados, dimensões compatíveis com os limites do ângulo de abertura da câmera disponível na ESP32-S3-Eye (66.5°) e peso suportado pelo carrossel confeccionado para simular a esteira da linha de produção:
Ambiente de desenvolvimento e MLOps
O ambiente de desenvolvimento utilizado foi o DagsHub, conhecido por suas funcionalidades no contexto de MLOps (DevOps aplicado a Machine Learning). O DagsHub é uma plataforma voltada para cientistas de dados e engenheiros de machine learning, que proporciona um espaço colaborativo para desenvolver, compartilhar e monitorar projetos de aprendizado de máquina. Uma das características fundamentais do DagsHub é seu sistema de controle de versionamento, baseado no Git. Isso permite que os usuários acompanhem e controlem as mudanças em seu código, modelos e conjuntos de dados ao longo do tempo. A colaboração é simplificada por meio da possibilidade de convidar outros colaboradores para o projeto, permitindo um desenvolvimento conjunto e transparente.
No âmbito de MLOps, o DagsHub oferece recursos para a criação de pipelines automatizados de experimentos. Esses pipelines podem abranger desde a preparação dos dados até o treinamento e avaliação dos modelos, padronizando os processos e tornando-os reprodutíveis. O monitoramento contínuo de modelos em produção também é suportado, permitindo que os usuários rastreiem métricas de desempenho e a distribuição de entradas ao longo do tempo. Outro ponto importante é a integração do MLflow no DagsHub, o que permite uma gestão mais eficaz e eficiente do ciclo de vida dos projetos de machine learning. O MLflow é uma estrutura de código aberto desenvolvida para simplificar o rastreamento, gerenciamento e implantação de experimentos de aprendizado de máquina. Sua integração ao DagsHub enriquece ainda mais a experiência dos usuários ao proporcionar um ambiente coeso para desenvolver, monitorar e implantar modelos.
Com a utilização do DagsHub alguns processos de experimentação dos modelos inteligentes aplicados neste projeto ficaram totalmente automatizados, proporcionando uma maior agilidade, rastreamento e possibilidade de comparações entre modelos experimentados. Com este processo a plataforma foi utilizada para implementar os seguintes estágios do pipeline de dados:
- Pré-processamento – contém funções para extração dos frames de vídeo, redimensionamento e corte das imagens para treino. Como resultado têm-se um dataset cru para treinamentos iniciais e/ou aumento de dados;
- Aumento dos dados – contém funções para gerar um determinado número de imagens para cada um dos frames extraídos pelo pré-processamento, traz aplicações de ruídos, translações de imagens, dentre outros métodos para aumentar a variabilidade de imagens do dataset para situações adversas. Como resultado têm-se um novo dataset para treino.
- Configuração do treinamento – arquivo que contém parâmetros usados no processo de treinamento;
- Treinamento – estágio responsável pelo treinamento do modelo, geração das métricas de treino bem como os modelos salvo em formato padrão, TFLite e TFLite Micro;
- Configuração da validação – arquivo que contém parâmetros usados no processo de validação;
- Validação – estágio responsável pela extração de métricas dos modelos previamente treinados. Nesta etapa são somente validados os modelos padrão e TFLite, onde são extraídos métricas e plots da matriz de confusão de cada modelo. Nesta etapa também é executado algoritmos de IA explicável, ou XAI, para comprovação da assertividade da extração e interpretação de características pela rede.
Treinamento e otimização de modelo v1
Inicialmente, um smartphone foi utilizado para capturar vídeos dos produtos customizados, confeccionados para o projeto, e utilizá-los como entrada de um script python capaz de processá-los para gerar o dataset com as imagens utilizadas no processo de treinamento e otimização dos modelos inteligentes para classificação de produtos defeituosos. Este processo resultou em um dataset com 9.285 imagens, com distribuição uniforme entre as diferentes classes de rótulo personalizados (normal, rasurado, borrado, sem nome, sem rótulo, produto desconhecido).

As imagens do dataset passaram por tarefas de pré-processamento para redução de dimensão das imagens coletadas com o smartphone para 96×96 e mudança de esquema de cor das imagens para grayscale, correspondendo assim ao padrão de entrada esperado pelo modelo de tinyml executado pela ESP32-S3-Eye.
Com o dataset pré-processado (96×96/grayscale) e dividido entre treino e validação com uma proporção de 80%-20%, respectivamente, realizou-se o processo de treinamento com uma arquitetura de rede inteligente que já possui ampla utilização em dispositivos móveis e embarcados, a MobileNetV2. Esta rede foi projetada para ser flexível e capaz de se adaptar a diferentes requisitos em dispositivos com recursos computacionais limitados, sendo ideal para aplicação em dispositivos embarcados. A partir de um parâmetro “alpha” é feito o controle da largura da rede. Um valor menor de “alpha” reduz o número de canais em cada camada convolucional, reduzindo assim o tamanho da rede, a exigência de recursos e satisfazendo restrições de memória e processamento existentes nos dispositivos embarcados. Tal redução é especialmente útil para o treinamento do modelo a ser aplicado na Esp32-S3-Eye, onde a eficiência é essencial para um desempenho adequado na tarefa de classificação de produtos em tempo real. Nesta primeira etapa do projeto foi selecionado um valor de alpha igual a 0.1, resultando em uma rede com 134,358 parâmetros.
O processo de treinamento da rede MobiNetV2 foi realizado através da biblioteca de código aberto TensorFlow e fazendo uso de técnicas de transferência de aprendizado a partir de pesos importados da plataforma EdgeImpulse. As principais etapas do processo de treinamento do modelo são descritas a seguir:
- Customização da rede – as últimas camadas da MobileNetV2 foram substituídas por camadas que correspondem à tarefa de classificação de produtos nas diferentes classes de rótulos exploradas na solução (normal, rasurado, borrado, sem nome, sem rótulo, produto desconhecido);
- Transferência de aprendizagem/conhecimento – neste processo as camadas adicionadas são treinadas do zero enquanto as camadas iniciais da rede são mantidas congeladas, ou seja, os pesos dessas camadas iniciais não são atualizados durante o treinamento das últimas camadas. Ao congelar as camadas iniciais permite-se que a rede neural aproveite o conhecimento prévio que foi adquirido durante o treinamento em um conjunto de dados maior e mais genérico, geralmente usando uma tarefa de classificação em uma grande base de dados como a ImageNet. Essa transferência de conhecimento prévio ajuda a acelerar o treinamento nas camadas adicionadas, pois as primeiras camadas já têm uma compreensão ampla de características básicas dos dados de entrada (imagens);
- Fine-tuning – após o treinamento das últimas camadas ocorre um processo conhecido como fine-tuning (ajuste fino). Neste processo, as camadas congeladas são descongeladas e as taxas de aprendizado são ajustadas para um valor menor. Agora, todo o modelo é treinado em conjunto com a base de dados específica do problema de classificação de produtos defeituosos da solução proposta. Durante o fine-tuning, todos os pesos da rede são atualizados, incluindo as camadas iniciais que anteriormente estavam congeladas. O objetivo do fine-tuning é permitir que o modelo se adapte melhor à nova tarefa específica, ajustando os pesos em todas as camadas aos dados relevantes para a nova tarefa (classificação de rótulos de produtos). Como as camadas iniciais já possuem um bom conhecimento prévio, essa etapa de fine-tuning é geralmente mais rápida que a etapa anterior.
A seguir são apresentados os resultados dos processos de treinamento do modelo com a evolução das curvas de acurácia e perda (loss), assim como a matriz de confusão para o modelo ao fim do treinamento.
Após o processo de treinamento do modelo com o framework TensorFlow alguns outros passos devem ser executados para que o modelo atinja a eficiência necessária para implantação em dispositivos embarcados com recursos limitados. Estes passos são descritos a seguir:
- Quantização em 8 bits – também conhecida como quantização de precisão reduzida, é um processo em que os parâmetros de uma rede neural são representados usando apenas 8 bits de memória em vez dos 32 bits padrão. Essa técnica é frequentemente usada para comprimir modelos de aprendizado de máquina e reduzir seus requisitos de armazenamento e computação. Na quantização em 8 bits, os valores contínuos dos parâmetros (pesos e vieses) da rede neural, que normalmente são representados por números de ponto flutuante de 32 bits, são aproximados para números inteiros de 8 bits. Isso significa que a escala e a resolução dos valores são reduzidas, pois agora apenas uma faixa limitada de valores inteiros é usada para representar cada parâmetro. A quantização tem a vantagem de reduzir significativamente o tamanho do modelo, tornando-o mais compacto e eficiente em termos de armazenamento e transmissão de dados. Além disso, ela também pode resultar em ganhos de desempenho, uma vez que as operações aritméticas em números inteiros de 8 bits são mais rápidas do que aquelas em números de ponto flutuante de 32 bits, especialmente em arquiteturas de hardware otimizadas para cálculos inteiros;
- Conversão do modelo – após o treinamento e a otimização, o modelo é convertido para o formato TensorFlow Lite. Essa conversão é realizada usando a ferramenta “TensorFlow Lite Converter”. Durante a conversão, as operações e parâmetros do modelo são ajustados e otimizados para garantir a compatibilidade com a biblioteca TFLite Micro utilizada para implantação do modelo nos dispositivos embarcados. Ao fim deste processo os modelos de aprendizado de máquina estão prontos para serem executados em dispositivos embarcados com recursos limitados, oferecendo capacidade de inferência local e em tempo real. Os resultados da otimização do modelo v1 para classificação de produtos defeituosos são apresentados a seguir:
Algumas outras métricas para o modelo otimizado são apresentadas a seguir:
| Precision | Recall | F1-Score | Support | |
| Erasure | 0.89 | 0.99 | 0.94 | 307 |
| No Label | 0.99 | 0.97 | 0.98 | 305 |
| No Name | 0.97 | 0.97 | 0.97 | 315 |
| Normal | 0.99 | 0.98 | 0.99 | 304 |
| Tint | 1.00 | 0.92 | 0.96 | 285 |
| Unknown | 0.99 | 0.99 | 0.99 | 341 |
Quando comparados os resultados do modelo antes e após o processo de otimização, observa-se que não houve uma grande penalização de performance. No entanto, apesar dos bons resultados obtidos pelo modelo v1 nos testes offline, com o dataset de imagens coletadas utilizando a câmera de um smartphone, quando levado para teste com captura e classificação de imagens de produto em tempo-real no carrossel o modelo não obteve acurácia satisfatória. Este fato pode ser explicado por um conjunto de diferenças entre o cenário real de teste no carrossel e o cenário de coleta do dataset inicial utilizado no treinamento do modelo, tais como:
- Qualidade distinta entre as imagens coletadas pelo smartphone e pela câmera OV2640 presente na ESP32-S3-Eye. Essa diferença pode ter sido ainda agravada pelas condições de movimento e vibração presentes no carrossel;
- Diferença no background do carrossel se comparado ao utilizado na coleta do dataset de treinamento;
- Diferença nas condições de iluminação entre o ambiente do carrossel e o ambiente utilizado na coleta do dataset de treinamento.
Treinamento e otimização de modelo v2
Com base nos resultados não satisfatórios obtidos nos testes com o modelo v1 no ambiente de simulação da linha de produção (carrossel) um conjunto de ações de melhoria foram implementadas para criação de um modelo v2 com performance superior:
- Criação de novo dataset a partir de imagens coletadas no carrossel com a própria câmera integrada na ESP32-S3-Eye – apesar da baixa acurácia do modelo anterior, treinado com imagens coletadas com a câmera de um smartphone, este modelo pôde ser implantado na ESP32-S3-Eye e usado para identificação da passagem de produtos no carrossel. Além disso, foi implementado um servidor de imagem local usando Python e Flask e executado em uma máquina na mesma rede que a ESP32-S3-Eye. Com isso, foi configurado um ambiente para coleta de imagens em tempo-real com a ESP32-S3-Eye, com o carrossel em movimento, e envio dessas imagens para o servidor responsável por armazená-las no sistema de arquivos local. Ao fim deste processo, um novo dataset foi gerado com aproximadamente 9.000 imagens, 1.500 imagens para cada uma das 6 classes do problema de classificação de de rótulos de produtos;
- Limpeza e de dados – para melhorar a qualidade do dataset coletado a partir da captura de imagens em tempo real pela ESP32-S3-Eye e, consequentemente, a performance do novo modelo, o dataset coletado passou por um processo manual de remoção de imagens onde o produto não estivesse bem centralizado, conforme apresentado a seguir:
- Motion blur e aumentação de dados: durante os testes em ambiente de simulação da linha de produção (carrossel), um dos desafios identificados, com impacto negativo sobre a acurácia do modelo, está relacionado com o fenômeno conhecido como “motion blur” ou “desfoque de movimento”. Esse problema ocorre na captura de imagens de objetos em movimento, resultando em uma aparência borrada devido à captura da trajetória do movimento. O motion blur pode prejudicar seriamente a precisão da classificação, uma vez que as características dos produtos podem ser obscurecidas, levando a uma confusão na identificação. Para sanar tal desafio, as tradicionais camadas de aumento de dados do TensorFlow foram substituídas por imagens previamente aumentadas por meio da biblioteca Python imgaug. A biblioteca imgaug, fornece uma extensa coleção de transformações e aumento de dados que vão desde as mais básicas, como rotações e espelhamentos, até as mais avançadas, como distorções elásticas e ajustes de iluminação. Dessa forma pôde-se explorar e aproveitar uma gama mais ampla de técnicas de aumento de dados, melhorando a qualidade, diversidade e robustez dos dados utilizados para treinamento do modelo v2 e permitindo que o modelo se adapte as diferentes situações presentes nos cenários de testes reais. Ao aprender a reconhecer características relevantes mesmo em imagens borradas, o modelo se tornou mais apto a classificar produtos com precisão, independentemente do desfoque de movimento. Essa mudança permitiu criar pipelines personalizados de aumento de dados onde fosse possível combinar diferentes técnicas em sequência para atender às demandas específicas do conjunto de dados do problema explorado. Além disso, ao realizar o aumento de dados com a imgaug, foi possível economizar recursos computacionais durante o treinamento do modelo. As transformações complexas já haviam sido aplicadas, reduzindo a necessidade de realizar repetidamente essas operações a cada época de treinamento. Isso resultou em um processo de treinamento mais eficiente e rápido, contribuindo para uma maior agilidade no desenvolvimento dos modelos. Alguns exemplos de imagens geradas com o processo de aumento de dados são apresentados a seguir:
Com as melhorias no dataset, os mesmos passos de treinamento e otimização descritos para o modelo v1 foram executados para criação do modelo v2, que possui um total de 93.510 parâmetros. Os resultados dos testes offline para o novo modelo com o novo dataset são apresentados a seguir:
Após passar pelo processo de otimização, as seguintes métricas foram coletadas para o modelo v2:
| Precision | Recall | F1-Score | Support | |
| Erasure | 0.949 | 0.948 | 0.948 | 2600 |
| No Label | 0.972 | 0.971 | 0.972 | 2600 |
| No Name | 0.97 | 0.951 | 0.96 | 2600 |
| Normal | 0.966 | 0.939 | 0.952 | 2600 |
| Tint | 0.949 | 0.962 | 0.956 | 2600 |
| Unknown | 0.96 | 0.994 | 0.976 | 2600 |
| Accuracy | 0.97 | 15600 | ||
| Macro Avg. | 0.961 | 0.961 | 0.961 | 15600 |
| Weighted Avg. | 0.961 | 0.961 | 0.961 | 15600 |
Os resultados do modelo podem ser compreendidos de forma mais ampla por meio de abordagens de Inteligência Artificial Explicável (Explainable AI – XAI). Com auxílio da biblioteca de código aberto XPLIQUE, foi possível gerar explicações que permitissem avaliar quais características o modelo está levando em consideração para a classificação de produtos:
Ao aplicar métodos de interpretação, como VarGrad, Rise, Grad-CAM ou SHAP, foram obtidas informações que destacam regiões específicas da imagem que mais influenciaram a classificação feita pela rede neural. Geralmente, áreas mais fortemente destacadas correspondem às regiões que tiveram maior peso na decisão final do modelo. Esses métodos frequentemente geram mapas de calor que indicam a importância relativa das diferentes partes da imagem. Cores mais intensas nessas visualizações sugerem áreas mais relevantes para a classificação. Observando os mapas de calor, pode-se identificar características específicas que foram fundamentais para a rede neural tomar sua decisão. Além disso, é importante compreender o conceito de camadas de ativação. Algumas abordagens de interpretação revelam quais camadas da rede foram ativadas durante o processo de classificação. Isso ajuda a entender quais características a rede considerou ao fazer sua previsão. Apesar dos testes realizados com diferentes métodos de XAI, destacam-se os resultados obtidos com os métodos VarGrad, IntegratedGradients e Rise.
Ao fim do processo de treinamento e otimização, os parâmetros do modelo são exportados como um vetor em arquivo de código fonte (.c) para serem incorporados ao firmware da ESP32-S3-Eye, interpretados e executados por meio da biblioteca TFLite-Micro.
Ingestão, Armazenamento e Visualização de Dados na Nuvem
Ao mesmo tempo em que os eventos de classificação de produtos estão sendo processados em tempo real e utilizados para remoção de produtos da linha de produção, em um cenário que exige baixa latência e independência de conexão com a internet, também é importante que estes eventos sejam armazenados para disponibilidade a longo prazo, agregados e analisados com auxílio de algoritmos e ferramentas que possibilitem a realização de manutenções preditivas, análises e previsões de qualidade e desempenho da linha de produção. É neste sentido que a solução desenvolvida se integra com o ecossistema de serviços ofertados por plataformas de nuvem que incluem, entre outras coisas:
- Serviços de IoT para fácil ingestão e governança de dados e dispositivos, respectivamente, por meio de protocolos padrões na indústria (exemplo: MQTT);
- Serviços de Armazenamento atendendo diferentes requisitos de estrutura dos dados (estruturado, semi-estruturado e não-estruturado);
- Serviços de Análise de Dados que podem ser facilmente integrados com os serviços de IoT e serviços de Armazenamento para implementação de pipelines de dados para diferentes casos de uso (real-time, near real-time e batch);
- Serviços de Visualização que podem ser utilizados de forma integrada com os serviços de Armazenamento para rápida criação de dashboards e visualização de dados e resultados das análises implementadas nos pipelines de dados.
No projeto foram utilizados os seguintes serviços da plataforma Amazon Web Service (AWS):
- IoT Core para ingestão dos eventos de classificação de produtos sincronizados a partir da aplicação em execução no IoT Gateway (Raspberry Pi). A ingestão de eventos na plataforma IoT core é feita através do protocolo MQTT com segurança TLS 1.2 e autenticação mútua com certificados X.509;
- Amazon Timestream para armazenamento das séries temporais com os eventos de classificação de produtos. Os eventos recebidos no serviço IoT Core são facilmente integrados com o Amazon Timestream por meio da criação de regras de IoT;
- Amazon QuickSight para visualização dos eventos de classificação de produtos por meio de dashboard WEB. O Amazon QuickSight alé de facilitar a integração de fontes de dados disponíveis no Amazon Timestream, também facilita a criação de dashboards por meio de componentes já disponíveis para reuso.
A seguir é apresentado o dashboard com os resultados de mais de 10h de testes com produtos de diferentes classes colocados no ambiente de simulação da linha de produção (carrossel). Para este teste o mecanismo de rejeito de produtos defeituoso foi desabilitado, permitindo que os produtos permanecessem por um longo tempo no carrossel.
Resultados, Discussões e Trabalhos Futuros
Os resultados obtidos com o teste do modelo v2 no ambiente de simulação da linha de produção (carrossel) foram satisfatórios. Com base em medições adicionadas ao firmware da ESP32-S3-Eye pôde-se verificar que o ciclo de captura e classificação das imagens atingiu uma performance de aproximadamente 7.69 frames/segundo (FPS). Com isso, a latência mínima entre a classificação de dois produtos distintos está em torno de 130ms, atendendo uma vasta gama de problemas da indústria. Mesmo em cenários industriais onde a velocidade da esteira de produção exija uma menor latência entre predições para possível classificação de todos os produtos passando pela linha, a solução apresentada ainda poderia ser utilizada e agregar grande valor com uma abordagem de amostragem de produtos.
Com isso, o projeto comprova a viabilidade do uso de soluções de baixo custo que possam acelerar o processo de digitalização da indústria brasileira com foco nos três principais benefícios enxergados pelo setor: aumento de produtividade, melhoria da qualidade dos produtos e diminuição dos custos de produção. A ESP32-S3-Eye mostrou-se uma ferramenta poderosa que habilita a implantação de modelos de inteligência artificial de alto desempenho em dispositivos de IoT capazes de realizar classificações em tempo-real, podendo ser explorada nos mais diversos casos de uso da indústria.
Alguns dos possíveis pontos de melhorias e trabalhos futuros do projeto são listados a seguir:
- Hardware/mecânica:
- Utilizar um Driver Microstep (ex.: DM556) dedicado para controle do motor de passo responsável pelo giro do carrossel. Atualmente o controle é realizado por algorítmo em execução no firmware da ESP32, ocasionando alguns problemas de alta vibração e limitação de torque no carrossel;
- Projeto de hardware e mecânica customizado para a ESP32-S3-Eye incluindo case mecânico e possibilidade de troca de lentes da câmera para se adequar aos requisitos de diferentes problemas de visão computacional;
- Melhorias no mecanismo de detecção de passagem de produtos que atualmente pode sofrer interferência da luz ambiente. As possibilidades de melhorias para reduzir a interferência de luz ambiente incluem a redução da abertura do tubo contendo o dispositivo de LDR e a criação de uma câmara escura que mantenha o mecanismo isolado do ambiente.
- Aprendizado de máquina:
- Treinamento e otimização de modelos de detecção de objetos tais como o FOMO e YOLO. O modelo MobileNetV2 utilizado no projeto não é ideal para cenários onde é necessário realizar a contagem e tracking de objetos.
- Classificação de produtos em batch para atender cenários que possam estar presentes em processos produtivos. O projeto explorou apenas a captura e classificação de imagens contendo um único objeto.
- Integração com a nuvem:
- Integrar serviços de análise de dados, atualmente a integração inclui apenas serviços para ingestão, armazenamento e visualização dos eventos. Com serviços de análise de dados, tais como os disponíveis no ecossistema AWS IoT Analytics, seria possível realizar o cálculo e armazenamento de métricas relevantes para a linha de produção, tais como a velocidade (produtos/segundo) e qualidade (produtos normais/produtos defeituosos) do processo produtivo, que podem ser utilizadas para apoio a tomada de decisão quanto a manutenções preventivas na linha;
- Integrar serviços de aprendizado de máquina para predição de condições futuras da linha de produção a partir da análise dos dados cletados.
Histórico do desenvolvimento
O desenvolvimento do projeto foi realizado com base no cronograma a seguir:
O projeto foi dividido nos seguintes marcos:
- Classificação de produto, controle de carrossel, mecanismos de rejeito e comunicação entre módulos na borda (FW e TinyML);
- Solução na borda 100% funcional, com classificação automática e remoção de produtos do carrossel (HW e mecânica integrados);
- Solução da borda integrada a plataforma de análise de dados, com ingestão de eventos em tempo real, cálculo e visualização de métricas (nuvem).
Referências
- SANDLER, Mark et al. Mobilenetv2: Inverted residuals and linear bottlenecks. In: Proceedings of the IEEE conference on computer vision and pattern recognition. 2018. p. 4510-4520.
- TensorFlow. (n.d.). TensorFlow. https://www.tensorflow.org/?hl=pt-br
- TensorFlow Lite | ML for Mobile and Edge Devices. (n.d.). TensorFlow. https://www.tensorflow.org/lite
- TensorFlow Lite for Microcontrollers. (n.d.). TensorFlow. https://www.tensorflow.org/lite/microcontrollers
- Transfer learning and fine-tuning. (n.d.). TensorFlow. https://www.tensorflow.org/tutorials/images/transfer_learning
- TensorFlow Lite 8-bit quantization specification. (n.d.). TensorFlow. https://www.tensorflow.org/lite/performance/quantization_spec
- ESP32-S3-EYE Getting Started. https://github.com/espressif/esp-who/blob/master/docs/en/get-started/ESP32-S3-EYE_Getting_Started_Guide.md
- esp-who example for esp-s3-eye. https://github.com/espressif/esp-who/tree/master/examples/esp32-s3-eye
- TFLite Micro examples for Espressif Chipsets. https://github.com/espressif/tflite-micro-esp-examples
- Rock, Paper, Scissors on ESP-EYE using ESP-IDF, TfLite Micro, FreeRTOS. https://github.com/itemis/tflite-esp-rock-paper-scissors
- ESP IDF 4.4. https://docs.espressif.com/projects/esp-idf/en/release-v4.4/esp32s3/get-started/index.html
- How to build a Raspberry Pi Kubernetes Cluster with k3s. https://medium.com/thinkport/how-to-build-a-raspberry-pi-kubernetes-cluster-with-k3s-76224788576c
- Install and run mosquitto on a kubernetes cluster. https://blogs.oracle.com/developers/post/install-and-run-mosquitto-on-a-kubernetes-cluster
APÊNDICE A – BOM de Hardware
A BOM listada a seguir pode ser usada como referência para aquisição dos componentes de hardware utilizados no desenvolvimento da solução:
| Item | Quantidade | Preço Unitário (R$) | Subtotal(R$) | Referência |
| Motor Nema 17 | 1 | 102,90 | 102,90 | Motor Nema 17 |
| Driver motor de passo | 1 | 19,90 | 19,90 | Driver motor de passo |
| Fonte 12V 2A | 1 | 29,90 | 29,90 | Fonte 12V 2A |
| ESP32 | 1 | 59,90 | 59,90 | ESP32 |
| ESP32 S3 EYE | 1 | 480,00 | 480,00 | ESP32 S3 EYE |
| Raspberry | 1 | 779,90 | 779,90 | Raspberry |
| Mosfet IRFZ46 | 4 | 3,20 | 12,80 | Mosfet IRFZ46 |
| transistor BC337 | 5 | 0,30 | 1,50 | transistor BC337 |
| servo motor | 1 | 18,90 | 18,90 | servo motor |
| laser | 1 | 4,50 | 4,50 | laser |
| LDR | 1 | 3,90 | 3,90 | LDR |
| cabo 0,5mm (metros) | 1 | 19,90 | 19,90 | cabo 0,5mm (metros) |
| LED | 5 | 0,20 | 1,00 | LED |
| resistores | 20 | 0,19 | 3,80 | resistores |
| conversor buck | 2 | 11,90 | 23,80 | conversor buck |
| TOTAL (R$) | 1.562,60 | |||









