20 Commits
Author SHA1 Message Date
teste.inabaandClaude Sonnet 5 3efdb08c9b fix: reduzir sobreposição de boxes em /detectar
Caixa grande "engolindo" uma caixa menor do mesmo produto continuava
aparecendo mesmo com sobreposição óbvia — IoU sozinho não resolve isso
porque a união fica dominada pela caixa maior, então o IoU continua baixo
mesmo com contenção quase total (ex.: caixa 1/5 da área da outra, 100%
contida, IoU ≈ 0.2).

- iou=0.5 explícito no NMS do YOLO (antes usava o default 0.7, permissivo
  demais)
- novo pós-filtro _suprimir_boxes_contidas(): entre duas boxes da mesma
  classe onde a intersecção cobre ≥90% da área da MENOR das duas, mantém
  só a de maior confiança

Afeta tanto as boxes da revisão quanto as do TrainingTab, já que ambas vêm
do mesmo /detectar.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 14:07:40 -03:00
teste.inaba 25ce7fd39f fix: UnboundLocalError em shutil durante o treino
_executar_treino_sync tinha um `import random, shutil` local depois de já
usar shutil.rmtree() mais cedo na mesma função — o import local faz o
Python tratar 'shutil' como variável local pra toda a função, então o uso
anterior lançava "local variable 'shutil' referenced before assignment"
antes mesmo de chegar no split de treino/validação. shutil já vem
importado no escopo do módulo; só falta random no import local.
2026-08-04 10:59:58 -03:00
Davi Dias 33a527adca fix: remove definição duplicada de _executar_treino_sync
Mesmo problema do commit irmão na API: linha da assinatura da função
duplicada, quebrando o import do módulo com IndentationError.
2026-07-05 19:38:09 -03:00
davi.dias 6f0cc443f2 feat: adiciona flag forcar_do_zero para treinar do zero sem apagar o modelo em produção 2026-07-03 11:02:13 -03:00
Davi Dias 8f61a76132 fix: corrige duplicação de diretório do treino e valida ambiente contra allowlist
O fix anterior (forçar project="runs/detect") duplicava o caminho para
"runs/detect/runs/detect/{ambiente}" porque o Ultralytics já resolve esse
project por padrão a partir do runs_dir configurado. Resultado: o "best"
nunca era encontrado e NENHUM modelo era enviado ao S3 (pior que o bug
anterior, que ao menos subia um modelo antigo). Agora só passamos
name/exist_ok e lemos o caminho real via modelo_base.trainer.save_dir,
sem adivinhar a string.

Também adiciona allowlist para 'ambiente' em /detectar e /treinar — o
valor é usado sem sanitização para montar paths locais (/tmp/...,
runs/detect/...) e chaves S3, o que permitia path traversal.
2026-07-02 21:11:07 -03:00
Davi Dias 6c4f9d78e5 fix: corrige upload de modelo velho após treino por causa do dir incremental
O Ultralytics incrementa o diretório de saída (train, train2, train3...)
quando o anterior já existe, mas o código sempre lia de um caminho fixo
"runs/detect/train/weights/best.pt". Depois do primeiro treino nesse
container, todo treino seguinte silenciosamente subia pro S3 o best.pt
de uma rodada anterior em vez do modelo recém-treinado — por isso as
métricas de antes/depois batiam sempre igual, mesmo com o modelo
internamente convergindo bem (mAP50 90%+ no treino do-zero mais recente).

Agora project/name/exist_ok fixam o diretório de saída por ambiente,
garantindo que o best.pt lido seja sempre o do treino que acabou de rodar.
2026-07-02 20:35:48 -03:00
Davi Dias a990e6b618 feat: flag forcar_do_zero para treinar do zero ignorando modelo atual
Permite disparar treino com yolov8n limpo (sem fine-tuning) sem apagar
o cerebro.pt em produção, que continua servindo o /detectar normalmente
enquanto o novo treino roda.
2026-07-02 19:23:51 -03:00
Davi Dias 5f489ecb9e docs: atualiza CLAUDE.md com convenção log_print e detalhe dos logs 2026-06-27 22:02:51 -03:00
Davi DiasandClaude Sonnet 4.6 6832076db3 feat: log_print passa a alimentar _training_logs além do stdout
Triagem, download da base, contagem de imagens e mensagens de conclusão
agora aparecem no console de logs do frontend em tempo real, não apenas
nos logs do container.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-27 20:17:31 -03:00
Davi DiasandClaude Sonnet 4.6 1c39fb70f8 fix: separar conjunto de validação do treino com split 80/20
Antes, val e train apontavam para o mesmo diretório, causando
overfitting silencioso e métricas infladas. Agora 20% das imagens
são movidas para val/ antes do treino.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 20:15:26 -03:00
Davi DiasandClaude Sonnet 4.6 432159bb2e fix: remove aprovação automática de imagens sem detecção na triagem
Imagens onde o YOLO não detecta nada (conf == 0) passavam direto para
base-oficial, contaminando o dataset. Agora vão para descartados e
precisam de revisão humana antes de entrar no treino.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 19:51:04 -03:00
davi.dias c8ce09e5af docs: corrige threshold de triagem e parâmetros de treinamento na skill 2026-06-25 15:34:44 -03:00
Davi Dias 3f375ec8d5 fix: corrige grade de sessões oculta quando status é concluido_rollback 2026-06-23 20:48:15 -03:00
davi.dias 43079049bd feat: fine-tuning incremental com LR reduzido e fallback para primeiro treino 2026-06-11 13:48:38 -03:00
davi.dias 336b89cc98 feat: captura de logs por época via callback YOLO e expõe em GET /treinar/status 2026-06-10 15:14:10 -03:00
davi.dias f7ab4219ca feat: treino assíncrono com polling de status
/treinar agora dispara em background thread e retorna imediato.
Novo endpoint GET /treinar/status expõe estado (idle/running/concluido/vazio/erro).
2026-06-10 14:40:42 -03:00
Davi Dias 8bdb28cdc1 docs: adicionado skill 2026-06-06 13:42:51 -03:00
Davi Dias a268ea9357 docs(claude.md): adicionado arquivo de contexto e claude.md 2026-06-06 13:28:11 -03:00
Davi Dias e1fe47b264 chore: remove pasta gondola-imagem-negocio-main duplicada 2026-05-21 22:30:15 -03:00
davi.dias 79c406504b initial commit 2026-05-19 15:57:48 -03:00