Visão computacional · CLI
Classificador KNN em Rust
Protótipo de classificação binária de imagens: pré-processamento, persistência das amostras e predição por vizinhos mais próximos em uma ferramenta de linha de comando.
Protótipo
- Rust
- image
- ndarray
- SmartCore
- Serde
- Clap
Minha contribuição
Projeto próprio de felpzw: CLI, extração de pixels normalizados, serialização das amostras e integração do KNN. O histórico público consultado atribui os commits a felpzw; não há contribuição em equipe documentada nesse recorte.
Problema
Explorar um pipeline simples que receba duas pastas de imagens rotuladas e classifique uma nova imagem como GOOD ou BAD. O objetivo demonstrável é conectar processamento de imagens e KNN em Rust, sem depender de uma interface web.
Contexto e escopo
É um protótipo de linha de comando com os subcomandos train e classify. O repositório não fornece um conjunto de avaliação reproduzível nem evidência de uso em produção. As classes são rótulos fornecidos por quem prepara as imagens, não uma medida objetiva de qualidade.
Arquitetura
Clap recebe os argumentos em main.rs. train.rs converte as imagens em escala de cinza, redimensiona com filtro Triangle e normaliza pixels para 0–1. ndarray organiza as amostras e os rótulos; Serde/bincode grava dimensões, k e dados de treino.
Em predict.rs, a imagem passa pelo mesmo processamento. O programa carrega as amostras, reconstrói o KNN do SmartCore com distância euclidiana e prediz a classe. O arquivo persistido contém os dados de treino, não um classificador já ajustado.
- Imagens rotuladas · cinza, resize e normalização
- Amostras + rótulos + k · arquivo bincode
- Nova imagem · KNN euclidiano → classe 0/1
Decisões e trade-offs
Pixels em escala de cinza e dimensões fixas simplificam a representação. Como consequência, cor e parte dos detalhes espaciais são perdidos; não há extração de características aprendidas.
Persistir amostras, rótulos e parâmetros deixa o fluxo fácil de inspecionar, mas o arquivo cresce com o conjunto de treino. Cada execução de classify reconstrói o classificador; o projeto não mede esse custo.
k e resolução são configuráveis na CLI. Isso permite experimentação, mas a escolha dos valores precisa de validação com dados separados. Esses trade-offs são uma análise da implementação, não resultados de benchmark.
Testes e evidências
Não foram encontrados testes automatizados, separação treino/teste, matriz de confusão ou métricas de acurácia no código revisado. A documentação lista testes unitários como melhoria futura. Esta revisão foi estática: os comandos abaixo não foram executados.
Uma próxima validação deve usar imagens sintéticas ou autorizadas, reservar amostras fora do treino e verificar pré-processamento, persistência e entradas inválidas. Esse é um plano de teste, não cobertura já entregue.
Limitações
Protótipo sem validação de acurácia. O texto “confidence” na saída imprime o rótulo inteiro 0/1, não uma probabilidade ou confiança calculada. Não deve ser interpretado como desempenho do modelo.
Há unwrap na construção/salvamento do modelo e validação incompleta de k, dimensões e pastas vazias. O carregamento de um arquivo ocorre antes da checagem de sua extensão. Um import específico de x86_64 em main.rs também precisa de revisão para outras arquiteturas.
O README cita versões de dependências diferentes do Cargo.toml; para reproduzir o recorte, consulte o manifesto e o Cargo.lock. Não há benchmark, demo hospedada ou validação clínica publicada neste estudo.
Explorar o projeto
Leia train.rs, model.rs e predict.rs nessa ordem para acompanhar o ciclo de dados. Compare a saída em main.rs com o retorno inteiro da predição.
Para experimentar, clone o repositório na revisão indicada e use uma toolchain Rust compatível com a edição 2024. Os comandos ilustram a CLI existente e podem exigir ajustes no protótipo. Prepare suas próprias pastas data/good e data/bad com imagens sintéticas ou autorizadas e uma imagem de teste separada; o dataset não acompanha o repositório.
cargo run --locked -- train --good-images ./data/good --bad-images ./data/bad --output model.bin --width 64 --height 64 --k 3
cargo run --locked -- classify --model model.bin --image ./data/test_image.pngFontes conferidas em 2026-09-25 · Conteúdo v1 · Revisão 87924a3.