Como o Vigiovo classifica ovos sem IA

O Vigiovo encontra cada ovo pela cor, separa ovos encostados com watershed, mede sujeira contra uma superfície de sombreamento ajustada a cada ovo e encontra trincas como linhas finas e profundas. Limiares fixos decidem a classe. No vídeo, cada ovo é medido três vezes enquanto passa, e só é rejeitado se o defeito se repetir.

Atualizado em

Ovos marrons e creme sobre uma esteira de roletes, cada um contornado: verde para limpo, vermelho para sujo com mancha visível, laranja para trincado com a linha da trinca destacada.
Esteira sintética com gabarito conhecido: verde = limpo, vermelho = sujo, laranja = trincado. Rodando a ~90 quadros/s em um núcleo de CPU.

1. Máscara dos ovos por cor

A imagem é convertida para HSV. Um pixel é casca quando tem matiz quente (vermelho a amarelo), saturação de pelo menos 45 e brilho de pelo menos 120, numa escala de 0 a 255. Os roletes da esteira são cinza e escuros, então ficam de fora. Uma tabela de consulta faz essa conversão de matiz em uma única passada.

Abertura e fechamento morfológicos removem ruído e fecham pequenos buracos. Componentes menores que 150 pixels são descartados.

2. Escala independente da câmera

No primeiro quadro, o Vigiovo estima o raio típico de um ovo a partir das manchas isoladas e reduz a imagem até esse raio ficar em ~12 px. Contornos não precisam de detalhe, e isso corta de 4 a 10 vezes os pixels processados.

Todos os limites seguintes são múltiplos do raio r. Por isso a mesma configuração funciona com câmeras de resoluções diferentes.

3. Separação de ovos encostados

Ovos encostados formam uma única mancha. Para separá-los, o Vigiovo calcula a transformada de distância (a distância de cada pixel até a borda), encontra um pico por ovo com h-máximos via reconstrução morfológica e aplica watershed a partir desses picos.

O pescoço entre dois ovos é raso, então a separação é estável. Manchas do tamanho de um único ovo pulam essa etapa, o que mantém o custo baixo.

4. Contorno limpo e ovos não verificados

Cada ovo tem seus buracos preenchidos, passa por uma abertura com disco de ~1 r e é recortado pela elipse ajustada a ele. Isso remove sombras entre ovos e apêndices finos.

Um ovo é marcado como não verificado, e nunca é julgado, quando:

  • toca a borda da imagem;
  • tem área fora de 0,35 a 2,5 vezes a de um ovo típico;
  • tem solidez abaixo de 0,90 (forma côncava, sinal de sobreposição);
  • não se parece com uma elipse ou tem razão entre eixos acima de 1,8.

5. Medindo sujeira

Uma casca limpa não tem brilho uniforme: o domo do ovo cria um degradê. O Vigiovo ajusta, por mínimos quadrados, uma superfície quadrática ao brilho de cada ovo, descartando pontos fora da curva, e mede quanto cada pixel fica abaixo dela. Assim, uma mancha é medida contra aquele ovo, não contra um valor global.

Em paralelo, mede o desvio de cor no espaço Lab, que pega manchas com brilho parecido mas cor diferente. Reflexos de luz são excluídos. Se as manchas cobrem 3% ou mais da casca visível, o ovo é sujo.

6. Medindo trincas

Filtros black-hat e top-hat realçam linhas mais escuras ou mais claras que a vizinhança. Uma linha só conta como trinca se for:

  • alongada: pelo menos 5 vezes mais longa que larga;
  • longa: pelo menos 0,35 r;
  • profunda: avança pelo menos 0,4 r para dentro da casca, em vez de seguir a borda.

Essas regras separam trincas de manchas redondas e do sombreamento natural da borda do ovo. Se o comprimento total for de 0,8 r ou mais, o ovo é trincado.

7. Decisão e pontuações

A classe sai de uma regra de limiar: sujo se a fração suja passa do limite, trincado se o comprimento da trinca passa do limite, limpo caso contrário. Empates vão para o defeito mais grave.

As pontuações exibidas parecem probabilidades, mas são uma fórmula fixa: softmax de [1, sujeira ÷ limite, trinca ÷ limite] dividido por uma temperatura. O maior valor sempre coincide com a regra de limiar, e ninguém precisa confiar em uma caixa-preta.

8. Vídeo em tempo real

Segmentar é barato e acontece em todo quadro. Medir defeitos é a parte cara, então cada ovo é medido só 3 vezes, com pelo menos meio raio de deslocamento entre as medições, como as checagens 1/3, 2/3 e 3/3 de um painel de qualidade.

Os ovos são rastreados entre quadros por vizinho mais próximo com previsão de velocidade constante e desempate determinístico. Um ovo só é rejeitado quando o defeito aparece em 2 das 3 checagens, o que elimina falsos positivos de um único quadro, como um reflexo. Na prática, são cerca de 2 medições por quadro com ~45 ovos na tela.

9. O que sai do sistema

Para cada ovo, o Vigiovo gera um registro com a classe, as pontuações, o motivo legível e as medidas brutas. Abaixo, um ovo trincado real da imagem de demonstração:

{
  "id": 3,
  "label": "cracked",
  "scores": { "clean": 0.1809, "dirty": 0.0104, "cracked": 0.8087 },
  "reasons": ["crack length 1.22r >= 0.80r"],
  "measurements": {
    "dirt_fraction": 0.0,
    "crack_length_r": 1.2193,
    "solidity": 0.979,
    "ellipse_fill": 0.9973,
    "axis_ratio": 1.2178,
    "touches_border": false
  }
}