# Modelos, contratos e licenças

Pesquisa e download em 14/10/2026. Os pesos ONNX originais não foram convertidos, quantizados ou alterados. As três entradas e saídas foram inspecionadas nos arquivos efetivamente incluídos; os hashes estão em `manifest.json`.

## Pesos de detecção

Distribuidor: [ankandrew/open-image-models — release assets](https://github.com/ankandrew/open-image-models/releases/tag/assets).

- [YOLOv9-T-384 ONNX](https://github.com/ankandrew/open-image-models/releases/download/assets/yolo-v9-t-384-license-plates-end2end.onnx): 7.771.218 bytes. Entrada `images`: float32 `[1,3,384,384]`. Saída `output0`: `[N,7]`, colunas `[batch,x1,y1,x2,y2,classe,score]`. Opset 17.
- [YOLOv9-S-608 ONNX](https://github.com/ankandrew/open-image-models/releases/download/assets/yolo-v9-s-608-license-plates-end2end.onnx): 28.612.350 bytes. Entrada `images`: float32 `[1,3,608,608]`. Mesma saída. Opset 17.

Fontes do contrato: [preprocess.py](https://github.com/ankandrew/open-image-models/blob/main/open_image_models/detection/core/yolo_v9/preprocess.py), [postprocess.py](https://github.com/ankandrew/open-image-models/blob/main/open_image_models/detection/core/yolo_v9/postprocess.py) e [inference.py](https://github.com/ankandrew/open-image-models/blob/main/open_image_models/detection/core/yolo_v9/inference.py).

O código preserva proporção com letterbox, cinza 114, RGB, layout NCHW e divisão por 255. Mantém o padding fracionário para desfazer as coordenadas e aplica truncamento e limites ao recorte. Os modelos já incluem NonMaxSuppression; não se deve interpretar a saída como YOLO bruto nem aplicar sigmoid/NMS novamente. Filtragem adicional de score: 0,25; classe zero (License Plate), batch zero.

## Peso OCR

Distribuidor: [ankandrew/fast-plate-ocr — release arg-plates](https://github.com/ankandrew/fast-plate-ocr/releases/tag/arg-plates).

- [CCT-XS-v2-global ONNX](https://github.com/ankandrew/fast-plate-ocr/releases/download/arg-plates/cct_xs_v2_global.onnx): 3.344.292 bytes. Opset 15.
- [Config correspondente](https://github.com/ankandrew/fast-plate-ocr/releases/download/arg-plates/cct_xs_v2_global_plate_config.yaml), incluída sem alteração e transcrita para `ocr-config.json` com as 66 regiões em ordem.

Entrada `input`: **uint8** `[1,64,128,3]`, RGB/NHWC, redimensionamento linear direto, sem manter proporção. A normalização está no modelo. Saídas `plate`: `[1,10,37]` e `region`: `[1,66]`, já em probabilidades. Alfabeto `0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_`. Argmax independente por posição, mantendo caracteres repetidos e retirando apenas `_` final. Não é decodificação CTC. A confiança exibida considera somente os caracteres lidos, sem os slots finais vazios.

Fonte: [core/process.py](https://github.com/ankandrew/fast-plate-ocr/blob/master/fast_plate_ocr/core/process.py) e [plate_recognizer.py](https://github.com/ankandrew/fast-plate-ocr/blob/master/fast_plate_ocr/inference/plate_recognizer.py).

O redimensionamento JavaScript em `core.js` usa interpolação bilinear com coordenadas de meio pixel e arredondamento para uint8. Não usa o filtro variável de redimensionamento do Canvas. Não se promete igualdade bit a bit com OpenCV: OpenCV usa otimizações/arredondamentos que podem diferir um nível de intensidade. A decodificação JPEG do navegador também pode diferir. Os testes documentam os resultados reais dessa implementação.

## Runtime e licença

[ONNX Runtime Web 1.22.0](https://www.npmjs.com/package/onnxruntime-web/v/1.22.0), pacote oficial do registro npm. Arquivos locais: `ort.wasm.min.js`, `ort-wasm-simd-threaded.mjs`, `ort-wasm-simd-threaded.wasm`. O nome “threaded” faz parte da distribuição; a aplicação fixa `numThreads=1`. O worker é criado pela aplicação. Sem CDN ou chamadas a API externa durante a leitura. [Configuração oficial](https://onnxruntime.ai/docs/tutorials/web/env-flags-and-session-options.html).

Avisos oficiais incluídos em `licenses/`:

- [Open Image Models](https://github.com/ankandrew/open-image-models/blob/main/LICENSE): licença MIT do repositório.
- [FastPlateOCR](https://github.com/ankandrew/fast-plate-ocr/blob/master/LICENSE): licença MIT do repositório.
- [ONNX Runtime](https://github.com/microsoft/onnxruntime/blob/v1.22.0/LICENSE): MIT, acompanhado de ThirdPartyNotices.
- [YOLOv9 upstream](https://github.com/WongKinYiu/yolov9/blob/main/LICENSE.md): GPL-3.0, incluída como aviso da origem da arquitetura.

**Limite da evidência sobre os pesos:** as páginas de release consultadas distribuem os pesos, mas não apresentam uma licença independente explícita por arquivo. Os modelos também não trazem campos de licença nos metadados ONNX. Portanto, a licença MIT dos repositórios não é apresentada aqui como garantia de que todos os pesos YOLOv9 e suas origens de treinamento tenham uma licença comercial independente. Preservamos as fontes e ambos os avisos (MIT do distribuidor e GPL upstream) sem esconder essa distinção. Uso técnico gratuito nesta demo não equivale a uma declaração de ausência de obrigações de licença para um produto fechado.

O código autoral da demo (`index.html`, `style.css`, `app.js`, `core.js`, `inference-worker.js` e `.htaccess`) é entregue com código-fonte e licença MIT em `licenses/Garage77-MIT.txt`. Isso não relicencia os pesos nem as dependências de terceiros.
