[OCR] Nhận dạng văn bản tiếng Việt với Tesseract OCR

Xin chào các bạn, cảm ơn các bạn đã quan tâm và quay lại Blog Mì AI. Hôm nay để tiếp nối chuỗi bài về Computer Vision mình xin guide cho các bạn một bài đơn giản , theo đúng phong cách Mì AI về vấn đề Nhận dạng Tiếng Việt, nhận dạng văn bản (Optical Charactor Recognition) nhé.

Về cách nhận dạng văn bản thì có nhiều cách tiếp cận lắm luôn, một số cách mà mình biết như sau:

  • Sử dụng Tesseract OCR
  • Train model bằng CNN + SVM
  • Train model CNN – RNN – CTC….

Mỗi cái lại có cái hay, cái dở riêng và yêu cầu khả năng lập trình khác nhau. Hôm nay mình sẽ chia sẻ với các bạn cách dùng Tesseract OCR cho đơn giản nhé. Hiện Tess đã có đến phiên bản 4.0 nên dùng khá ổn cho các nhu cầu thông thường (chữ viết tay là chịu nhé).

Thôi, bắt đầu ngay cho nóng nhé!

Như thường lệ, mình xin trình bày trước cấu trúc bài viết để các bạn có cái nhìn tổng quan. Bài viết sẽ gồm các phần

  • Phần 1. Chuẩn bị môi trường, cài đặt thư viện Tesseract OCR
  • Phần 2. Cấu hình và thêm ngôn ngữ tiếng Việt
  • Phần 3. Viết code nhận dạng và tận hưởng

Phần 1. Chuẩn bị môi trường

Như thường lệ các bạn hãy tạo 1 thử mục MiAI_Tess_OCR lưu vào đâu đó trên ổ cứng nhé. Bây giờ các bạn cài đặt Tesseract OCR theo cách sau, tùy vào các bạn dùng OS gì (mình không recommend window nhé, dù vẫn chạy).

Với các bạn dùng MacOS: Chúng ta sẽ cài đặt bằng công cụ Homebrew nhé. Các bạn gõ lệnh sau:

brew install tesseract

Sau khi gõ xong các bạn đợi chạy lệnh hết là thành công!

nhận dạng tiếng việt
Nguồn: pyimagesearch

Với các bạn dùng Linux: Các bạn sử dụng apt-get như sau:

sudo apt-get install tesseract-ocr

Sau đó cũng ngồi đợi cho nó chạy hết lệnh là okie.

nhận dạng tiếng việt
Nguồn: pyimagesearch

Với các bạn sử dụng Window: Thì cái này mình không cài thử bao giờ nên các bạn theo guide của Tesseract. Tóm lại là các bạn tải file cài đặt tại đây https://github.com/UB-Mannheim/tesseract/wiki (nhớ chọn bản 32bit và 64 bit phù hợp với window của bạn).

nhận dạng tiếng việt

Okie rồi, sau khi cài đặt xong, các bạn có thể kiểm tra công cuộc cài đặt xem đã thành công chưa bằng cách gõ lệnh:

tesseract -v

Nếu như màn hình hiện ra thông tin phiên bản như ảnh dưới thì là bạn đã cài thành công.

nhận dạng tiếng việt

Còn nếu như báo lỗi dạng “command not found” hoặc “is not recognize” thì các bạn restart lại máy hoặc đặt PATH cho phù hợp nhé (cái này tùy OS). Bạn nào cần thì comment mình sẽ guide thêm.

Phần 2. Cấu hình và cài đặt tiếng Việt.

Okie rồi, vậy là các bạn đã cài đặt thư viện Tess OCR. Tuy nhiên mặc định của nó không có ngôn ngữ tiếng việt và chúng ta phải tiến hành cài đặt thêm.

Các bạn truy cập vào link https://github.com/tesseract-ocr/tessdata chọn ngôn ngữ tiếng việt, chính là file vie.traineddata tải về máy và copy vào thư mục ngôn ngữ của Tess OCR.

Chắc các bạn sẽ hỏi thư mục ngôn ngữ ở đâu? Cái này nó tùy vào bạn cài đặt ở thư mục nào, hệ điều hình nào. Thư mục ngôn ngữ có tên tessdata nằm trong thư mục cài đặt Tesserac OCR. Nói chung là kiểu gì cũng có cái thư mục tên là tessdata trong máy, các bạn hãy tìm nó và copy file vie.traineddata vào thư mục tessdata đó.

Như máy mình là MacOS nên thư mục tessdata nó nằm ở:

root⁩ ▸ ⁨usr⁩ ▸ ⁨local⁩ ▸ ⁨Cellar⁩ ▸ ⁨tesseract⁩ ▸ ⁨4.0.0_1⁩ ▸ ⁨share⁩

Phần 3. Viết code và tận hưởng thành quả nhận dạng

Xong phần cấu hình, bây giờ viết code bằng Python để nhận dạng nhé.

Để code chạy được, các bạn hãy tiến hành cài đặt các thư viện sau:

pip install pillow
pip install pytesseract
pip install opencv-python

Bây giờ các bạn vào thư mục MiAI_Tess_Ocr và tải source trên github của mình (https://github.com/thangnch/py_ocr) về hoặc gõ lệnh sau:

git clone https://github.com/thangnch/py_ocr

Bây giờ trong thư mục MiAI_Tess_Ocr sẽ xuất hiện thêm thư mục py_ocr. File py_ocr.py nó làm gi thì mình đã comment từng dòng trong code rồi nhé. Còn bây giờ, tiến hành chuyển vào trong thư mục đó bằng lệnh cd py_ocr và gõ tiếp lệnh nhận dạng:

python py_ocr.py -i miai.png -p thresh

Nếu mọi thứ ngon lành, các bạn sẽ thấy kết quả nhận dạng tiếng việt mỹ mãn như sau. Nếu để ý các bạn sẽ thấy, file ảnh có nhiễu nhưng chúng ta vẫn nhận dạng vô tư nhé ;). Đó là vì mình có áp dụng biện pháp tiền xử lý ở đoạn ” -p thresh”

nhận dạng tiếng việt

OK! Như vậy các bạn đã bước đầu dấn thân vào món OCR với nhận dạng tiếng việt. Món này còn nhiều thứ rất hay, mình sẽ tiếp tục chia sẻ trong những bài sau nhé.

Bài sau mình sẽ viết về cách train Tesseract OCR để nhận dạng các font chữ đặc thù. Ví dụ bạn có một văn bản với Font rất dị dạng thì Tess OCR sẽ không nhận được đâu, bạn phải train nó nhé!

Hẹn gặp lại!

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

mm
Nguyễn Chiến Thắng

Một người đam mê những điều mới mẻ và công nghệ hiện đại. Uớc mơ cháy bỏng dùng AI, ML để làm cho cuộc sống tốt đẹp hơn! Liên hệ: thangnch@gmail.com hoặc facebook.com/thangnch

Related Post

16 Replies to “[OCR] Nhận dạng văn bản tiếng Việt với Tesseract OCR”

  1. Sao mình đọc trên wiki là nhận dạng được cả chữ viết tay mà. Thế có thư viện nào nhận dạng được chữ viết tay không bạn?

    1. Ah. Theo lý thuyết là nhận được cả chữ viết tay nhưng thực tế sử dụng thì chất lượng nhận dạng rất tệ bạn ah. Đặc biệt là Tiếng Việt.
      Về chữ viết tay hiện nay thì phải train model riêng bạn ah, sử dụng RNN, CNN và CTC loss. Mình sẽ có một bài riêng về vấn đề này, mong bạn ủng hộ nhé.

      Bạn có thể join cùng #MìAI
      Fanpage: http://facebook.com/miaiblog
      Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
      Website: https://ainoodle.vn
      Youtube: http://bit.ly/miaiyoutube

  2. em chỉ là dân backend. nhưng rất có hứng thú đọc cái bài anh viết. :))). như là cách hiểu được hơn ML. Cảm ơn anh

  3. hình như tesseract cũng không hỗ trợ bỏ dấu hả ảnh. Em thấy đoạn văn bản nó xuất ra không có dấu

      1. em dùng vie.traineddata á anh, em chỉ test 1 đoạn văn bản tiếng việt thôi, nhưng output nó xuất ra kết quả dấu không đúng lắm

  4. anh cho em hỏi :
    làm sao để em hiển thị được font chữ tiếng việt trên ảnh aj?

    1. Em load font tiếng Việt trước khi putText là okie.
      # Use simsum.ttc to write Chinese.
      fontpath = “./simsun.ttc”
      font = ImageFont.truetype(fontpath, 32)
      img_pil = Image.fromarray(img)
      draw = ImageDraw.Draw(img_pil)
      draw.text((50, 100), “国庆节/中秋节 快乐!”, font = font, fill = (b, g, r, a))
      img = np.array(img_pil)

      Cần trao đổi thêm em post bài lên group cho tiện trao đổi nhé. Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup

Leave a Reply

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