[Python 3]ติดตั้งและใช้งาน Tesseract OCR สำหรับ window เพื่อสกัดข้อความจากภาพ

Navapat tongpubet
4 min readMay 22, 2019

บทความนี้เป็นการสอนแบบจับมือทำสำหรับคนที่ทำไม่ถูกไปตรงไหนทำยังไงติดตั้งอะไรบ้างสำหรับการจะใช้ PyTesseract เพื่อสกัดตัวอักษรจากภาพ โดยเป้าหมายของบทความนี้คือ สกัดตัวอักษรภาษาอังกฤษ, ตัวอักษรภาษาไทย, ผสมกัน

ขั้นตอนการติดตั้ง

1.เริ่มจากติดตั้ง anaconda ก่อน เพราะจะมีการ include packages ที่จำเป็นหลายๆตัวเอาไว้ เรียกได้ว่าลงครั้งเดียวช่วยให้สบายไปได้เยอะ https://www.anaconda.com/distribution/

2. Download Tesseract OCR จาก https://github.com/UB-Mannheim/tesseract/wiki

เลือกตามความเหมาะสมของ os ของเรา

3.หลังจากนั้นกดติดตั้งได้เลย แต่ไม่ควรรีบกด next อย่างเดียวเพราะจะมี option ให้เราเลือกติดตั้งตัว training dataset สำหรับสกัดตัวอักษรของภาษาต่างๆให้เลือกอยู่ด้วย แต่ถ้าไม่ต้องการใช้ตัวที่มาพร้อมกันก็สามารถ next ข้ามไปได้เลย แล้วไปหา download เอาทีหลังก็ได้เหมือนกัน

เลือก dataset สำหรับภาษาที่ต้องการใช้งาน

4. เมื่อติดตั้งสำเร็จให้เราไปนำ path ของโฟลเดอร์ที่ติดตั้งไว้ไปใช้งาน โดยการใช้งานจะมีทั้งแบบกำหนดตัว execution ไว้ทุกครั้งก่อนการใช้งาน หรือ กำหนด os path ไว้เลยครั้งเดียวไม่ต้องไปยุ่งอะไรอีก

4.1 แบบกำหนดตัว execution เราจะต้องไปนำ path มาจาก โฟลเดอร์ที่เราติดตั้ง ก่อนหน้านี้มาแปะลงใน code โดยผ่าน method tesseract_cmd ตามภาพเสมอ

วิธีการ copy path ของตัว execution
กำหนดที่อยู่ของ execution file

4.2 copy path ของ folder ไปใส่ os path เลย

copy path ของfolder ที่เราติดตั้ง
กดตามตัวเลข
กดตามตัวเลข
double click ที่คำว่า path
กด new เพื่อสร้าง slot สำหรับวาง path ที่เรา copy มา

5. หลังจากนั้นมาเช็คว่า pytesseract ของเราใช้งานได้แล้วหรือยังโดยการทดลองใช้ method ของ pytesseract

ในภาพจะพบว่าสามารถใช้งานได้แล้ว

6. ก่อนจะนำไปใช้จริงเราจะต้องมาเช็คก่อนว่าภาษาที่เราต้องการ คัดกรองออกจากภาพ เรามี training dataset แล้วหรือไม่ ซึ่งสามารถทำได้ด้วยการใช้คำสั่ง

tesseract — list-langs

พบว่ามี dataset ถูกติดตั้งไว้ 2 ภาษา

7. ในกรณีนี้ถ้าเราต้องการใช้ภาษาไทยแต่เราไม่มี dataset ให้เราไป download training dataset มาจาก https://github.com/tesseract-ocr/tesseract/wiki/Data-Files ซึ่งจะมี dataset ใหญ่ๆ อยู่ 3 ชุด

เลือกอันไหนก็ได้แต่แนะนำให้ลองใช้ก่อน

หลังจากนั้นให้เราค้นหา code ของภาษาไทย

copy รหัส tha(ภาษาไทย) ไปค้นหาต่อในประเภทของ dataset ภาพด้านบนต่อไป
download dataset ที่ต้องการ

8. นำ dataset ที่ได้มาไปใส่ใน folder tessdata

9. ตรวจสอบด้วยคำสั่งเดิมว่าภาษาไทยถูกเพิ่มเข้าไปแล้วหรือยัง

tha คือภาษาไทยที่เราได้เพิ่มเข้าไป

10. ทดสอบใช้งานจริง โดยจะแบ่งเป็น 3 ตัวอย่าง สกัดตัวอักษรภาษาไทย, ภาษาอังกฤษ, ผสมกัน

10.1 สกัดตัวหลังสือภาษาไทย โดยขั้นแรกเราต้องสร้างภาพที่มีตัวหนังสือภาษาไทยก่อน จากนั้นเขียน code เพื่อทดสอบการทำงานและตรวจสอบผลลัพธ์

ภาพที่เราต้องการสกัดข้อความออกมา
สามารถสกัดตัวอักษรได้ถูกต้อง

โดยใน code เราจะใช้ package 2 ตัว ตามภาพ โดยจะใช้ PIL เพื่อเป็นตัวเปิดไฟล์รูปเป้าหมาย และใช้ pytesseract สกัดข้อความจากภาพ และ parameter lang= ‘tha+eng’ หมายถึง เราจะใช้ training dataset ในการสกัดตัวอักษาไทยและอังกฤษจากภาพ จะพบว่าสามารถสกัดข้อความออกมาได้อย่างถูกต้อง แต่ปัญหาที่พบคือจะมีการแทรกด้วย space ทำให้ต้องเขียน code ขจัดตัว space ออกไปก่อนจะนำไปใช้งานจริง

ผลลัพธ์หลังจากขจัด space ออกจากข้อความ

10.2 สกัดตัวอักษรอังกฤษจากภาพ จะพบว่ามีการสกัดตัวอักษรที่ผิดตรง vVv กลายเป็น vVWv ดังนั้นก็ตัวใครตัวมันนะครับถ้าจะเอาไปอ่าน serial number แต่ถ้านำไปใช้อ่านข้อความปกติก็ถือว่ามีความแม่นยำใช้ได้(ไปลองเอง)

10.3 สกัดตัวอักษรผสมระหว่างไทยกับอังกฤษจากภาพ พบว่าสามารถแยกได้ถูกต้องส่วนคำว่า “เ หรอ” ในภาพเมื่อ copy มาใช้งานจะพบว่าไม่มี space เหมือนที่ปรากฏในภาพผลลัพธ์ด้านล่าง

แต่ก็ยังมีบางภาพที่ไม่สามารถแยกให้ถูกต้อง ตัวอย่างเช่น ผลลัพธ์ด้านล่างที่สกัดตัวอักษรผสมกันแต่ไม่สกัดอักษรอังกฤษให้ ต้องรอการอัพเดทจากทางผู้พัฒนากันต่อไปหรือเราจะเขียนแยกสกัดภาษาอังกฤษและไทยแล้วทำ word segmentation กันเองเพื่อสกัดข้อความ แต่เดี๋ยวบทความของเราจะยาวไป เลยขอจบที่ตรงนี้แล้วกัน

จอนม่ายข้าวจาย ภัทรก็ไม่เข้าใจ

ข้อผิดพลาด

ต้องเข้าใจก่อนว่า PyTesseract เป็น wrapper เพื่อไปเรียกใช้ตัว Tesserract OCR อีกทอดนึง ฉะนั้นลงแค่ PyTesseract อย่างเดียว หรือใช้ตัวที่ติดมากับ anaconda จะเกิดเหตุการณ์แบบนี้

เรียกใช้ Tesseract OCR แต่ไม่เจอ

ส่วนที่ยังไม่ได้พูดถึง

ในบทความนี้ไม่ได้สอนการใช้ method ทั้งหมด หรือการใส่ค่า parameter ครบทุกตัว และยังมีเรื่อง train data เองอีกด้วย ถ้าสนใจสามารถตามไปที่ลิงค์นี้ https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00

แหล่งความรู้ประกอบ

--

--