MATLAB OCR 7-Segment Part1
OCR (Optical character recognition)
แปลเป็นไทยง่ายๆ ก็คือการรู้จำตัวเลข และตัวอักษรนั่นแหละครับ
ซึ่งโดยปกติแล้วตัวเลข จะรู้จำง่ายกว่าตัวอักษรอยู่แล้ว และความแม่นยำก็สูงด้วย เพราะตัวเลขมีแค่ 10 รูปแบบเท่านั้น (ก็คือเลข 0 - 9) ดังนั้นโดยปกติแล้ว การรู้จำตัวเลข จึงไม่ค่อยมักมีปัญหาอะไร ยกเว้นแต่....
เจ้าตัวปัญหานี่เลยครับ
7 - Segment
แล้วทำไมเจ้าตัวเลขแบบนี้ถึงมีปัญหาละ? ก็เพราะว่ามันแบ่งออกเป็น 7 ส่วนนี่แหละครับ มันเลยมีปัญหา
ลองจินตนาการถึงเวลาที่เราเขียนตัวเลขดูนะครับ ตัวเลขทุกตัวจะถูกเขียนโดยไม่ยกปากกา และเส้นทุกเส้นจะเชื่อมต่อกันทั้งหมด ทำให้เวลาเขียนโปรแกรม เราสามารถกำหนดได้ง่ายๆ ว่าเส้นขีดๆ แต่ละชุด คือตัวเลข 1 ตัว
แต่ 7-Segment มันดันมี 7 ส่วน และแต่ละส่วนก็ไม่เชื่อมต่อกันอีก แล้วก็ใช่ว่ามันจะแสดงออกมาครบ 7 ส่วนทุกครั้ง อย่างเช่น เลข 1 มันก็แสดงออกมาแค่ 2 ส่วน เลข 7 แสดงออกมาแค่ 3 ส่วน ดังนั้นๆ เราจึงไม่สามารถกำหนดเงื่อนไขแบบเดิมได้อีก เพราะตัวเลขแต่ละตัวมันมีหลายขีด ไม่ได้มีขีดเดียวเหมือนเดิมแล้ว
แล้วเราจะแก้ปัญหานี้ยังไงละ?
จริงๆ แล้ววิธีการแก้มันก็มีหลายวิธี เช่น
1. กำหนดกลุ่มให้ขีด (segment) ของตัวเลข ซึ่งก็ทำได้หลายวิธี เช่น การ fix ความกว้างของ roi ของตัวเลขแต่ละตัว หรือใช้ k-mean cluster หรือใช้ Cascade Object Detector ก็ได้เหมือนกัน
2. ยืดขนาดแต่ละ segment ให้มันไปเชื่อมต่อกัน
ซึ่งในตัวอย่างนี้ ผมจะใช้วิธีแก้ปัญหาในแบบที่ 2 นี่แหละครับ ในการแก้ปัญหา เพราะว่ามันง่ายกว่าวิธีที่ 1 นั่นเอง ฮ่าๆๆๆ
ถ้าพร้อมแล้ว เราก็มาเริ่มกันเลยครับ (ไปที่ OCR 7-Segment Part2)