Viet OCR C++ nhận diện ký tự tiếng Việt bằng C++

Thư viện VietOCR được viết bằng ngôn ngữ Python với khá nhiều ưu điểm. Tuy nhiên do nhu cầu sử dụng của công ty là C++ nên mình đã port sang ngôn ngữ C++ để tích hợp vào sản phẩm. Bài viết này chia sẻ source code, giải thích cách thực hiện và hướng dẫn cách build VietOCR-cpp trên Windows 10.

Tác giả cung cấp 2 model là Transformer Seq2Seq, tuy nhiên VietOCR-cpp chỉ port Seq2Seq vì phù hợp với nhu cầu sử dụng.

Chuẩn bị

  • Visual Studio 2022: bắt buộc phải build bằng VS 2022 vì code viết lại bằng C++ 17, phiên bản thấp hơn sẽ lỗi
  • Download Libtorch c++

Các bước thực hiện

Bước 1: clone source code VietOCR-cpp

Clone source code tại link: https://github.com/thigiacmaytinh/vietocr-cpp

Trong source code đã commit sẵn các thư viện cần thiết như OpenCV 4.8.0, Yaml-cpp,… và libtorch cho các bạn.

Bước 2: download lib torch cpp

Vào trang chủ của Pytorch download libtorch build sẵn cho C++ Windows

Chọn như bên dưới để download và chọn bản Release

Download phiên bản cũ hơn là libtorch 2.2.1 tại link: https://download.pytorch.org/libtorch/cpu/libtorch-win-shared-with-deps-2.2.1%2Bcpu.zip

Sau đó copy các file dll sau vào folder bin, đây là các file bắt buộc phải có:

  • asmjit.dll
  • c10.dll
  • fbgemm.dll
  • onnxruntime.dll
  • torch.dll
  • torch_cpu.dll
  • uv.dll

Bước 3: build code VietOCR-cpp

Khi build VietOcrCpp_CV480.sln thì Visual Studio tự động download Microsoft.ML.OnnxRuntime.1.17.1 vào folder packages

Các bạn build mode Debug hay Release đều được, và chỉ có duy nhất 1 platform là x64.

Một điều khó khăn khi viết bằng ngôn ngữ C++ đó là việc setup để xử lý unicode khá phức tạp. Trong source code VietOCR-cpp đã làm sẵn điều đó mà chỉ cần sử dụng std:wstring, bao gồm:

  • In unicode ra console
  • Setup project sử dụng Multi-Byte Charater Set

Kết quả

Test với ảnh đã crop và in kết quả lên console

Chúc các bạn thành công