[Python 3]ติดตั้งและใช้งาน Tesseract OCR สำหรับ window เพื่อสกัดข้อความจากภาพ
บทความนี้เป็นการสอนแบบจับมือทำสำหรับคนที่ทำไม่ถูกไปตรงไหนทำยังไงติดตั้งอะไรบ้างสำหรับการจะใช้ PyTesseract เพื่อสกัดตัวอักษรจากภาพ โดยเป้าหมายของบทความนี้คือ สกัดตัวอักษรภาษาอังกฤษ, ตัวอักษรภาษาไทย, ผสมกัน
ขั้นตอนการติดตั้ง
1.เริ่มจากติดตั้ง anaconda ก่อน เพราะจะมีการ include packages ที่จำเป็นหลายๆตัวเอาไว้ เรียกได้ว่าลงครั้งเดียวช่วยให้สบายไปได้เยอะ https://www.anaconda.com/distribution/
2. Download Tesseract OCR จาก https://github.com/UB-Mannheim/tesseract/wiki
3.หลังจากนั้นกดติดตั้งได้เลย แต่ไม่ควรรีบกด next อย่างเดียวเพราะจะมี option ให้เราเลือกติดตั้งตัว training dataset สำหรับสกัดตัวอักษรของภาษาต่างๆให้เลือกอยู่ด้วย แต่ถ้าไม่ต้องการใช้ตัวที่มาพร้อมกันก็สามารถ next ข้ามไปได้เลย แล้วไปหา download เอาทีหลังก็ได้เหมือนกัน
4. เมื่อติดตั้งสำเร็จให้เราไปนำ path ของโฟลเดอร์ที่ติดตั้งไว้ไปใช้งาน โดยการใช้งานจะมีทั้งแบบกำหนดตัว execution ไว้ทุกครั้งก่อนการใช้งาน หรือ กำหนด os path ไว้เลยครั้งเดียวไม่ต้องไปยุ่งอะไรอีก
4.1 แบบกำหนดตัว execution เราจะต้องไปนำ path มาจาก โฟลเดอร์ที่เราติดตั้ง ก่อนหน้านี้มาแปะลงใน code โดยผ่าน method tesseract_cmd ตามภาพเสมอ
4.2 copy path ของ folder ไปใส่ os path เลย
5. หลังจากนั้นมาเช็คว่า pytesseract ของเราใช้งานได้แล้วหรือยังโดยการทดลองใช้ method ของ pytesseract
6. ก่อนจะนำไปใช้จริงเราจะต้องมาเช็คก่อนว่าภาษาที่เราต้องการ คัดกรองออกจากภาพ เรามี training dataset แล้วหรือไม่ ซึ่งสามารถทำได้ด้วยการใช้คำสั่ง
tesseract — list-langs
7. ในกรณีนี้ถ้าเราต้องการใช้ภาษาไทยแต่เราไม่มี dataset ให้เราไป download training dataset มาจาก https://github.com/tesseract-ocr/tesseract/wiki/Data-Files ซึ่งจะมี dataset ใหญ่ๆ อยู่ 3 ชุด
หลังจากนั้นให้เราค้นหา code ของภาษาไทย
8. นำ dataset ที่ได้มาไปใส่ใน folder tessdata
9. ตรวจสอบด้วยคำสั่งเดิมว่าภาษาไทยถูกเพิ่มเข้าไปแล้วหรือยัง
10. ทดสอบใช้งานจริง โดยจะแบ่งเป็น 3 ตัวอย่าง สกัดตัวอักษรภาษาไทย, ภาษาอังกฤษ, ผสมกัน
10.1 สกัดตัวหลังสือภาษาไทย โดยขั้นแรกเราต้องสร้างภาพที่มีตัวหนังสือภาษาไทยก่อน จากนั้นเขียน code เพื่อทดสอบการทำงานและตรวจสอบผลลัพธ์
โดยใน code เราจะใช้ package 2 ตัว ตามภาพ โดยจะใช้ PIL เพื่อเป็นตัวเปิดไฟล์รูปเป้าหมาย และใช้ pytesseract สกัดข้อความจากภาพ และ parameter lang= ‘tha+eng’ หมายถึง เราจะใช้ training dataset ในการสกัดตัวอักษาไทยและอังกฤษจากภาพ จะพบว่าสามารถสกัดข้อความออกมาได้อย่างถูกต้อง แต่ปัญหาที่พบคือจะมีการแทรกด้วย space ทำให้ต้องเขียน code ขจัดตัว space ออกไปก่อนจะนำไปใช้งานจริง
10.2 สกัดตัวอักษรอังกฤษจากภาพ จะพบว่ามีการสกัดตัวอักษรที่ผิดตรง vVv กลายเป็น vVWv ดังนั้นก็ตัวใครตัวมันนะครับถ้าจะเอาไปอ่าน serial number แต่ถ้านำไปใช้อ่านข้อความปกติก็ถือว่ามีความแม่นยำใช้ได้(ไปลองเอง)
10.3 สกัดตัวอักษรผสมระหว่างไทยกับอังกฤษจากภาพ พบว่าสามารถแยกได้ถูกต้องส่วนคำว่า “เ หรอ” ในภาพเมื่อ copy มาใช้งานจะพบว่าไม่มี space เหมือนที่ปรากฏในภาพผลลัพธ์ด้านล่าง
แต่ก็ยังมีบางภาพที่ไม่สามารถแยกให้ถูกต้อง ตัวอย่างเช่น ผลลัพธ์ด้านล่างที่สกัดตัวอักษรผสมกันแต่ไม่สกัดอักษรอังกฤษให้ ต้องรอการอัพเดทจากทางผู้พัฒนากันต่อไปหรือเราจะเขียนแยกสกัดภาษาอังกฤษและไทยแล้วทำ word segmentation กันเองเพื่อสกัดข้อความ แต่เดี๋ยวบทความของเราจะยาวไป เลยขอจบที่ตรงนี้แล้วกัน
ข้อผิดพลาด
ต้องเข้าใจก่อนว่า PyTesseract เป็น wrapper เพื่อไปเรียกใช้ตัว Tesserract OCR อีกทอดนึง ฉะนั้นลงแค่ PyTesseract อย่างเดียว หรือใช้ตัวที่ติดมากับ anaconda จะเกิดเหตุการณ์แบบนี้
ส่วนที่ยังไม่ได้พูดถึง
ในบทความนี้ไม่ได้สอนการใช้ method ทั้งหมด หรือการใส่ค่า parameter ครบทุกตัว และยังมีเรื่อง train data เองอีกด้วย ถ้าสนใจสามารถตามไปที่ลิงค์นี้ https://github.com/tesseract-ocr/tesseract/wiki/TrainingTesseract-4.00