Tesseract คือ Engine ที่ใช้สำหรับกระบวนการแปลงสื่อสิ่งพิมพ์ เช่นกระดาษ นิตยาสาร สัญญา หรือข้อมูลอะไรก็ตามที่อยู่ในรูปของเอกสารกระดาษ ให้กลายเป็นเป็นข้อความ เรียกกระบวนการนี้ว่า Optical Character Recognition หรือเรียกสั้น ๆ ว่า OCR
Tesseract Engine สามารถแปลงข้อมูลในรูปภาพไปเป็นตัวอักษรภาษาต่าง ๆ ทั่วโลก เดิมที่ถูกพัฒนาโดย Hewlett-Packard ( HP ) และเปิดเป็นโอเพ่นซอร์สในปี 2005 จากนั้นในปี 2006 ทีมพัฒนาของ Google ได้นำมาพัฒนาต่อยอดให้มีความสามารถมากขึ้น สามารถเข้าดูได้ที่ https://opensource.google/projects/tesseract
ในบทความนี้จะมาแนะนำการติดตั้งและใช้งาน Tesseract OCR ในภาษา PHP บนระบบปฏิบัติการ Mac OS นะครับ สำหรับการทดสอบ เบื้องต้นให้เตรียม Environment ตามด้านล่างนะครับ
- ติดตั้ง homebrew package manager
- ติดตั้ง PHP 7.2 หรือเวอร์ชั่นที่สูงกว่า
ติดตั้ง Tesseract OCR
- เปิด terminal ขึ้นมาที่โฟลเด้อ ocr ติดตั้ง https://github.com/thiagoalessio/tesseract-ocr-for-php ผ่าน composer โดยใช้คำสั่งดังนี้ครับ
1 |
composer require thiagoalessio/tesseract_ocr |
เมื่อติดตั้งสำเร็จเราจะได้โครงสร้างโปรเจคตามรูปด้านล่าง ลบ compser.lock ทิ้งไป

- ติดตั้ง Tesseract OCR ใช้ homebrew โดยเปิด Terminal ขึ้นมาและพิมพ์คำสั่งดังนี้
1 |
brew install tesseract |
หลังจากติดตั้ง tesseract เรียบร้อยแล้ว ถ้าเราอยากรู้คำสั่งต่างของ tesseract ให้พิมพ์ tesseract ที่ Terminal
tesseract –version คำสั่งสำหรับดูว่าเราติดตั้งเวอร์ชั่นอะไรไว้ในเครื่อง
tesseract –list-langs คำสั่งสำหรับตรวจสอบภาษาที่ tesseract สามารถ recognize ได้

- ทดสอบการทำงาน โดยให้สร้างไฟล์ index.php ไว้ในโฟลเด้อ ocr จากนั้น ลองหาภาพที่มีข้อความภาษาอังกฤษวางในโฟลเด้อ images ตั้งชื่อไฟล์ว่า eng.png ดูตัวอย่างตามภาพ

และรูปภาพที่มีข้อความภาษาอังกฤษอยู่ในภาพ ใช้สำหรับทดสอบ

คำสั่งใน index.php
1 2 3 4 5 6 7 8 9 |
require_once "vendor/autoload.php"; use thiagoalessio\TesseractOCR\TesseractOCR; echo (new TesseractOCR('images/eng.png')) ->lang('eng') ->executable('/usr/local/Cellar/tesseract/4.1.1/bin/tesseract') ->run(); |
ในส่วนของ executable หากเราไม่ทราบว่า tesseract ถูกติดตั้งไว้ที่ path ไหน ให้ใช้คำสั่ง brew list tesseract เพื่อดู path ที่เราติดตั้ง tesseract ได้ ผลลัพธ์คำสั่งตามด้านล่าง
1 2 3 4 5 6 |
/usr/local/Cellar/tesseract/4.1.1/bin/tesseract /usr/local/Cellar/tesseract/4.1.1/include/tesseract/ (19 files) /usr/local/Cellar/tesseract/4.1.1/lib/libtesseract.4.dylib /usr/local/Cellar/tesseract/4.1.1/lib/pkgconfig/tesseract.pc /usr/local/Cellar/tesseract/4.1.1/lib/ (2 other files) /usr/local/Cellar/tesseract/4.1.1/share/tessdata/ (35 files) |
ผลลัพธ์ที่ได้เมื่อเรารันคำสั่งใน index.php ผ่าน localhost:8080/ocr ตามรูปด้านล่างครับ สำหรับภาพที่ไม่ได้มีความซับซ้อนมาก เช่น ไม่มีพื้นหลัง ไม่มีเส้นตัดทับตัวอักษร ผลลัพธ์แม่นยำ 100% เลยครับ

ติดตั้ง tesseract ภาษาไทย
ติดตั้ง tesseract ภาษาไทย เบื้องต้นหลังจากเราติดตั้ง tesseract เรียบร้อยแล้ว จะมีภาษาที่สามารถ recognize ได้แค่ 3 ภาษานะครับ ในกรณีที่เราต้องการแปลงข้อมูลในภาพที่เป็นภาษาไทยให้เราติดตั้งภาษาใน tesseract เพิ่ม โดยใช้คำสั่ง
1 2 3 |
brew install tesseract-<langcode> สำหรับติดตั้งภาษาใดภาษาหนึ่ง brew install tesseract-lang สำหรับติดตั้งทุกภาษา |
ปรับ code ที่ไฟล์ index.php นิดหน่อยครับ โดยเพิ่มภาษาไทยเข้าไป
1 2 3 4 |
echo (new TesseractOCR('thai.png')) ->lang('tha','eng') ->executable('/usr/local/Cellar/tesseract/4.1.1/bin/tesseract') ->run(); |
ผลลัพธ์ที่ได้ สำหรับการแปลงเป็นภาษาไทย

Tesseract OCR กับ รูปภาพที่ซับซ้อน
ลองทดสอบ Tesseract OCR กับระบบภาพ Captcha หลาย ๆ แบบ ตั้งแต่ง่าย ๆ จนถึงยากมาก ( แบบที่คนเองยังอ่านลำบาก )
รูปแบบตัวเลขล้วน อ่านได้ปกติ

แบบข้อความผสมตัวเลข ยังอ่านได้อยู่

แบบเบลอ ๆ เอียง ๆ ยังพออ่านได้

แบบยากมาก มีเส้นสีเดียวกันทับตัวอักษร อ่านไม่ได้แล้ว

ขอบคุณข้อมูลจากหลาย ๆ ที่สำหรับการทดสอบ
- https://stackoverflow.com/questions/38091060/how-to-setup-and-running-tesseract-ocr-for-php-opensource
- https://github.com/thiagoalessio/tesseract-ocr-for-php
- https://github.com/tesseract-ocr/tesseract/wiki
- https://fonts.google.com