PP-OCRv6 tiny em ONNX, para o OCR local da extensão Epryx
Repositório de apoio da extensão Epryx (automação de processos judiciais no eproc). Reúne, num só lugar com revisão fixada, os modelos que o OCR local da extensão baixa na primeira leitura: detecção de texto, reconhecimento de texto e orientação de página do PP-OCRv6 tiny do PaddleOCR, já em ONNX, mais variantes em float16 geradas por nós para rodar em GPU (WebGPU) no ONNX Runtime Web.
Nada aqui é treinamento nosso: os pesos são os do PaddlePaddle. O trabalho próprio é a conversão para float16 e a
troca da saída do reconhecimento por ArgMax (descritas abaixo).
Árvore
| arquivo | o que é | grupo na extensão |
|---|---|---|
dict.txt |
dicionário de 6.904 caracteres do reconhecimento (um por linha); as classes da saída são [blank] + dict + [espaço] = 6.906 |
base |
det/config.json, rec/config.json, doc_ori/config.json |
parâmetros de pré e pós-processamento extraídos dos inference.yml (normalização, tamanhos, limiares) e descrição dos grafos |
base |
det/fp32.onnx, rec/fp32.onnx, doc_ori/fp32.onnx |
modelos oficiais, sem alteração | cpu-fp32 e gpu-fp32 |
det/fp16.onnx, doc_ori/fp16.onnx |
os mesmos modelos com pesos em float16 | gpu-fp16 |
rec/fp16-argmax.onnx |
reconhecimento em float16, com ArgMax e ReduceMax no lugar da saída [N, T, 6906] |
gpu-fp16 |
rec/fp32-argmax.onnx |
reconhecimento fp32 com o mesmo ArgMax embutido |
gpu-fp32 |
LICENCA.txt |
Apache-2.0 e atribuição ao PaddlePaddle |
Origem dos modelos oficiais
| arquivo aqui | repositório de origem | revisão | arquivo de origem | sha256 |
|---|---|---|---|---|
det/fp32.onnx |
PaddlePaddle/PP-OCRv6_tiny_det_onnx | 2ba1506c0380b8f0b03dd142459aac66d4421f6c |
inference.onnx |
193bab7a04fca699a6c82e6abb5b81bdb28177f0abd4062552b04908dafb19f8 |
rec/fp32.onnx |
PaddlePaddle/PP-OCRv6_tiny_rec_onnx | 2612ab37152ae0a677521bae4e1e3d4fb4cf7c30 |
inference.onnx |
9ef676d6ed3c88256a2d92c640c44f25b0c40947e111b14b8be8f594091563e6 |
doc_ori/fp32.onnx |
PaddlePaddle/PP-LCNet_x1_0_doc_ori_onnx | 7330ab7039123e46af2dc03154b9969aa412c61d |
inference.onnx |
af9a0a4f317ff0709ce752067807f819cb15d883f8ecad89f28df1c6ee2d9c92 |
Os três fp32.onnx são byte a byte iguais aos de origem (o sha256 acima confere com o lfs.oid de cada um).
O doc_ori (PP-LCNet_x1_0_doc_ori) corrige páginas giradas em 0, 90, 180 ou 270 graus antes da detecção.
Como as variantes foram geradas
Script dev-tools/ppocr/modelos/variantes/gerar-variantes.py do repositório da Epryx (Python 3.11.9,
onnx 1.23.2, onnxconverter-common 1.16.0, numpy 2.4.6):
- float16:
onnxconverter_common.float16.convert_float_to_float16(model, keep_io_types=True), com o bloqueio padrão do conversor (os 6Resizeda detecção ficam em float32, comCastem volta). Entradas e saídas continuam float32. - ArgMax embutido (
rec/*-argmax.onnx): a saída[N, T, 6906]é trocada por duas saídasindices(ArgMax, eixo 2) eprobabilidades(ReduceMax, eixo 2), ambas[N, T]. A decodificação CTC gulosa é a mesma, conferida posição a posição contra a saída inteira; na GPU evita ler de volta 6.906 classes por passo.
Medição (corpus sintético de 115 páginas, máquina de desenvolvimento, ONNX Runtime Web 1.22): fp32 na CPU 2,2 % de CER; fp16 na GPU (WebGPU) 2,5 %, com lote de 16 linhas no reconhecimento. Variantes int8 não são publicadas aqui: no WebGPU travam e na CPU não aceleram.
Arquivos e checksums
| arquivo | bytes | sha256 |
|---|---|---|
dict.txt |
27156 | c5cbe34ef40c29c4df07ed012bf96569cb69a2d2a01a07027e9f13cb832bd9cd |
det/config.json |
3160 | 27a81beab706aadcb1b47bec61828d753e652747b735740c6afaaed0179cfb89 |
rec/config.json |
3312 | 3adef1348f21e3b19f957347ab7e53f1e2f885aef62aeda6e3747174821df31d |
doc_ori/config.json |
1883 | 70c257a76c458b618dcfe777a59533afc77d4be830e85a7b0611828fd5550e6a |
det/fp32.onnx |
1780590 | 193bab7a04fca699a6c82e6abb5b81bdb28177f0abd4062552b04908dafb19f8 |
rec/fp32.onnx |
4462639 | 9ef676d6ed3c88256a2d92c640c44f25b0c40947e111b14b8be8f594091563e6 |
doc_ori/fp32.onnx |
6788069 | af9a0a4f317ff0709ce752067807f819cb15d883f8ecad89f28df1c6ee2d9c92 |
det/fp16.onnx |
927431 | ff8cc3111288b0b1c2c364a5c9c0f4187278a701c9874718ce6eccbc00e76a8f |
rec/fp16-argmax.onnx |
2253949 | d380ba070dbb4e4c829560ab2e30e77fd68fc3c9f23a33e30dde620704d83ddc |
doc_ori/fp16.onnx |
3412464 | c2261f45de9a2d341ce8da0e1d2fd9d58850c3da99378c29d052b1000ab6c068 |
rec/fp32-argmax.onnx |
4462629 | ae2cface95ec32daed954d76b042c6f7e8c6b831f69eddb8798b798555a51942 |
(O sha256 de README.md e LICENCA.txt não consta da lista porque eles descrevem os demais.)
Uso
Baixe os arquivos de um grupo e passe os bytes ao InferenceSession.create do ONNX Runtime Web; a extensão Epryx
faz isso sozinha, conferindo o sha256 de cada arquivo contra o manifesto que vai no pacote, e recorre a um espelho
próprio quando o Hugging Face está inacessível na rede do usuário.
Licença
Apache-2.0 (license: apache-2.0 no cabeçalho deste cartão). Atribuição ao PaddlePaddle e texto integral em
LICENCA.txt. Este repositório não é do PaddlePaddle e não tem aval dele.