איך עובד OCR?

תוכנות OCR מסוגלות לקחת סריקות של ספרים עתיקים ולהמיר אותן לטקסט שכאילו הוקלד ישירות למחשב. איך זה עובד?

איך גורמים למחשב לפענח אותיות מודפסות ולהפוך את המסמך הפיזי לטקסט ממוחשב? זיהוי התווים האופטי (OCR – Optical Character Recognition), שנועד לתת מענה יישומי לשאלה הזו, הוא תת-תחום חשוב ושימושי בעולם הראייה הממוחשבת. השיטות עליהן הוא מסתמך עשויות להיות מורכבות ומתמטיות מאד, אך העקרונות הבסיסיים שלהן פשוטים ואותם נציג כאן.

1. איתור התווים

השלב הראשון בדרך לפענוח התווים שבטקסט הוא איתורם. זהו אמנם רק הצעד ההתחלתי, אך הוא מורכב לא פחות מהבאים אחריו. כדי לזהות תו, חשוב לדעת היכן הוא מתחיל והיכן הוא נגמר: אחרת, הצירוף של האות ר' ואחריה פסיק עלול להיתפס כאות ה', ואילו ו' עשויה להיראות כמו נ' סופית קצרה. בתמונה משמאל מוצגת מילה בגופן "Guttman Stam1", כפי שהיא נראית ב-MS-Word. מה כתוב בה? בגופן זה, שהפך לנפוץ מכיוון שניתן חינם עם מערכת ההפעלה, ה"גשר" שבין שני ה"עמודים" באות ח' הוא דקיק, וגורם לה להיראות כמו שתי ז'. אם התוכנה תעבוד ברגישות גבוהה היא תתגבר על הבעיה הספציפית הזו, אך היא עלולה באותה מידה לזהות שתי ז' כ-ח' יחידה, אם במקרה נקלע ביניהן גרגר אבק שהופיע בסריקה. בטקסטים סרוקים באנגלית קיים בלבול נפוץ בין צמד האותיות rn לאות m, מסיבות דומות. בשפה הערבית, שבה רוב האותיות מתחברות זו לזו גם בדפוס, ההפרדה ביניהן לצורך זיהוי קשה עוד יותר.

עם זאת, ברוב השפות הנפוצות, כל אות ותו נמצאים בתוך מלבן דמיוני מוגדר שאינו מכיל כל אות אחרת, והם נוטים לשמור על רציפות מרחבית מסוימת בתוך אותו מלבן. באנגלית, למשל, פרט ל-i ול-j הקטנות, כל האותיות עשויות מ"יחידה" בודדת. בעברית יש את ה' ו-ק', אך גם בהן אין אף עמודה, בתוך אותו מלבן דמיוני, של פיקסלים ריקים לגמרי. אם הטקסט אינו כולל גופנים שונים או בגדלים שונים באותה השורה, גובהו של המלבן אחיד (או קרוב לאחיד) וקל לזהותו בהסתכלות על השורה כולה.

הניגודיות הגבוהה בין הטקסט לבין הרקע האחיד, ברוב המקרים, בתוספת הרווחים בין מילים ובין אותיות (בשפות בהן יש הפרדה), מאפשרים לתוכנה לתחום את המלבנים הנפרדים שמגדירים כל תו. השלב הבא הוא לזהות את התו עצמו.

2. התאמת מטריצות (Matrix Matching)

בכתבה על אומנות ה-ASCII דובר על "מטריצות תווים", מערכים דו-ממדיים שמייצגים פיקסלים בתווים טקסטואליים שונים. שם, מטרת התוכנה היתה לאתר עבור חלק מוגדר מהתמונה הגרפית את "מטריצת התווים" הדומה לה ביותר. כאן, מכיוון שהנחת העבודה היא שהתמונה הגרפית מכילה ממילא תווים, דמיון זה בין התמונה למטריצה יכול לשמש לזיהוי של התו.

כפי שמודגם באיור למטה, לאחר זיהוי של מלבן מסוים, אפשר לחלק אותו למספר מוגדר מראש של "פיקסלים", במקרה זה 10x14. טכניקות של שינוי גודל תמונה יכולות לעשות זאת בקלות בלי קשר לגודל ולפרופורציות המלבן בפועל, אם כי התוצאות עלולות להיות פחות מדויקות ברזולוציה נמוכה או בגודל גופן קטן. במקביל, שמורות בתוכנה מטריצות תווים רבות בגודל זהה (משמאל באיור), שכוללות את כל התווים שצפויים להופיע בטקסט. המטריצה המופקת עבור כל מלבן מושווית לכל אחת מהמטריצות השמורות, וזו הדומה לה ביותר (כאשר דמיון מוגדר, למשל, כמספר הפיקסלים המקבילים הזהים) היא ככל הנראה התו המבוקש.

3. זיהוי תוואים (Feature extraction)

התאמת המטריצות נותנת תוצאות טובות כאשר הגופנים הסרוקים דומים מאד לאלה ששמורים בתוכנה, וכאשר אין בטקסט "הפתעות" כגון כתב נטוי – אלא ששני התנאים הללו אינם מתקיימים בהכרח בעולם האמיתי. בתמונה למטה מוצגת האות א' בכמה גופנים עבריים מוכרים. הדמיון בין האותיות ניכר, אם כי התמקדות בפרטים תעלה כמה הבדלים מהותיים. באות הראשונה מימין, למשל, ה"רגל" השמאלית של ה-א' יוצאת מאמצע הקו האלכסוני המרכזי, ואילו באות שמשמאלה היא יוצאת מקצהו השמאלי, למעלה. ההבדל בעובי בין האות השלישית מימין לשלישית משמאל עצום, ואילו ברביעית מימין יש התארכות ניכרת של האות כלפי מטה ושמאלה.

כדי להתמודד עם כל האפשרויות הללו באמצעות התאמת מטריצות בלבד, התוכנה תזדקק לכמות עצומה של מטריצות – וככל שיש יותר מטריצות, כך גדל גם הסיכוי לבלבול. ה-א' הרביעית מימין, למשל, עשויה להיות דומה מאד לאות ת' בגופן אחר.

עם זאת, ברמת הפשטה גבוהה יותר, אפשר למצוא מכנה משותף לכל צורות ה-א' הנ"ל: קו אלכסוני (פחות או יותר ישר) שמצויר מימין למטה ועד שמאל למעלה, שממרכז צדו הימני יוצא קו קרוב-לניצב ואילו מצדו השמאלי, בין המרכז לחלק העליון, יוצא קו נוסף כלפי מטה או שמאלה. תיאור זה מקיף כמעט כל א' קיימת בדפוס, וניתן לנסח אותו גם במונחים מתמטיים שהמחשב מסוגל להבין. תוכנות OCR שמאחסנות מידע כזה ומפענחות את התווים הסרוקים בהתאם מבצעות "זיהוי תוואים". שיטה זו קרובה הרבה יותר לאופן בו בני אדם מפענחים תווי טקסט, אך היא גם מורכבת יותר מתמטית, ואפילו היא מתקשה בזיהוי של גופנים לא סטנדרטיים ונדירים. בעמוד העשירי של קובץ ה-PDF הזה, שנלקח מספרו של דאגלס הופשטטר (שחקר לעומק את נושא הגופנים וזיהויים), ניתן לראות ווריאציות שונות לאות A, שגם התוכנה המתוחכמת ביותר לא תצליח ככל הנראה לזהות.

4. טכניקות נוספות

כמובן, ברוב המקרים הטקסטים הסרוקים כתובים בגופן נורמלי ומכילים מילים אמיתיות ולא סתם צירופי תווים. עובדה זו מספקת לתוכנות ה-OCR המתקדמות מידע שימושי נוסף. לדוגמה, האות ס' עשויה להיראות דומה ל-ם' הסופית, אך בטקסט סביר לא נמצא ם' באמצע מילה. במקרה כזה, ברור שהפענוח הנכון יהיה דווקא ס'. בנוסף, אם התוכנה זיהתה את האותיות מ-ח-ש-ב-י וכעת היא מתלבטת אם האות האחרונה היא ס' או ם', הצצה במילון (או בטבלת מילים ושכיחותן) תבהיר ש"מחשבים" היא, קרוב לוודאי, המילה הנכונה.

ומה הלאה?

בזכות שיטות כאלה, תוכנות ה-OCR המודרניות מסוגלות לפענח טקסטים מודפסים רגילים במהירות וברמת דיוק מצוינות, אם כי עדיין נדרשת בדיקה אנושית בסיכומו של התהליך. כאשר מדובר בטקסטים פחות שגרתיים, כגון סריקה של תווי מוסיקה, טקסטים שמשחקים בגופנים, בגודלם או בצבעיהם, סריקות "מלוכלכות" או כתבי יד, הבעיות מחמירות והופכות את הזיהוי הממוכן לקשה עד בלתי אפשרי בטכנולוגיה הקיימת.

תחום מתפתח נוסף הוא זיהוי טקסטים בתמונות "טבעיות", ולא רק בסריקות מסודרות. זיהוי שכזה יכול, לדוגמה, לקחת תמונה של שלט רחוב שצולמה בטלפון הסלולרי, לפענח את הכתוב בו ולתרגם אותו עבור התייר המצלם. טכנולוגיה זו מסתמכת על אותן הטכניקות שהוצגו לעיל, אך מוסיפה להן יכולות עיבוד תמונה מתקדמות שמנקות את התמונה הגולמית מעיוותי זווית, פרספקטיבה ותאורה.

הורידו תוכנת OCR למחשב (לטקסטים באנגלית)