หัดทำ OCR ด้วย Tesseract กัน
ใช้ Tesseract x Node.js x Docker ทำ OCR ง่าย ๆ กันครับ
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 ตามตัวอย่างนี้ ผลที่ได้ ก็ควรจะออกมาแบบนี้ครับ