Como o FoodVision chega a 92% de acurácia em pratos brasileiros
A história de como treinamos um modelo de visão pra entender feijoada, marmita fit e açaí — e por que o resultado fica entre 4% e 8% da contagem de um nutri.
Pratos brasileiros são um pesadelo bonito para visão computacional. Acarajé não parece croquete. Tapioca não é panqueca. E feijoada não é "stew". Modelos treinados em datasets ocidentais sentem isso na pele: confundem feijão preto com café, classificam pão de queijo como bolinho de batata.
Esse post conta como chegamos em 92% de acurácia em pratos brasileiros com o FoodVision — e onde ainda estamos errando.
O ponto de partida
Quando começamos, em janeiro de 2025, o baseline era Food-101 fine-tuned. Em pratos americanos, ~80% top-1. Em pratos BR? 34%. Vergonhoso.
O que mudou
Três decisões resolveram 80% do problema:
- Dataset próprio. Começamos com 12k fotos rotuladas à mão. Em 14 meses chegamos em 847k.
- Detecção antes de classificação. O FoodVision não classifica o prato inteiro — ele detecta cada ingrediente como objeto separado. Isso permite acertar "feijão + arroz + linguiça" mesmo num prato que ele nunca viu.
- Pesagem por área e densidade. Modelo de profundidade estima volume; densidade média do alimento converte em gramas.
A primeira vez que rodei o FoodVision no prato de um cliente eu não acreditei. Tinha feito a contagem na mão — deu 612 kcal. O app deu 628. Em 3 segundos.
Onde ainda erramos
- Pratos com molhos densos. Stroganoff cobre o que está embaixo — o modelo chuta mal.
- Comida em vasilhas escuras sobre toalha escura. Contraste insuficiente.
- Bebidas em copos opacos. Volume é estimado pela profundidade do copo, não do líquido.
Próximos passos
Vamos abrir um endpoint público de FoodVision para nutricionistas no Q3/2026. Treinos focados em pratos regionais (nordeste, sul) já estão na fila. E sim, culinária mineira é a primeira da lista.