onnx-demo — the same two models, through ONNX Runtime Web

db_resnet50 + crnn_vgg16_bn, the OnnxTR exports, run by onnxruntime-web on WebGPU or WebAssembly. Everything around the two forward passes — the resize, the normalisation, the DB postprocessor, the crop geometry, the CTC decode and the document builder — is doctr-demo's own code, vendored byte-for-byte. So any difference between the two sites on the same machine is the inference engine, and nothing else.

1 · models

base
db_resnet50100.9 MB
crnn_vgg16_bn63.2 MB
164 MB, and not from this origin. Cloudflare Pages caps one asset at 25 MiB, so the two .onnx files are served from R2 and fetched cross-origin with CORS. They are cached in the page's own Cache API bucket (onnx-demo-models-v1) afterwards, so a reload is instant. Append ?models=/models/ to run against a local copy.
not loaded

2 · execution path

onnxruntime-web1.29.0
ORT build
EP requested
EP that started
db_resnet50 nodes
crnn nodes
WebGPU adapter
wasm threads
crossOriginIsolated
SharedArrayBuffer
hardwareConcurrency


“EP that started” is not a label, it is a measurement. ORT falls back from webgpu to wasm silently when it is given a list of providers, so this page gives it exactly one: a session that exists is proof that provider initialised. The two node rows below it are the other half — inside a webgpu session ORT still assigns any op it has no GPU kernel for to the CPU, and those counts are scraped from ORT's own graph-partitioner log.

3 · image

Drop a PNG or JPEG here, or click to pick one.
For a like-for-like comparison against doctr-demo, use doctr-native/test/fixtures/sample.png — the page both projects' 660-word parity numbers were measured on. PDF is not supported, for the same reason it is not on doctr-demo: rasterising one in a page would mean a JS PDF parser.

stages

    progress

    idle
    The tab stops repainting during detection. One 1024×1024 forward pass through db_resnet50 is a single dependency chain and ORT runs it on this thread — same as doctr-demo. Recognition yields between batches, so the bar moves there.

    log