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!
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.
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).
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.
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”
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://miai.vn
Youtube: http://bit.ly/miaiyoutube
Bài viết hữu ích, thank cái tâm người viết nhé!
Không có gì bạn. Mời bạn join cộng đồng Mì AI!
#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
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?
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://miai.vn
Youtube: http://bit.ly/miaiyoutube
Bạn ơi hướng dẫn mình cách đặt PATH trên window với ạ. mình cảm ơn
Bạn tham khảo bài này nhé.
https://docs.alfresco.com/4.2/tasks/fot-addpath.html
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
Cảm ơn em ủng hộ! Chúc em thành công nhé!
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
Có chứ em. Data của em ntn? Post lên group xem nhé.
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
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
Uhm. Có gì em cứ post lên group xem. A thử thì nhận dấu đầy đủ.
Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup
anh cho em hỏi :
làm sao để em hiển thị được font chữ tiếng việt trên ảnh aj?
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
load font tiếng việt như thế nào anh
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho tiện nhé!
Anh ơi cho em hỏi:
Đối với các ảnh có đoạn ký tự bắt đầu bằng số ( vd như biển số nhà) thì lại không trích xuất được nội dung ra cmd vậy ạ ?
Thế ah? Mình chưa gặp tình huống đó. Bạn thử chụp và post lên group xem.
Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
Anh ơi cho em hỏi : Em muốn làm trên google colab thì phải làm sao ạ?
Bạn chụp màn hình và up lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé cho tiện trao đổi!
máy báo:
C:\WINDOWS\system32>tesseract -v
‘tesseract’ is not recognized as an internal or external command,
operable program or batch file.
làm ơn hướng dẫn mình cách đặt file PATH cho phù hợp nhé. thanks!
Bạn post lên group để cùng trao đổi cho tiện nhé: Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup
Dạ a cho em xin bài viết: Nhận dạng chữ viết Tiếng Việt với OCR dùng RCNN, có Code Python demo không anh!
Em xin cám ơn anh!
Hiện anh chưa có bài đó. Em có thể lên Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup để hỏi thêm các kỹ thuật cần thiết nhé!
Hi Mì AI,
Cho mình hỏi nhờ chút là với CMND hoặc CCCD của việt Nam thì bằng cách mà bạn hướng dẫn thì tỷ lệ đọc chính xác có cao không nhỉ ? và cho mình hỏi nhờ thêm 1 chút là do đặc thù của CMND bằng giấy nên chất lượng hơi kém dẫn đến việc dãy số CMND hơi bị mờ thì liệu phương pháp này có đọc được không ạ.
Tks Mì AI
Vấn đề CMND là vấn đề khó hơn bài này rất nhiều. Bạn post lên Group trao đổi, chia sẻ: https://www.facebook.com/groups/miaigroup để cùng trao đổi nhé!
khi chạy code phải ấn: “python py_ocr.py -i miai.png -p thresh”
vậy có cách nào chạy: “python py_orc.py” không vậy a
Bạn hardcode các biến kia vào source là okie. Cần thêm bạn post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup nhé!
khi cài em bị lỗi ‘tesseract’ is not recognized as an internal or external command,
operable program or batch file.
Bây giờ phải làm sao để cài đặt được ạ. Thân!
Em post lên Group trao đổi, chia sẻ: https://facebook.com/groups/miaigroup trao đổi cho dễ nha!