Hướng dẫn training VietOCR dùng để nhận diện tiếng Việt

VietOCR là thư viện nhận diện ký tự Việt Nam khá tốt. Tuy nhiên đối với một số bài toán đặc thù các bạn cần training lại để chính xác hơn.

Để có thể so sánh độ chính xác của model gốc và model retrain bạn lưu kết quả nhận diện vào file text, sau đó so sánh với file kết quả sau khi training. Có thể thấy kết quả sau khi training lại có kết quả chính xác hơn (đã ẩn bớt 1 số dòng).

Bước 1: cài đặt các phần mềm cần thiết

Để training VietOCR các bạn cần có GPU NVIDIA, bên dưới là thông tin về cấu hình phần cứng và phần mềm cần thiết dùng để training.

  • Python 3.8: tối thiểu là 3.8, không được thấp hơn
  • CUDA 11.8cuDNN 8.9.5.30
  • Windows 10 x64
  • CPU: Intel i5 4590 3.3Ghz
  • RAM: 16GB
  • GPU: NVIDIA RTX 3060 12GB VRAM
  • Visual Studio Code: để chạy Jupyter Notebook cho tiện
  • VietOCR-cpp: script training nằm trong folder tools/training

Cài đặt Pytorch CUDA

pip install torch==2.2.2 torchvision==0.17.2 torchaudio==2.2.2 --index-url https://download.pytorch.org/whl/cu118

Bước 2: crop vùng ảnh chứa text

Các bạn có thể dùng Paddle OCR để extract text. Và để training hiệu quả các bạn Warp perspective ảnh trước khi save.

Ảnh cắt ra từ CCCD

Warp perspective cho thẳng thớm

Do bộ data CCCD nhạy cảm nên các bạn tự chuẩn bị bộ data.

Bước 3: đánh nhãn hình ảnh

Bạn sử dụng tool VietOCR labeling để đánh nhãn.

Sau khi đánh nhãn xong trong folder chứa hình ảnh sẽ có file label.txt chứa annotation của bộ ảnh.

Bước 4: training

Chạy Visual Studio Code và open folder vietocr-cpp/tools/training trong

Sau đó các bạn cần sửa tham số training trong file train.ipynb như sau:

Trong đó:

  • name: tên của bộ dataset, có thể đặt tùy ý
  • data_root: folder chứa ảnh
  • train_annotation: file txt đã đánh nhãn
  • valid_annotation: file txt đã đánh nhãn, các bạn nên tách file label thành 2 file train & valid riêng biệt

Ấn start để bắt đầu training, chương trình sẽ training trong khoảng 4 giờ, kết quả là file weights/seq2seqocr.pth

Để inference các bạn dùng đoạn code Python sau:

Bước 5: Convert sang ONNX (optional)

Bước này dùng để convert file pth sang file onnx để VietOCR-cpp có thể chạy được. Nếu các bạn chỉ sử dụng Python thì bỏ qua bước này.

  1. Copy file seq2seqocr.pth vào folder tools/convert2onnx/weight.
  2. Vào folder tools/convert2onnx/ sửa file Converter.py
  3. Thay đường dẫn tương ứng của weight_path, mặc định là ./weight/seq2seqocr.pth
  4. Chạy file Converter.py

Kết quả được file cnn.onnx, decoder.onnxencoder.onnx nằm chung folder weight.

Kết quả ứng dụng: https://viscomsolution.com/phan-mem-doc-thong-tin-can-cuoc-cong-dan/