TinyML com câmera no ESP32-S3: da captura à classificação local
Uma demo que classifica uma imagem preparada prova que o modelo executa; não prova que há um produto de visão útil. O dispositivo real precisa capturar quadros com consistência, encaixar pré-processamento e inferência na memória, cumprir o prazo de resposta e agir com segurança quando houver incerteza. Câmera, pipeline e classificador devem ser tratados como um único sistema medido.
Publicado em 28 de setembro de 202614 min de leituraPipeline de visão local
Desenhe o pipeline antes de escolher o modelo
Cada transformação consome tempo, memória ou informação
1 / CapturaExposição, formato, resolução e propriedade do buffer.
2 / PreparaçãoRecorte, resize, conversão de cor e normalização.
3 / InferênciaModelo quantizado, arena de tensores e runtime medido.
4 / DecisãoLimiar de confiança, classe desconhecida e revisão.
5 / SaídaAção local ou telemetria mínima com versão do modelo.
Comece pela decisão que o produto deve tomar e colete imagens representativas de luz, distância, ângulo, movimento, fundo e cenas vazias. Separe treino, calibração e avaliação por sessão ou local de captura para evitar que quadros quase idênticos contaminem o teste. Inclua “nenhuma classe/incerto”: forçar cada imagem numa categoria conhecida produz confiança enganosa.
Dimensione câmera e memória em conjunto
Buffers de quadro, área temporária de conversão, pesos, ativações e runtime disputam RAM. Alta resolução pode ajudar o sensor e ainda ser desperdício para um classificador pequeno. Use formato suportado pelo sensor e driver, reduza ou recorte cedo e evite guardar quadros completos em duplicidade sem necessidade medida. PSRAM amplia espaço, mas não elimina limites de banda, fragmentação e latência.
Registre heap interno livre, maior bloco, uso de PSRAM e tempo de quadro a resultado sob a configuração final de rádio e tarefas. Teste capturas repetidas, não apenas a primeira inferência. Um modelo que roda após o boot pode falhar horas depois por vazamento, fragmentação ou concorrência.
Quantização é um experimento de qualidade
ESP-DL oferece formatos quantizados e ferramentas para converter e avaliar modelos no ESP32-S3. Quantização pós-treino pode reduzir custo de pesos e ativações, mas o resultado depende de dados de calibração representativos e do esquema suportado. Preserve uma linha de base float e compare candidatos quantizados com precisão/recall por classe e matriz de confusão em imagens reservadas. Pré-processamento precisa coincidir: cores, resize, recorte e normalização devem ser iguais aos do treino.
Não escolha só pelo número de parâmetros. Meça separadamente pré-processamento, inferência e pós-processamento na resolução final. Se a meta de latência falhar, teste entrada menor, backbone simples ou amostragem menos frequente antes de remover limites de confiança.
Falha
O que medir
Comportamento mais seguro
Imagem borrada ou escura
Qualidade e falso positivo.
Retornar incerto e capturar novamente.
Modelo não cabe
Pico de heap, PSRAM e maior bloco.
Reduzir entrada/arena e falhar inicialização com clareza.
Quantização piora uma classe
Métrica por classe em conjunto reservado.
Ajustar calibração ou modelo, sem ocultar regressão.
Inferência bloqueia captura
Quadros perdidos, latência e watchdog.
Filas limitadas e propriedade explícita dos buffers.
Cenário desconhecido
Calibração e exemplos fora da distribuição.
Abster-se e pedir confirmação humana ou outro sensor.
Mantenha ações locais explicáveis e reversíveis
Se a classificação acionar relé, trava ou máquina, trate a saída como sinal de sensor, não como autoridade. Adicione camada determinística com confiança e validade, padrão seguro, limite de frequência e override manual. Registre versão e motivo sem enviar imagens identificáveis por padrão. Se a depuração exigir imagem, obtenha consentimento, restrinja retenção e proteja a transferência.
Versione modelo e parâmetros de pré-processamento como um pacote. Valide no hardware, preserve rollback e compare erros antes de expandir a atualização. Um painel pode mostrar duração, taxa de incerteza, reinícios e versões sem transmitir todos os quadros.
Em resumo
Visão útil no ESP32-S3 começa com dados representativos e decisão limitada, depois co-projeta captura, memória, pré-processamento e inferência quantizada. Meça o caminho completo na placa real, trate incerteza como saída de primeira classe e não permita que um modelo probabilístico controle diretamente uma ação crítica de segurança.