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_resnet50
100.9 MB
crnn_vgg16_bn
63.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-web
1.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.