Vietnamese OCR engine optimized for CPU deployments – C++ ONNX Runtime backend
Project description
🇻🇳 VNCV — Vietnamese Computer Vision
OCR engine tối ưu hoá cho tiếng Việt
vncv là thư viện OCR hỗ trợ trích xuất văn bản từ ảnh, với khả năng tự động tải model và chạy inference nhanh chóng.
🖼️ Demo
| 📥 Ảnh gốc | 📤 Kết quả nhận dạng |
|---|---|
['UBND QUẬN TÂY HỒ', 'TRƯỜNG MN-TH SAO MAI', 'TUYÊN TRUYỀN', 'Phổ biến giáo dục pháp luật về phòng, chống dịch bệnh COVID-19', 'tại nhà trường', 'Thực hiện Kế hoạch số 43/KH-PGDĐT về việc thực hiện đợt cao điểm', 'tuyên truyền pháp luật về phòng chống dịch Covid-19 trên dịa bàn Thành phố', 'Ngành GDĐT Tây Hồng', 'Nhằm nâng cao ý thức tự giác cho CB-GV-NV của trường về việc chấp', 'hành các quy định của pháp luật liên quan đến phòng, chống dịch COVID-19;', 'góp phần đẩy lùi nhanh dịch bệnh trên địa bàn thành phố, thực hiện đẩy mạnh', 'đợt cao điểm tuyên truyền pháp luật về phòng, chống dịch COVID-19 theo', 'hướng lựa chọn nội dung trọng tâm, trọng điểm, ngắn gọn, dễ hiểu, đa dạng hóa', 'các hình thức liên quan đến phòng, chống dịch, góp phần hình thành thói quen', 'thực hiện các biện pháp phòng, chống dịch trong lối sống.', 'Các quy định của pháp luật có liên quan đến phòng, chống dịch COVID-19, các', 'văn bản chỉ đạo của Thành phố về phòng, chống dịch, tình hình dịch bệnh tại', 'xã thành phố, các quy định người dân cân tuân thủ khi chính quyền áp dụng biện thuận', 'xã pháp phòng, chống dịch tại địa bàn, đặc biệt là thời gian áp dụng các biện pháp', 'theo Chỉ thị 15/CT-TTg, Chỉ thị 16/CT-TTg của Thủ tướng Chính phủ hoặc các', 'biện pháp cao hơn.', 'Xử phạt các hành vi, vi phạm pháp luật có liên quan đến phòng, chống', 'dịch, quy định về: cách ly y tế, chữa bệnh, quy định tiêm chủng vaccine của', 'thành phố... đã được triển khai mạnh trong thời gian tới.', 'Thực hiện tuyên truyền trên phân mêm ứng dụng internet: Zalo, website..', 'Trường MN-TH Sao Mai yêu cầu toàn bộ CB-GV-NV-HS thực hiện đợt cao', 'điểm tuyên truyền tại nhà trường, phối hợp và triển khai thực hiện đảm bảo đúng', 'tiến độ và hiệu quả./.', 'TRƯỞNG BANH', 'Nguyễn/Thị Trà Giang']
1. Cài đặt
Cài đặt package thông qua pip:
pip install vncv_cpp
🚀 Điểm mới: vncv_cpp phát hành dưới dạng binary wheel đa nền tảng (Linux/macOS/Windows) với backend C++ ONNX Runtime. Bạn không còn cần cài đặt PyTorch (nặng ~2GB) nữa.
Trong quá trình build hoặc cài đặt lần đầu, các mô hình OCR cần thiết sẽ được tự động tải về và cấu hình sẵn.
2. Sử dụng cơ bản
Trích xuất văn bản từ ảnh
from vncv.ocr import extract_text
# Trích xuất văn bản từ ảnh tiếng Việt (mặc định)
results = extract_text("test_image.jpg", lang="vi")
print("OCR Results:", results)
👉 Thư viện sẽ tự động:
- Tự động tải weights từ GitHub Releases nếu chưa có (không cần copy thủ công)
- Load model OCR bằng ONNX Runtime (tối ưu hóa tốc độ x2-x5 so với PyTorch trên CPU)
- Phát hiện vùng chứa văn bản (text detection)
- Nhận dạng nội dung (text recognition)
3. Sử dụng CLI (Command Line Interface)
Bạn có thể chạy trực tiếp từ terminal mà không cần viết code:
vncv test_image.jpg --lang vi
3.1. Smoke test SDK Python qua C++ backend
Sau khi cài package, bạn có thể kiểm tra nhanh backend C++ (pybind) đã load đúng hay chưa:
python -c "from vncv import extract_text; print('✅ SDK import OK')"
Nếu gặp lỗi liên quan tới OpenCV/CMake khi build từ source (ví dụ không tìm thấy OpenCVConfig.cmake hoặc thiếu libGL.so.1), cần cài thêm thư viện hệ thống:
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install -y libgl1 libopencv-dev
3.2. CI/CD build binary đa môi trường & publish PyPI
Dự án đã thêm workflow GitHub Actions để:
- Build wheel cho Linux / macOS / Windows qua
cibuildwheel(Linux dùng nhiều kiến trúc với manylinux Docker image). - Upload artifact wheel cho từng OS.
- Publish lên PyPI khi push tag
v*. - Chỉ publish
.whlbinary (không upload source distribution).
Tên package trên PyPI: vncv_cpp.
4. Các tuỳ chọn nâng cao
4.1. Lưu ảnh có bounding box
vncv test_image.jpg --save-annotated
👉 Kết quả: lưu ảnh với các khung (bounding boxes) bao quanh vùng text.
4.2. Xuất kết quả dạng JSON
vncv test_image.jpg --json
Hoặc sử dụng trong khối lệnh Python:
from vncv.ocr import extract_text
results = extract_text("test_image.jpg", lang="vi", return_dict=True)
Ví dụ output JSON:
[
{
"text": "Xin chao Viet Nam",
"confidence": 0.98,
"box": [[10, 20], [100, 20], [100, 50], [10, 50]]
}
]
5. Tính năng nổi bật
- ⚡ Tốc độ vượt trội: Sử dụng ONNX Runtime giúp giảm latency, xử lý ảnh nhanh hơn đáng kể.
- 📦 Siêu nhẹ: Gỡ bỏ phụ thuộc vào PyTorch, giảm kích thước cài đặt từ GB xuống MB.
- ✅ Tự động tải model, không cần cấu hình phức tạp.
- ✅ Hỗ trợ đa ngôn ngữ (Tiếng Việt
vivà Tiếng Anhen). - ✅ Hỗ trợ GPU/CPU: Tự động nhận diện và tối ưu cho phần cứng hiện có.
- ✅ Trả về JSON chi tiết bao gồm: văn bản, bounding box, và confidence.
6. Gợi ý sử dụng
vncv là lựa chọn số 1 cho:
- Server/Lambda/Edge devices: Nơi tài nguyên (RAM/Disk) hạn chế và không có GPU.
- Hệ thống Real-time: Cần tốc độ phản hồi nhanh.
- OCR tài liệu tiếng Việt: Hóa đơn, CMND/CCCD, văn bản hành chính.
- Tích hợp API: Dễ dàng build các dịch vụ OCR Microservices gọn nhẹ.
7. Giấy phép & Bản quyền
© 2026 DevHub Solutions. All rights reserved.
Dự án được phát hành dưới giấy phép mã nguồn mở cho mục đích học tập và nghiên cứu. Chân thành cảm ơn tác giả dự án VietOCR đã cung cấp engine cốt lõi.
| Quy định | |
|---|---|
| ✅ | Sử dụng, học hỏi, chỉnh sửa mã nguồn |
| ✅ | Tích hợp vào dự án cá nhân hoặc thương mại |
| ✅ | Chia sẻ lại với điều kiện ghi nguồn |
| ❌ | Đổi tên thương hiệu hoặc nhận là sản phẩm của mình |
| ❌ | Xây dựng SaaS/dịch vụ cạnh tranh mà không có phép |
| ❌ | Xóa thông báo bản quyền này |
DevHub Solutions bảo lưu quyền duy trì các phiên bản private/thương mại và có thể thay đổi điều khoản cấp phép trong các phiên bản tương lai. Để sử dụng thương mại hoặc mở rộng quyền sử dụng, vui lòng liên hệ DevHub Solutions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
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 vncv_cpp-0.2.0.tar.gz.
File metadata
- Download URL: vncv_cpp-0.2.0.tar.gz
- Upload date:
- Size: 3.3 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a20c545555aa32f4dae987acb75ff449c84f7cac7f44d633bad53dd804c7269c
|
|
| MD5 |
9a7a73d7b8366b9a2ca327d6ea87865a
|
|
| BLAKE2b-256 |
15d442c2cbca43db12dae2496ec6a74fdc0def458711a0bba3dd108fc67ba746
|
File details
Details for the file vncv_cpp-0.2.0-cp312-cp312-win_amd64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp312-cp312-win_amd64.whl
- Upload date:
- Size: 33.7 MB
- Tags: CPython 3.12, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8959385b8de912188c1a3d5cc877a3145c77256fcfc0fca9dfc2d4c44007a737
|
|
| MD5 |
ed1b28063073e4919bfd824c682a0890
|
|
| BLAKE2b-256 |
15c37fecc18a311af72fcdd07449ceb0bb427bb58dc59143c6640bbb4bf9624d
|
File details
Details for the file vncv_cpp-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 39.5 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b8f669be59ba0cc106a0235a40dbdcac7fb5398f87d868139694feb148ad1d17
|
|
| MD5 |
7d742578e8ce1cd6931456dccaff6a76
|
|
| BLAKE2b-256 |
811113f613010636422e32512a923dff9955fb40540d4e44e91573b9f30cb148
|
File details
Details for the file vncv_cpp-0.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 28.9 MB
- Tags: CPython 3.12, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
945f8bbaeeec0de6cc8e084b07e793b6c0537639a5e8a4e540a6d41547bdc8d3
|
|
| MD5 |
ab2d5be6ddd44c4452584b0b920c1960
|
|
| BLAKE2b-256 |
1038d256a00304a9c13fec3ba73691b124388aa91010f42c8c516f8991509c37
|
File details
Details for the file vncv_cpp-0.2.0-cp312-cp312-macosx_14_0_arm64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp312-cp312-macosx_14_0_arm64.whl
- Upload date:
- Size: 48.4 MB
- Tags: CPython 3.12, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47f9f4fac2fc4908719ad080fec27777b63fa041708de1a2e7d5db896cca736e
|
|
| MD5 |
d0f1a0bd93545eed2a9ae6212d7b5239
|
|
| BLAKE2b-256 |
f0f5c169110ee73d6b1b445eaf4c94a4633baadb91a6a90f3916f7f4475a06b6
|
File details
Details for the file vncv_cpp-0.2.0-cp311-cp311-win_amd64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp311-cp311-win_amd64.whl
- Upload date:
- Size: 33.7 MB
- Tags: CPython 3.11, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2845e44f20be8bd59b11b6ba8426851f6632295175157ff9e9d945c83a2664a8
|
|
| MD5 |
5f7a2a292e9fff6965269fc8785b1860
|
|
| BLAKE2b-256 |
cdccb578addf6d876ef3d45f7b5e4dee1452df570ec9a1891345b273e08a32d3
|
File details
Details for the file vncv_cpp-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 39.5 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5077e77843af6f43b9585474dbd68f91c6ed9aebe55e539083dd2f3b4d9d6842
|
|
| MD5 |
648e3e7b7b6283b022bab8e3558ea4a7
|
|
| BLAKE2b-256 |
8179c360c15e35505a53009bc9c4b473b377c377760f5c13d81b20ba4b8bb6b2
|
File details
Details for the file vncv_cpp-0.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 28.9 MB
- Tags: CPython 3.11, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
412c6693d6cf6200e37b7a44850cf73150bb9afda720b8f0f54c6a225ab93087
|
|
| MD5 |
a1b8b581285c73eca8a99023b20e39d8
|
|
| BLAKE2b-256 |
a111f2747b07b9f74ae2bde7ed07002c156bc87d97fff25aedff6f5d99c77be9
|
File details
Details for the file vncv_cpp-0.2.0-cp311-cp311-macosx_14_0_arm64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp311-cp311-macosx_14_0_arm64.whl
- Upload date:
- Size: 48.4 MB
- Tags: CPython 3.11, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b0155a06253770561f75df2d8f82c399cc489a1a314b901614a1d30d313e9c9
|
|
| MD5 |
ecb6b9237e56661e4e6e17dcf417a67d
|
|
| BLAKE2b-256 |
343604c982937c38750ab460fd9d31be852d4df1f2321ebe69c44eea057fec31
|
File details
Details for the file vncv_cpp-0.2.0-cp310-cp310-win_amd64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp310-cp310-win_amd64.whl
- Upload date:
- Size: 33.7 MB
- Tags: CPython 3.10, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7c88e035c606256ed4fd22c163de92d97b9af05bda4fffe615ba03e2a421d75
|
|
| MD5 |
3e8681c23bb96ace2611d053b4c0d1ec
|
|
| BLAKE2b-256 |
e905f8addc59a042ad4d859ed87d915d187d14554a7d78ed66b1743c22183075
|
File details
Details for the file vncv_cpp-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
- Upload date:
- Size: 39.5 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ x86-64, manylinux: glibc 2.28+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a2fdc15579aad79979cca0e62b83019431a22a2083a00e611162d9f5b8296d8e
|
|
| MD5 |
e36624746918ab83922396460f4e99c6
|
|
| BLAKE2b-256 |
258fcbf3a45c243f7b7f56e7a178c4de002bea0850d5ea3b305f2b2a52bfbccc
|
File details
Details for the file vncv_cpp-0.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl
- Upload date:
- Size: 28.9 MB
- Tags: CPython 3.10, manylinux: glibc 2.27+ ARM64, manylinux: glibc 2.28+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
be6c4d77dd84570a74d23a5fcea049d72dc4902efa8c8ff1c22ff580e8eff98b
|
|
| MD5 |
05c0d266d2e9f4e88d8908d923bf03ff
|
|
| BLAKE2b-256 |
9a93b3486b80309354df1e0ce73b9d027ca41e6e5176ec82874a1d913cadb5b2
|
File details
Details for the file vncv_cpp-0.2.0-cp310-cp310-macosx_14_0_arm64.whl.
File metadata
- Download URL: vncv_cpp-0.2.0-cp310-cp310-macosx_14_0_arm64.whl
- Upload date:
- Size: 48.4 MB
- Tags: CPython 3.10, macOS 14.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1e3d09e1a2645fefc86ee71d439db85caeeef36326ba94eafa672896a933c033
|
|
| MD5 |
6e98d448274f695d4ae2f6706b9edbfa
|
|
| BLAKE2b-256 |
549821094c1444fb801636c9099115be6963745034548b5fab6a2e3f372e64a3
|