cnrocr
Container number detection and recognition — ISO 6346 end-to-end, ONNX only.
A region detector locates the number, ISO type code, owner code and serial on the container; an OCR recognizer reads each crop with a spec-constrained beam search. Fragments split across panels are merged back into a single number and validated against the ISO 6346 check digit.
No PyTorch required. The runtime is onnxruntime + numpy + pillow.
Install
pip install cnrocr # CPU
pip install "cnrocr[gpu]" # NVIDIA CUDA — see the note below
pip install "cnrocr[server]" # local REST API + dashboard
Model weights (~113 MB) are not bundled in the wheel. They are downloaded on first use and cached locally:
cnrocr models download # optional — happens automatically otherwise
About the GPU extra
onnxruntime-gpu does not carry the CUDA runtime, so cnrocr[gpu] on its own
is often not enough. If the runtime is missing or a different major version,
onnxruntime prints an error, keeps going on the CPU, and the only symptom
is that inference is slow. Two things to know:
- Remove the CPU build first.
onnxruntimeandonnxruntime-gpuunpack into the same directory and cannot both own it:pip uninstall -y onnxruntime && pip install "cnrocr[gpu]" - Check what you actually got.
cnrocr checkprints the providers in use, and--device cudanow warns when it lands on the CPU anyway.
Python API
from cnrocr import ContainerOCR
ocr = ContainerOCR() # weights resolved from cache
result = ocr.read("gate_cam.jpg")
for c in result.containers:
print(c.number, c.iso_type, c.confidence, c.needs_review)
# TGHU8913889 22G1 0.9997 False
Multiple images
results = ocr.read_many(["a.jpg", "b.jpg", "c.jpg"], batch_size=8)
read_many treats the images as unrelated — N images in, N results out.
Multi-view fusion
When several cameras photograph the same container, fuse them into one answer instead of voting on strings:
mv = ocr.read_multiview(["cam1.jpg", "cam2.jpg", "cam3.jpg"])
print(mv.number, mv.agreement, mv.mode)
Beam-search candidates from every view are summed in log space, so a character
that one view is unsure about can be settled by the others. If the views appear
to be looking at different containers, they are not fused — mv.consensus
becomes False rather than producing a confident wrong answer.
Review triage
A check digit alone is not enough. The constrained decoder only emits
spec-conforming candidates, so when the true string is absent from the beam it
will confidently output a plausible wrong number that still passes the check
digit. needs_review combines the check digit, the spec flag and a confidence
floor:
if c.needs_review:
print(c.review_reason) # "low confidence (0.612 < 0.7)"
Owner code registry (optional)
Real-world owner codes are registered with the BIC. Supplying the list filters out invented codes that would otherwise pass both the format check and the check digit:
from cnrocr import OwnerCodeRegistry
ocr = ContainerOCR(registry=OwnerCodeRegistry.from_file("bic_codes.txt"))
The list is not shipped with this package.
Command line
cnrocr read gate_cam.jpg
cnrocr read *.jpg --json --device cuda
cnrocr multiview cam1.jpg cam2.jpg cam3.jpg
cnrocr models status
cnrocr check # diagnose install, providers, cache
--fail-on-review makes the process exit with code 2 when any result needs
human review, which is convenient in batch pipelines.
Local server
A REST API and a browser dashboard, both served from your own machine. Images never leave it.
pip install "cnrocr[server]"
cnrocr server start # http://127.0.0.1:8000
cnrocr server start --daemon # background; `server stop` to end it
Open the address for the dashboard, or /docs for the interactive API. The
models are loaded once at startup and shared by every request.
curl -X POST -F "file=@gate_cam.jpg" http://127.0.0.1:8000/api/read
{
"detection_id": 41,
"device": "cuda",
"containers": [{"number": "TGHU8913889", "iso_type": "22G1",
"confidence": 0.9997, "needs_review": false}],
"elapsed_ms": 38.4
}
| Endpoint | Purpose |
|---|---|
POST /api/read |
One image (multipart). /api/read/base64, /api/read/binary take other shapes |
POST /api/read/batch |
Several images in one call |
POST /api/multiview |
Several views of the same container, fused into one answer |
GET /api/review |
The queue of results a human should look at |
POST /api/review/{id} |
Record the human's verdict; corrections are check-digit validated |
GET /api/history |
Past detections, with filters and CSV/JSON export |
GET /api/health |
Liveness, version, and which device is actually in use |
GET /api/stats |
Counts, review rate, remaining quota |
Review queue
Results below --review-confidence (default 0.7) are flagged and collected
for a human instead of being silently trusted. In practice that is a small
fraction of traffic — on our validation set every misread scored below 0.7
while correct reads sat near 1.0, so the threshold catches the errors and
sends only a few percent of good reads along with them.
The dashboard shows each flagged result next to its photo, with the number in an editable field. Confirming stores the corrected value, which is the only record of which misreadings repeat.
Access from a phone
The dashboard is built for a phone first: the camera button photographs a container and uploads it directly, which is enough to work the queue at the gate.
cnrocr server start --host 0.0.0.0 --token "$(python -c 'import secrets;print(secrets.token_urlsafe(24))')"
Binding to 0.0.0.0 exposes the server to everyone who can reach the host, so
set a token when you do. The server says so at startup if you forget; it
does not refuse to start, because a closed network is a legitimate setup.
Configuration
Flags, a YAML file, or the environment — later wins, and flags win over all.
cnrocr server start --config server.yaml --port 9000 --device cuda
server:
host: 127.0.0.1
port: 8000
api_token: "" # required in practice once host is not loopback
models:
device: auto # auto | cpu | cuda
workers: 4
review_confidence: 0.7
storage:
save_images: true # the review screen needs the photo
max_history: 5000
Every setting also reads from CNROCR_SERVER_<NAME>. An unknown key in the
YAML is an error rather than a silent no-op — a typo in api_token must not
quietly leave authentication off.
Telling something else
The API is pull-only, which is no use to a barrier or a terminal operating system. Point the server at a URL and every result is POSTed there as it happens:
cnrocr server start --webhook https://gate.internal/cnrocr \
--webhook-token "$(openssl rand -base64 24)"
--webhook-token is sent to the receiver as a bearer token so it can tell the
posts came from here. It is not --token, which guards this server.
Results go out for anything that passes through the server — the dashboard,
cnrocr server read, or your own POST /api/read. Plain cnrocr read runs in
its own process and never reaches the server, so it sends nothing.
{"event": "read", "server": "cnrocr", "ts": "...", "data": { ... }}
event is read for a recognition and review for a human verdict, so a
receiver can supersede what it was told when the read first came in. Delivery
never blocks or fails a request: a detection that was stored succeeded whether
or not anyone could be told. Failures are retried a couple of times, then
counted in /api/stats — a webhook that stopped working is otherwise
invisible. If deliveries must not be lost, poll /api/history and treat the
webhook as a latency improvement rather than a transport.
webhook:
webhook_url: "https://gate.internal/cnrocr"
webhook_token: "" # sent to the receiver as a Bearer token
webhook_events: [read, review]
webhook_retries: 2
Starting at boot
A gate PC reboots. cnrocr server install prints a systemd unit, a launchd
plist or a schtasks command for this machine:
cnrocr server install # print it
cnrocr server install --write /tmp # write it to a file
It generates the unit and the one command that installs it; it does not install anything itself, because that needs administrator rights and you should read both before running either. It also names what will otherwise break after the next reboot — a licence key that only exists in your shell, a token that a scheduled task cannot carry.
Storage
Photographs are kept for the review screen and capped separately from the history, because a row costs a few hundred bytes and the picture beside it costs a few hundred kilobytes:
storage:
save_images: true
max_history: 5000 # rows
max_images: 2000 # photographs; they age out first
Deleting or trimming a detection deletes its photographs, and any left behind by an earlier version are swept at startup.
cnrocr license --set <key> # register a licence (or paste it in the dashboard)
cnrocr server status # is it up, on what device, since when
cnrocr server list # every instance this machine knows about
cnrocr server logs -f # follow
cnrocr server read img.jpg # send a file to a running instance — not the same
# as `cnrocr read`, which never touches the server
cnrocr server install # a unit file that starts it at boot
cnrocr server stop
What this is not
It reads container numbers. It does not watch cameras, and it does not decide
whether to open anything. There is no RTSP input, no booking lookup and no
barrier control — a gate needs the truck's plate and a booking reference as
well as the container number, and those decisions belong to a terminal
operating system. Use --webhook to hand results to whatever makes them.
Licensing
Licences are priced by daily volume. A licence raises the daily limit to the tier you are on; the counter is per image, not per call, and resets at 00:00 UTC. Tiers start at 100 images a day and run to unlimited — email vislab2026@gmail.com for current pricing, or see the project page.
cnrocr license # which tier, and today's usage
Multi-view counts per view.
read_multiviewwith three photographs of one container spends three images, not one. Three hundred containers photographed from three angles is 900 images a day, not 300 — worth checking against the tier before choosing it.
The library, the CLI and the server all draw on the same daily budget. When it runs out the process exits with code 3, and the server answers 429 rather than 500 — the request was fine and so is the server. Nothing is processed on a call that would exceed the allowance, so a refused call costs none of it.
Evaluation limit
Without a licence, cnrocr processes 30 images per day.
Evaluating it properly
Thirty images is enough to see whether it reads your photographs. It is not enough to wire up the API, try the batch and base64 shapes, and put any load through it — that is an afternoon's work and rather more than thirty images.
Email vislab2026@gmail.com for a free 14-day evaluation key with no daily limit. Say who you are and what you are building; there is nothing to negotiate and no card involved. When it expires the key simply stops applying and you are back to 30 images per day — nothing breaks, nothing to uninstall.
The same address issues full licences. A key looks like this:
# Windows
setx CNROCR_LICENSE "eyJlbWFpbCI6..."
# macOS / Linux
export CNROCR_LICENSE='eyJlbWFpbCI6...'
The key may also be saved to a file named license in the cache directory
(cnrocr models path shows where). Verify with cnrocr check, which also
warns for thirty days before a licence expires — a renewal should not be
discovered by a server that stopped working.
Weights and caching
| Platform | Location |
|---|---|
| Cache (Windows) | %LOCALAPPDATA%\cnrocr\Cache\models\<set> |
| Cache (macOS) | ~/Library/Caches/cnrocr/models/<set> |
| Cache (Linux) | ~/.cache/cnrocr/models/<set> |
Every file is verified against a SHA-256 recorded in the wheel. Released assets are immutable: a new model set ships under a new tag and a new library version, so upgrading never invalidates an existing install.
The weights are encrypted and are decrypted into memory when a session is built. The cache holds ciphertext only; no plaintext model is written to disk.
Environment overrides:
| Variable | Effect |
|---|---|
CNROCR_MODEL_DIR |
Use this directory as-is; never download |
CNROCR_CACHE_DIR |
Relocate the cache root |
CNROCR_WEIGHTS_BASE_URL |
Fetch weights from somewhere else (file:// works) |
License
Proprietary. Evaluation and non-commercial research use only — see LICENSE.
Contact the copyright holder for commercial licensing.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cnrocr-0.6.1-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.13, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7d6f09d9c4e00ff1b551081bff9776287392cdbaa2979f69edcd597a76588c01
|
|
| MD5 |
381587e08feedf3d39e0a674ead8692f
|
|
| BLAKE2b-256 |
e483e7f8346b7026ac67950d196efbad183815d4b7f67c8ea8b15d49debd76e9
|
File details
Details for the file cnrocr-0.6.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 14.5 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8e0effe0eff2a5738915f016e3ce0b71a722f1b2a4a873b909ebc9e1d12b3302
|
|
| MD5 |
d2a8f88519ae1ff0ae6744fd1de3af86
|
|
| BLAKE2b-256 |
2f9ee79880ef89f5b5faaa841a6263d494dd8e2b0fbd142bb8441508336806cb
|
File details
Details for the file cnrocr-0.6.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 14.1 MB
- Tags: CPython 3.13, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ac4ec6621c3bff52f8a49a19270222a90c2dbc498b2ea52b2364d5de365a8961
|
|
| MD5 |
6e71de50b3956384ca3d1a9208db8829
|
|
| BLAKE2b-256 |
5dd0f7b67f7003bf3b2da9e375c95a23fe55c5c2e363881a3e256d9a5d673158
|
File details
Details for the file cnrocr-0.6.1-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.13, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4558f5dfeb06852433d93961eb7235f0cb2452f1dc620eb842c8dd9eb01262e
|
|
| MD5 |
31ad7834db06429bc0f28517ad7d680a
|
|
| BLAKE2b-256 |
ae8782e4b5a66b98c6fbfd701c95be167e84613f8a4643aa51721e6bb0ad708b
|
File details
Details for the file cnrocr-0.6.1-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.13, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
37d0ecc94682a1dd54f8d4787c2a2ab6c0b4160189669024de2e6b8cdb302f4a
|
|
| MD5 |
8d67f19c6de81629c1ecd81505823708
|
|
| BLAKE2b-256 |
5311656717c5ced6450263547d0eef2f780f4b22c9d2b48692382731ecc5045b
|
File details
Details for the file cnrocr-0.6.1-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
887ca634c76816d4f5c1c242d8e7038fa03fdfb09e93a88eae5957852660bb64
|
|
| MD5 |
c41dcce24ad39ff4891b2fa9b88ebd44
|
|
| BLAKE2b-256 |
d32413ad157262a4caeffaf2b3f1f5f17b25c06899e72854a78ed8c9dee3fcc5
|
File details
Details for the file cnrocr-0.6.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 14.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0244dec3b787850a02ca755fb78cc655a813cf543b305733f7da40ffa80428a
|
|
| MD5 |
9a73d3a13a04ebc6600bf310155de1c5
|
|
| BLAKE2b-256 |
3adbe761093aded5e17df19b4be74d29ab91263178136f2f788915bc6c4dd82a
|
File details
Details for the file cnrocr-0.6.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 14.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0f4a661108d6702948f160c239ed9c6bd18fb219bc4508bcaacba257dc1dcd2f
|
|
| MD5 |
6b5fe989afcdfba76241bcf3555fd830
|
|
| BLAKE2b-256 |
12ac745e2bf697b6aae529df3c94da99cf9d1a99d12492a345a7f5ee4e8be78f
|
File details
Details for the file cnrocr-0.6.1-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
15bfd1590c915f2048177ed3b7d6eeedfcd1723a1cc96d5fda92d607484778cc
|
|
| MD5 |
0a078f6fc4acb3ab1f24a44c3f41e940
|
|
| BLAKE2b-256 |
ec840abca385a3d6e07e58b65a41b4b4e78a815ac5fd24ea274a275daf2cf9e4
|
File details
Details for the file cnrocr-0.6.1-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.12, macOS 10.13+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c82f38b4b069a08b615fe79f6d66d96828a0fccfe8f252745e182ba0326f2fae
|
|
| MD5 |
0f59c246daf84a39588fa54836f96170
|
|
| BLAKE2b-256 |
64ef09500029181d4c7865afd0b9722414feace970e2fdd6bfb3eb8ad502687c
|
File details
Details for the file cnrocr-0.6.1-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 2.0 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
534acf641752b49595c2d113b62495074a1f25d8aec92d56eca6a9b0daa5973f
|
|
| MD5 |
7865dc6b8138390b5f6290b3db346ee1
|
|
| BLAKE2b-256 |
67bf762586e670bd2aab1c92ef41cabe2f02a0b78391dbc34d6a21dd3bb1af9a
|
File details
Details for the file cnrocr-0.6.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 14.7 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90f46212283b72f4bc7e28db7a3e225c0d633fe75af3d5bf2b7c740f4ef7859e
|
|
| MD5 |
f1812c860b26b4894e814058dd9c3f86
|
|
| BLAKE2b-256 |
7005bae46215ceb8a8853c1cadd0364d6091f3bf7f0167b6cd0ee3fd8b6cb3e0
|
File details
Details for the file cnrocr-0.6.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 14.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c4805cb63d281b63272f9c935db8d423efb867494b258f2ae8ffe6a8a689c09
|
|
| MD5 |
8b9d7fa43cb0f9572043128fc7f29d32
|
|
| BLAKE2b-256 |
a756682a61b71cd748a446c6d07957b59c32ca1dfd2a18e4217238f3c69610dd
|
File details
Details for the file cnrocr-0.6.1-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.11, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d2cd101934306461093066ee7c239aaaef887def424ee7f9c21d8b521c102e6
|
|
| MD5 |
82fe0e0d39967feb86f1eb5bc6292791
|
|
| BLAKE2b-256 |
97cd030fbde8748ac8dadd8766fe64ebd65079a882ffe04bcc2f4b21712f2de2
|
File details
Details for the file cnrocr-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.11, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0c0e4aa47c43ca654a92e4ee3fef99a07ca130b0a14114cf0dba5d7de27d4290
|
|
| MD5 |
7dca79b945a8973593d48ef82baa7cc7
|
|
| BLAKE2b-256 |
fc7803a0ed792e6c05ec9324965191657333741112b02f896ea92e1c45337f27
|
File details
Details for the file cnrocr-0.6.1-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.9 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b59c93d7d4d7c053b7ea0f98bbcb1fa9b180a4034d370b7988811bf7cd423a6f
|
|
| MD5 |
8cc75d05f3cec335fbc32df55d9ec7d0
|
|
| BLAKE2b-256 |
1672da754ce9c87f7309aa4da339ba7e6240e849b2752c8fed06f383e41001fe
|
File details
Details for the file cnrocr-0.6.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 13.9 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8fcaaffbbbde129b10c8cad8ac6cc1ea60acaf8b4c8590f96ae578e52bd5ba5
|
|
| MD5 |
7f158f3c43b298c031b7330447b8a922
|
|
| BLAKE2b-256 |
0ab72d61758bbbc483ae00961690ce4abf7ec8fe93189ce7b86acabf6be02664
|
File details
Details for the file cnrocr-0.6.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 13.7 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b4ae6ee69dbc95b00e21505e600b7a7f60f8de47cd48da224dd9058de2526bff
|
|
| MD5 |
ccb6a4bb499f6b65c7ea38632d8e27ff
|
|
| BLAKE2b-256 |
82a9abe2cade35c0ec012064bb78ea0afc4229544bd0191be2ef88b93730401c
|
File details
Details for the file cnrocr-0.6.1-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.1 MB
- Tags: CPython 3.10, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9c28638f360f22545fd1c3db0bb62c569aee10b92a4e00d196d04077be8bed69
|
|
| MD5 |
8d65c80ef568b5547f92b40af9e9a63e
|
|
| BLAKE2b-256 |
b3bc55da689875749fca8b1457d44ea46d8fc3eadb552202452646c5214ee376
|
File details
Details for the file cnrocr-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cnrocr-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: CPython 3.10, macOS 10.9+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec29f6d872000ae0ee76e6199a92f8b769bbbcba68a88578cd9014c3cf850fb4
|
|
| MD5 |
f5c824f9b1c2e56759e223da46713916
|
|
| BLAKE2b-256 |
1e53a83ad90471d790a784579c14ce60b010dbe09a126e815217541b3c03e8d6
|