หัดทำ OCR ด้วย Tesseract กัน

ใช้ Tesseract x Node.js x Docker ทำ OCR ง่าย ๆ กันครับ

Siwawes Wongcharoen
2 min readMay 7, 2021

Introduction

หาเรื่องใส่หัว, อดที่จะไม่ลงมือทำไม่ได้, สร้าง Energy ให้ตัวเอง

คือที่มาของ Blog นี้ครับ

เรื่อง OCR (Optical character recognition) ก็เป็นอีก 1 เรื่องที่ สนใจมานานแล้ว เคยลองเล่นอะไรมาบ้าง แต่ก็ยังไม่เป็นชิ้นเป็นอันมากนัก แล้วพอดี เห็นโพสของเพื่อนบน Facebook ถึง OCR Libs ตัวนึง ที่มีคนเขียน Node.js ครอบไว้ ไฟ Developer ในตัวก็ลุกโชนอีกครั้ง 🤣

เริ่มจาก ลองหาตัว Libs ที่เป็น Node.js ครอบ เพิ่มเติมดูก่อน ก็เจอ 2 ตัวที่น่าสนใจ คือ naptha/tesseract.js กับ zapolnoch/node-tesseract-ocr ครับ ทั้งคู่ ใช้ Tesseract ทำงานเหมือนกัน ส่วน Feature ต่าง ๆ ก็ทำได้ไม่ต่างกัน จะมีจุดแตกต่างหลัก ๆ ของ 2 ตัวนี้คือ naptha/tesseract.js น่าจะรวมตัว Tesseract libs มาด้วยเลย แต่ zapolnoch/node-tesseract-ocr จะไม่รวม Tesseract libs มา ฉะนั้นในระดับ Implementation จะต่างกันอยู่พอสมควรเลย

สรุปเป็นแบบ ถาม-ตอบ ก็คือ

ถาม: ทำไมต้องใช้ Teseract ตัวอื่นใช้ไม่ได้หรอ
ตอบ: ไม่รู้ครับ รู้จักแค่ตัวนี้ ประกอบกับ เจอตัว Node ที่มีคนเขียนครอบไว้ด้วย
ถาม: แล้วใช้ Docker ทำอะไร
ตอบ: เพราะตัว Node ที่เลือกใช้ มันต้องอาศัย Library ที่ติดตั้งเพิ่มบน OS ด้วย ไม่อยากติดอะไรลงเครื่องตัวเอง เลยทำผ่าน Docker เอา
ถาม: เอาเข้าจริงใช้ Cloud ไม่ง่ายกว่าหรอ
ตอบ: ก็ง่ายกว่า แต่มันมีค่าใช้จ่ายเพิ่มเติม อยากทำอะไรที่จบในตัวมากกว่า

Setup and Run

เลือกใช้ zapolnoch/node-tesseract-ocr เพราะว่า อยากทำอะไรเล่นเพิ่มเติมบน Docker ด้วยครับ

Application Setup

อธิบาย

บรรทัดที่ 3–7: เป็น Config เอาไว้สั่งให้ tesseract ทำงาน

บรรทัดที่ 10: ตัว tesseract.recognize นั้นรองรับรูปภาพได้หลายแบบ ทั้งเป็นแบบ File path, Buffer หรือ URL ก็ได้

บรรทัดที่ 12–13: เป็นผลลัพท์ที่ได้จากการ Process รูป ในรูปแบบ Promise

Docker Setup

ระวัง Dockerfile นี้ไม่สวย โปรดดูอย่างระวัง

อธิบาย

บรรทัดที่ 1: เลือก Base image เป็น node:14-buster-slim (Debian 10)

บรรทัดที่ 3–10: ทั้งหมดที่ คือการพยายามติดตั้ง tesseract-ocr และ tesseract-ocr-tha ย้ำอีกครั้งว่าตรงนี้เขียนไม่สวยอย่างแรง

บรรทัดที่ 15–23: ท่ามาตรฐานของการทำ Node.js application บน Docker

Run

ทำทุกอย่างผ่าน Docker ด้วยคำสั่ง docker build และ docker run ดังนี้ครับ

docker build -t puuga/docker-node-tesseract-ocr .
docker run puuga/docker-node-tesseract-ocr

ถ้าใช้ Code ตามตัวอย่างนี้ ผลที่ได้ ก็ควรจะออกมาแบบนี้ครับ

ซ้าย: ผลลัพท์จาก tesseract, ขวา: ภาพที่ใช้ทำ

--

--

No responses yet