[OCR] “Đào tạo” Tesseract OCR để nhận dạng Tiếng Việt với các font chữ khù khoằm

Helo xin chào cả nhà, chúng ta lại gặp nhau và cùng nhau ăn Mì AI nào với bài về đào tạo Tesseract OCR để nhận dạng Tiếng Việt . Hôm trước mình đã có bài guide các bạn cách nhận dạng Tiếng Việt bằng Tesseract OCR. Việc này có thể áp dụng để nhận dạng các tài liệu, bản scan bằng Tiếng Việt nhằm tiết kiệm thời gian nhập liệu, gõ văn bản và tự động hóa nhiều thứ.

Tuy nhiên một số bạn có comment nói là đang làm bài toán nhận diện Tiếng Việt nhưng font chữ hơi đặc biệt nên Tesseract OCR không nhận ra được. Ví dụ như ảnh dưới:

Tesseract OCR
Các font chữ khù khoằm 😀

Do đó, hôm nay mình sẽ cùng các bạn tìm hiểu cách train Tesseract OCR để nhận được các font chữ của riêng bạn nhé. Chúng ta sẽ cùng đi qua các phần sau:

  • Phần 1. Chuẩn bị nguyên vật liệu
  • Phần 2. Tạo dữ liệu train và train bằng công cụ jTessboxEditor
  • Phần 3. Tận hưởng thành quả nhận dạng

Bắt đầu luôn cho nóng nhé!

Phần 1. Chuẩn bị nguyên vật liệu

Nguyên vật liệu cần có gồm:

  • Đầu tiên các bạn tạo thư mục MiAI_Tess_Train để lưu các thứ của bài này nhé.
  • Thứ hai, bạn cần file font mà bạn dự kiến sử dụng để đào tạo cho Tesseract OCR (thường có đuôi là ttf – true font type). Mình ví dụ file font mình dùng ở đây là file Palatino đi. Các font này tùy vào các bạn sử dụng font gì thì search trên google tải về nhiều vô kể. Các bạn tạo thư mục fonts trong thư mục MiAI_Tess_Train và lưu font chữ (file ttf vào đó nhé)
Tesseract OCR
  • Thứ hai, các bạn hãy chuẩn bị 1 file văn bản, văn bản gì cũng được, như mình là một file lấy từ các báo online về cho nó phong phú. Ở đây mình ví dụ là file corpus.txt, được lưu trong thư mục MiAI_Tess_Train nhé. File này nên lớn lớn 1 chút, tầm 600KB-1MB để cho nó học được nhiều ký tự khác nhau.
  • Thứ ba, các bạn cần chuẩn bị công cụ để train Tesseract có tên là jTessboxEditor. Các bạn tải tại đây: https://sourceforge.net/projects/vietocr/files/jTessBoxEditor/jTessBoxEditor-2.2.1.zip/download. Sau khi tải xong các bạn lưu vào thư mục MiAI_Tess_Train va giải nén ra, sẽ có thư mục jTessBoxEditor nhé.
  • Thứ tư, nếu máy bạn chưa có Java Runtime thì cũng cài luôn nhé. Các tải tại đây theo hướng dẫn và cài đặt nhé: https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

Rồi, công cuộc chuẩn bị đã xong, đi tiếp nào!

Phần 2. Tiến hành train Tesseract OCR

Các bạn thực hiện chuẩn từng bước sau nhé:

Bước 1. Khởi động jTessBox.

Bây giờ các bạn mở Command Promt và chuyển vào thư mục jTessBoxEdior vừa giải nén ra (bằng lệnh cd). Sau đó gõ lệnh

java -Xms128m -Xmx1024m -jar jTessBoxEditor.jar

Lệnh này để mở cửa sổ giao diện đồ họa jTessBox train cho nhanh gọn, phong cách Mì AI mà 😀

Các bạn đợi một chút để nó load vì là Java nên hơi chậm chút.

Tesseract OCR

Bước 2. Load font chữ và tạo dữ liệu train

Các bạn chọn vào Tab TIFF/Box Generator và màn hình bên dưới sẽ hiện ra:

Các bạn chọn Input, sau đó Browse đến file textdata.txt đã tạo ở bước trên để nội dung file text hiện ra trên màn hình:

Tesseract OCR

Tiếp theo, các bạn nhấn vào nút “3 chấm” […] để chọn đường dẫn lưu file kết quả. Các bạn hãy tạo một thư mục vie, trong thư mục jTessBoxEditor/samples và chọn thư mục vie này để lưu kết quả nhé.

Tiếp theo, các bạn chọn ô Font chữ, và chọn Font chữ mình cần train, chỉnh kích thước 12pt (đây được khuyến cáo là kích thước dễ train nhất).

Tesseract OCR

Rồi, sau đó các bạn chọn Tracking là 0.05 và Leading là 14 nhé, mình tách các chữ cái ra 1 chút để Tesseract dễ train hơn. Các tham số còn lại để nguyên không chỉnh sửa gì.

Bây giờ, nhấn nút Generate! Và một cửa sổ hiện ra như bên dưới là thành công rồi nhé.

Tesseract OCR

Bước 3. Train nào!

Các bạn chuyển sang tab Trainer, và màn hình hiện ra như bên dưới:

Các bạn thực hiện Chọn Training Data trỏ vào thư mục vie ở trên. Language để là vie.

Chọn tiếp là Train with Existing Box và nhấn Run!

Xong bây giờ ngồi đợi, nó sẽ qua nhiều bước bao giờ hiện chữ Training Completed thì là thành công nhé. Cũng hơi lâu lâu đó 😀

Tesseract OCR

Phần 3. Tận hưởng thành quả

Bây giờ các bạn hãy vào thư mục vie đã nói ở trên sẽ thấy 1 file vie.traineddata, các bạn hãy copy file này vào thư mục tessdata của Tesseract OCR (copy như vào các bạn thực hiện theo Phần 2 của bài này nhé https://miai.vn/2019/08/22/ocr-nhan-dang-van-ban-tieng-viet-voi-tesseract-ocr/). Chú ý: Nếu có hỏi ghi đè file vie.traineddata có sẵn trong folder ấy thì các bạn chọn Yes nhé!

Cuối cùng, các bạn hãy tận hưởng thành quả nhận dạng như Phần 3.Viết code và tận hưởng thành quả nhận dạng tại bài trước nhé (https://miai.vn/2019/08/22/ocr-nhan-dang-van-ban-tieng-viet-voi-tesseract-ocr/)

Done! Như vậy là mình đã hướng dẫn các bạn cách train Tesseract OCR để xử đẹp các font chữ đặc thù theo từng bài toán nhé. Mình xin kết thúc series về Tesseract OCR tại đây, sắp tới Mì AI sẽ có nhiều bài về OCR với các công nghệ xịn hơn tý như CTC-OCR, CNN + KVM…

Nếu có khó khăn vướng mắc trong quá trình cài đặt, các bạn comment tại group của Mì AI để cùng trao đổi nhé (link bên dưới).
Hẹn gặp lại các bạn!

#MìAI

Fanpage: http://facebook.com/miaiblog
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
Website: https://miai.vn
Youtube: http://bit.ly/miaiyoutube

Related Post

14 Replies to “[OCR] “Đào tạo” Tesseract OCR để nhận dạng Tiếng Việt với các font chữ khù khoằm”

  1. bài viết bổ ích ạ,em cũng đã nghĩ tới nhưng chưa thì vì thấy dùng trực tiếp đã khá tốt rồi,cảm ơn anh 😀

  2. Em có training trên Tesseract 4.0 sử dụng lstm bằng command line nhưng xong vẫn chưa tối ưu và chưa hoàn toàn nắm được hết nó. :(. Chưa hiểu về cách nó OCR, rồi cách lấy Confidence của nó….. a có câu trả lời thì thông não giúp e nhé 😀

  3. Anh ơi cho em hỏi anh train trong bao lâu ạ, em train trong 10h mà vẫn không xong (không hiện gì lên luôn).

  4. Chào anh,
    Em theo dõi rất kỹ từng bài của anh, đặc biệt là 2 bài về nhận diện tiếng Việt qua OCR. Em có thể hỏi anh một chút không ạ, hiện tại em đang bí về ý tưởng xử lý.
    Em đang phải đọc thông tin từ thẻ ngân hàng: Số thẻ, hạn dùng, họ tên. Nếu mới đọc qua thì bài toán này giống hệt bài toán đọc thông tin ở CMND, nhưng ở đây có 1 cái rất là khó đó là màu phông nền của thẻ giống hệt màu chữ (kiểu dập nổi) nên em không có cách nào để bóc tách phông và chữ.
    Em đã tính đến phương án là sẽ tạo gần 40 classs tương ứng với (A-Z; 0 – 9) rồi chạy detection nhưng chưa thực hiện vì thấy nó nhiều class quá.
    Anh có thể tư vấn cho em hướng xử lý với được không, bế tắc quá!
    Em cảm ơn anh!

  5. Với Tesseratc v5.0 thì có thể dùng jTessboxEditor để train không vậy anh Thắng. Em cảm ơn ạ.

  6. Anh cho em hỏi em khi dùng jTessboxEditor để train nhưng không load được font mình cần dùng thì phải làm sao ạ?
    Em cảm ơn!

Leave a Reply

Your email address will not be published. Required fields are marked *