Dyson CameraJet: como a edge AI transforma a escova de dentes

Dyson CameraJet: como a edge AI transforma a escova de dentes

Em Paris, James Dyson revelou uma novidade que me chamou atenção não pela escova em si, mas pelo que ela representa em termos de engenharia embarcada. A Dyson CameraJet coloca uma câmara de 100.000 pixels, machine learning rodando em tempo real e Wi-Fi dentro de um dispositivo que cabe na mão. Segundo o Sapo.pt, a proposta é detectar, rastrear e prever os espaços entre os dentes para disparar um irrigador de precisão exatamente onde faz diferença. Parece exagero? Talvez. Mas como dev, eu olho para isso e vejo problemas clássicos de edge AI — e é isso que vou destrinchar aqui.

O hardware por trás da câmara

Vamos começar pelo óbvio: enfiar uma objetiva macro num dispositivo que vai ficar molhado, quente, com pasta de dente e bater contra os dentes exige uma engenharia mecânica e óptica bem específica. Dyson fala em seis anos de P&D. Eu acredito. Lentes macro a essa distância focal, com 100.000 pixels úteis e iluminadores LED integrados, precisam ser projetadas para funcionar em ambientes com névoa, saliva, espuma e variação de luz refletida.

Para nós, devs, o ponto interessante é: o sensor não é uma câmera de celular disfarçada. É um módulo dedicado, com lente fixa, distância de trabalho curta (provavelmente entre 5 e 15 mm) e sensor pequeno — algo em torno de 1/9″ ou 1/7″. Isso significa que cada pixel captura menos luz, e o pipeline de processamento precisa compensar com ISO mais alto, redução de ruído agressiva e modelos de ML treinados especificamente para esse tipo de imagem ruidosa.

Machine Learning no edge: o verdadeiro desafio

Aqui está o que me fascina. Dyson diz que a escova usa “machine learning” para detectar, rastrear e prever espaços interdentais. Traduzindo para linguagem de engenharia: detecção de objetos + tracking + predição temporal, tudo rodando num MCU ou SoC de baixo consumo com bateria pequena.

Quando li isso, fui direto pensar no tipo de modelo que pode rodar ali. Não é um YOLOv8 nem um ResNet. Estamos falando de algo como:

  • Modelo MobileNetV3 ou EfficientNet-Lite quantizado para INT8
  • Possivelmente um detector tipo SSD ou CenterNet leve, também quantizado
  • Tracker do tipo SORT ou IoU-Tracker para manter identidade entre frames
  • Filtro de Kalman para predizer a próxima posição dos dentes

E tudo isso precisa caber em poucos megabytes de flash, consumir talvez 100–300 mW e responder em latência abaixo de 50 ms para que o irrigador atire no lugar certo. Isso é edge AI de verdade, não marketing.

Na Prática: simulando o pipeline de detecção

Não tenho a CameraJet em mãos (e provavelmente nem você, pelo preço que deve ter). Mas dá para simular o conceito do pipeline de inferência em Python, mostrando como um sistema desses processaria o stream de vídeo. Olha só:

import numpy as np
import time

class DentalEdgeInference:
    """
    Simulação simplificada do pipeline de inferência
    que rodaria dentro da CameraJet (edge AI).
    """

    def __init__(self, model_path: str, input_size=(96, 128)):
        self.input_h, self.input_w = input_size
        self.model_path = model_path
        # Em produção: carrega TFLite ou ONNX Runtime com quantização INT8
        # self.interpreter = tflite.Interpreter(model_path=model_path)
        # self.interpreter.allocate_tensors()

    def preprocess(self, frame: np.ndarray) -> np.ndarray:
        """Reduz ruído, normaliza e redimensiona para o input do modelo."""
        # Correção de gamma para compensar baixa luz do sensor pequeno
        frame = np.power(frame, 0.9)
        # Resize para o tamanho esperado pelo modelo (HxW)
        resized = np.resize(frame, (self.input_h, self.input_w, 3))
        # Normalização para [-1, 1]
        return (resized / 127.5) - 1.0

    def detect_gaps(self, frame: np.ndarray) -> list:
        """
        Detecta espaços interdentais.
        Em produção: model.run() retornaria bounding boxes e classes.
        Aqui retornamos uma lista mockada para ilustrar o contrato.
        """
        tensor = self.preprocess(frame)
        # Saída simulada: [(x, y, w, h, confianca)]
        return [
            {"bbox": (45, 22, 8, 4), "conf": 0.93},
            {"bbox": (62, 23, 7, 5), "conf": 0.88},
        ]

    def track(self, detections: list, prev_state: dict) -> dict:
        """Kalman-filter simplificado para predição de posição."""
        if not detections:
            return prev_state
        # Em produção: IoU matching + Kalman update
        primary = max(detections, key=lambda d: d["conf"])
        return {
            "x": primary["bbox"][0],
            "y": primary["bbox"][1],
            "predicted_next": (
                primary["bbox"][0] + 2,  # velocidade estimada
                primary["bbox"][1]
            ),
        }

    def trigger_irrigator(self, target):
        """Dispara o irrigador na posição prevista (stub)."""
        # Em produção: PWM na bomba + válvula solenoide
        print(f"[IRRIGATOR] alvo previsto em {target}")

    def run_loop(self, fps_target=30):
        """Loop principal rodando no MCU."""
        interval = 1.0 / fps_target
        prev = {}
        while True:
            t0 = time.perf_counter()
            # frame = camera.capture()  # captura do sensor
            frame = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
            detections = self.detect_gaps(frame)
            state = self.track(detections, prev)

            if state.get("predicted_next"):
                self.trigger_irrigator(state["predicted_next"])

            prev = state
            elapsed = time.perf_counter() - t0
            time.sleep(max(0, interval - elapsed))


if __name__ == "__main__":
    device = DentalEdgeInference("models/gap_detector_int8.tflite")
    # device.run_loop()  # descomente para rodar de verdade

Esse é o esqueleto conceitual. O ponto é: cada função aqui existe dentro do firmware. Quando a Dyson fala em “machine learning”, é isso que está rodando lá dentro — não um modelo pesado na nuvem.

Comparativo: como isso se compara ao que já existe

Produto Visão computacional IA no dispositivo Conectividade
Dyson CameraJet Sim (câmara dedicada) Sim (gap detection + tracking) Wi-Fi
Oral-B iO com IA Não (apenas sensores de pressão) Reconhecimento de movimentos no app Bluetooth
Philips Sonicare 9900 Não Ajuste de intensidade, sem CV Bluetooth
Colgate Hum Não Tracking via app + giroscópio Bluetooth

Repara: nenhuma das concorrentes tem visão computacional real. A maioria “faz IA” processando dados de acelerômetro e giroscópio no app. A CameraJet é a primeira a colocar o olho dentro do produto.

Armadilhas comuns em edge AI (e o que devs aprendem com isso)

Esse produto da Dyson é quase um caso de estudo sobre os erros que devs cometem ao colocar ML em hardware embarcado. Vou listar os principais:

  1. Confundir “IA na nuvem” com “IA no edge”. Modelo rodando no celular do usuário não é edge AI do dispositivo. A CameraJet roda localmente — isso é edge AI de verdade, com tudo o que isso implica em otimização.
  2. Ignorar o custo do pré-processamento. Em modelos pequenos, preprocessamento (resize, normalização, correção de cor) pode consumir mais CPU que a inferência em si. Sempre meça antes de otimizar o modelo.
  3. Não quantizar. Modelo float32 de 50 MB não cabe num MCU. Quantização INT8 é quase sempre obrigatória, e exige re-treino com aware quantization para preservar acurácia.
  4. Subestimar latência de captura. Sensor pipeline (exposição → readout → ISP) pode adicionar 20–40 ms. Se o modelo roda em 10 ms mas a captura leva 50 ms, seu fps real é limitado pela câmera, não pelo modelo.
  5. Esquecer do “fail mode”. Se a detecção falhar, o irrigador não deve disparar no lugar errado. Em produção, eu sempre implemento um fallback seguro (não fazer nada) e um sanity check de bounding box antes de acionar qualquer atuador físico.

Essas cinco armadilhas já vi em produtos reais — desde câmeras inteligentes até robôs aspiradores. Quando você vê um gadget caro com câmera embarcada, vale perguntar: “isso roda local ou precisa da nuvem?” A resposta muda tudo.

Implicações para devs que pensam em IoT

Se você trabalha com IoT, computação embarcada ou visão computacional, a CameraJet é um sinal de onde o mercado vai. Cada vez mais, produtos de consumo vão carregar:

  • Modelos quantizados rodando em chips tipo ESP32-S3, BL808 ou até Raspberry Pi RP2040 com acelerador
  • Pipelines de captura otimizados para o caso de uso — nada de câmeras genéricas
  • Conectividade Wi-Fi/BLE para telemetria e atualizações OTA de modelo
  • Privacidade por design — nada sai do dispositivo sem consentimento explícito

Segundo a OMS, citada pela Dyson via Sapo.pt, cerca de 3,7 mil milhões de pessoas são afetadas por doenças orais no mundo, e a saúde bucal está cada vez mais associada a problemas cardíacos e ao Alzheimer. Esse número sozinho justifica o investimento em hardware dedicado. Mas o ponto para nós, devs, é: a próxima onda de produtos “inteligentes” não vai ser chatbot com tela — vai ser sensor + ML embarcado fazendo algo físico.

Perguntas frequentes

1. A Dyson CameraJet roda IA localmente ou envia dados para a nuvem?

Pelas informações divulgadas, o processamento de visão computacional acontece no próprio dispositivo em tempo real. A conectividade Wi-Fi provavelmente serve para atualizações OTA de firmware/modelo e telemetria agregada, não para inferência.

2. Qual o tamanho do dataset necessário para treinar um detector de espaços interdentais?

Não há números públicos da Dyson, mas para um modelo de detecção desse tipo em condições controladas (boca aberta, iluminação LED dedicada), algo entre 50.000 e 200.000 imagens anotadas costuma ser suficiente — desde que bem variadas em tons de gengiva, posição e tipo de dentição.

3. É viável replicar isso com hardware aberto?

Parcialmente. Você consegue montar o protótipo com ESP32-S3 + módulo de câmera OV2640 + um irrigador comercial hackeado. O gargalo é a qualidade da óptica macro e a calibração do dataset. Para produção, esqueça — o segredo está no hardware proprietário e no processo de fabricação da Dyson.

4. Quanto custa rodar esse tipo de modelo em MCU?

Em chips como o Kendryte K210 ou BL808, modelos quantizados INT8 para detecção simples rodam entre 30 e 80 ms por frame, consumindo 150–400 mW. A CameraJet provavelmente usa algo nessa faixa, talvez um SoC dedicado da própria Dyson ou um MediaTek/Realtek de baixo consumo com NPU.

5. Esse tipo de produto justifica o preço premium?

Depende do usuário. Se o ML realmente melhora a saúde bucal — e há evidência clínica de que irrigação localizada reduz sangramento gengival — sim. Mas para a maioria dos devs, o valor está em ver o que é possível quando você combina sensor dedicado, ML embarcado e bom design de produto. É um case study ambulante.

Gostou? Me segue no GitHub e deixa um comentário se tiver dúvida ou quiser aprofundar algum ponto.

Y

Yuri Sousa

Front-End Developer / Designer

Desenvolvedor apaixonado por criar experiências digitais acessíveis e visualmente perfeitas. Escrevo sobre desenvolvimento web, design e tecnologia.