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 via onnxruntime-gpu
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
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.
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
cnrocr server stop
Evaluation limit
Without a licence, cnrocr processes 30 images per day. The counter is per image, not per call, and resets at 00:00 UTC. It is shared by the library, the CLI and the server — they all draw on the same daily budget.
cnrocr license # licence status and today's usage
When the quota runs out the process exits with code 3 and prints how to ask for a licence. Nothing is processed on a call that would exceed the quota — it is all or nothing, so a refused call costs no quota.
To request an unrestricted licence, email vislab2026@gmail.com with your name, organisation and intended use. You will receive a key:
# 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.
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.4.0-cp313-cp313-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp313-cp313-win_amd64.whl
- Upload date:
- Size: 1.1 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 |
25937949e64e9e9aebcedd80f2f3e91d5e8817d4bf81bd3b76131a0fca5d715a
|
|
| MD5 |
4282b17f242cb1ca5d8e47f37c526887
|
|
| BLAKE2b-256 |
e1b147dc71f91f36d559d00e0fadc91665bfb7d391cd8f62c00db35a547d5b36
|
File details
Details for the file cnrocr-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 9.0 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 |
4e2bc3066a9799b4afd868104bbd4688cb7fb6ce0b0c0c51c3ba0a87834230e1
|
|
| MD5 |
13ebbb113704348d4fdc249de4020186
|
|
| BLAKE2b-256 |
fc40165310ffc8a457503ab01ec4baac892b8af54e2ab0ccc4ccd5ae422f6dce
|
File details
Details for the file cnrocr-0.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 8.7 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 |
f366d18780186f87bfc4e2dc849bb21f748885dac920735cc15e0ab4d6ac4bd2
|
|
| MD5 |
56359dcec897bd35afb0b962cde21213
|
|
| BLAKE2b-256 |
b89a94a9b086e82cbf1a935aec5b3174e5e781d21d053a184396372254adfb11
|
File details
Details for the file cnrocr-0.4.0-cp313-cp313-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp313-cp313-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 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 |
16d04f54077bbccb18ae3e34f48c807f8c6fd41e970479ddd3ffe86414c904d4
|
|
| MD5 |
8fb6e18f935da1ddf3393c1a2987d2d0
|
|
| BLAKE2b-256 |
a22beefce74620a39a2ae21b342f0a05efb77506487c49b6d9b0e1f2e99e4613
|
File details
Details for the file cnrocr-0.4.0-cp313-cp313-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp313-cp313-macosx_10_13_x86_64.whl
- Upload date:
- Size: 1.3 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 |
79f626f0724321e43733f96ab88b2aa6074c1c05d5512e2af6deb7f12acaa2fa
|
|
| MD5 |
275bfb1bfbf5c44e73a00fcfb18cdc8e
|
|
| BLAKE2b-256 |
2031ff1f5fd293e9500c3eb1884d0b84a0c1d4f796d6a25ad4833c31b043fa5c
|
File details
Details for the file cnrocr-0.4.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 1.1 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 |
cba1536ef7c50b341c5a72af2ea7f3cdebbd6440f74f894a02cd17d51e852f60
|
|
| MD5 |
d2b66f00bb2ebfe2131360438da85b95
|
|
| BLAKE2b-256 |
1260b83c2dd3278d3fab5a7a7c9a9d330495a6ee0cb12a754abee363132f0bfd
|
File details
Details for the file cnrocr-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 9.1 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 |
d905dea6910782c999a71cd6c5e7b5930ef0562acae89d378960ed2f1746e266
|
|
| MD5 |
eda6bc9f635f2786270f3116a66f7737
|
|
| BLAKE2b-256 |
cd63f217987c7b3d1b028b2438a97922c4b7ce3c3d1f99bf865396f7ba659c88
|
File details
Details for the file cnrocr-0.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 8.9 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 |
00db9392e7fe385fab2a964229f8016c45c27e38e641e5b6a2550aae206ac68a
|
|
| MD5 |
0fc60b2ec650af4b3f5fd87e1ab19758
|
|
| BLAKE2b-256 |
32eea81efe7f234f5cf0bfaeb94dbc77a158b5920b52fa2d3d3f59cdbb0e12e5
|
File details
Details for the file cnrocr-0.4.0-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 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 |
2d868ade9d6e5d8237c316e3be75e67a43475cf9329f2f5f83441351c21fc6c9
|
|
| MD5 |
bce84f1462711665df66105ee6441f5a
|
|
| BLAKE2b-256 |
30843d72174ae964771c0997c441fe41f0f99ca840fdcac23e8ce93250f70ce9
|
File details
Details for the file cnrocr-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp312-cp312-macosx_10_13_x86_64.whl
- Upload date:
- Size: 1.3 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 |
77ddf606cab6765939e5004868eafdec385403e6a9f022afa1b5d1056a12773c
|
|
| MD5 |
e3af5b4141d3a23a3048821a3433e1d3
|
|
| BLAKE2b-256 |
cb0a5dc143f4bdfcbf4952e4016609807605369516a618a779b9ff9ccb99a3cf
|
File details
Details for the file cnrocr-0.4.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 1.2 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 |
54ab515ada86741bbbe0c44f79259d1094f39b69892a58d1042eaedea1b0d223
|
|
| MD5 |
0375fb2af4a896a15e389a9b4e92ab49
|
|
| BLAKE2b-256 |
2989c575591d1136ad16f496e891b9040fd71f4d2cab4de6dbd0960a88037efd
|
File details
Details for the file cnrocr-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 9.0 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 |
45c22d3b15140a2846b0aea94552eca6515335f9983289e804ef0d8d1d09ae98
|
|
| MD5 |
c9ee92f8fbd5cace8ce1240053a04505
|
|
| BLAKE2b-256 |
05250058c564c71357525a2a2fa5d1a228fbe7d28e3dd4a57895e525e0d97b07
|
File details
Details for the file cnrocr-0.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 8.9 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 |
fdc97937a0727a5e7ddcdad51e58410a86e65ff8c0b2b1f9739b0812430bc6dc
|
|
| MD5 |
53243ad193ba93bcaf3acb5d159eac14
|
|
| BLAKE2b-256 |
8a2c81ad59f9bb4033173701273a08087c45223acaadb5093b52825b8a6c57c2
|
File details
Details for the file cnrocr-0.4.0-cp311-cp311-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp311-cp311-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 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 |
e596c4b4e7410b25a073c68411edd262cc081cf8e1b0bd519fbe148869325312
|
|
| MD5 |
6f1da62435eced873d788a2d62b18d12
|
|
| BLAKE2b-256 |
9338f6016e61521eb64ffcdc83558e3a9d57e1b220a26defaf52214ebf1ccea3
|
File details
Details for the file cnrocr-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 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 |
aa71a325f6a9fbf4e2bc7acc12d4954c876603933f403369e363d5d9344da358
|
|
| MD5 |
4476fd3968b236befbfedad0d66a176a
|
|
| BLAKE2b-256 |
5d1b996d9bc5d35fdf99fdcc4e3ab18cfccc530d26bac7ffea7594a9f43a2ae8
|
File details
Details for the file cnrocr-0.4.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 1.2 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 |
9f784f0197dcf565a89da265b911714ab7e31f3d00c21d5cd813f010f3da1c87
|
|
| MD5 |
b1cfd8cdee028e69932b542f57368f0e
|
|
| BLAKE2b-256 |
3eee5129ef0f3721dee20d0f80bafb9b333003629b4ed06de47bc62b84fb9b88
|
File details
Details for the file cnrocr-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 8.5 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 |
c9234f243a33d5d39c6b82a92c563f3387e9f89c92ef02e1068d66479094bb55
|
|
| MD5 |
5298dedc03e51fa8c331be0c0db22985
|
|
| BLAKE2b-256 |
6d9c20892e5747b1e8c3d40df9ce9811f1ab6147e33633aab367e0d0119b0e26
|
File details
Details for the file cnrocr-0.4.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 8.4 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 |
f9708c7699121866795ecdc38ed590d4ab83b186e907181ab9f84540da52b398
|
|
| MD5 |
7a988c92b20537f56147f7ebfea55af4
|
|
| BLAKE2b-256 |
dedc071cee89a480b15d857fe0c11cc79b4c0554e3e99a93615153f52873378c
|
File details
Details for the file cnrocr-0.4.0-cp310-cp310-macosx_11_0_arm64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp310-cp310-macosx_11_0_arm64.whl
- Upload date:
- Size: 1.2 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 |
5ac6d58b0616e9944197e91a65bdf915c8f88ed1c8c1a05c4097fea04a28aa46
|
|
| MD5 |
ff27d452e761452e507d854ea57f6ae1
|
|
| BLAKE2b-256 |
a422cb75613f251e9aab02851dc75885048d2803f00f1f376532780c083b6ae1
|
File details
Details for the file cnrocr-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl.
File metadata
- Download URL: cnrocr-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl
- Upload date:
- Size: 1.3 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 |
e24bb4cb33cdd69cfed20a82c5a089cefc8f3c465e85b12f5bcb18cf72eaa8c0
|
|
| MD5 |
794e8fbd3d6b97a65a9ba0382da6e113
|
|
| BLAKE2b-256 |
7f0f4b8fd96d88d52517365d208afe4f81a9b823157a9bde7e4554073fd5b8fa
|