זיהוי תווים אופטי

מתוך ויקיפדיה, האנציקלופדיה החופשית
קפיצה אל: ניווט, חיפוש
Gnome-colors-edit-find-replace.svg יש לשכתב ערך זה. הסיבה לכך היא: ניסוח לא אנציקלופדי, מקורות.
אתם מוזמנים לסייע ולתקן את הבעיות, אך אנא אל תורידו את ההודעה כל עוד לא תוקן הדף. אם אתם סבורים כי אין בדף בעיה, ניתן לציין זאת בדף השיחה.
באמצעות תוכנת HOCR לזיהוי תווים אופטי, המחשב יכול לפענח את התווים בקובץ תמונה, אך רואים במקרה זה שעדיין ישנה בעיה בהמרה לעברית של טקסט שאינו ברור לגמרי.

תוכנת זיהוי תווים אופטיאנגלית: Optical Character Recognition; בראשי תיבות: OCR) היא תוכנה הממירה תמונה הסרוקה במחשב למסמך תמליל ממוחשב.

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

שיטות של זיהוי תווים אופטי[עריכת קוד מקור | עריכה]

את הזיהוי ניתן לבצע בשתי צורות שונות:

  • התאמה תבניתית - בשיטה זו שומרים על תבניות שונות של האותיות, ומנסים לבדוק איזו מהאותיות היא הדומה ביותר לתבנית.
  • תיאור מבני - בשיטה זו מחלקים את האות לחלקים שונים ויוצרים תיאור של חלקיה השונים של האות והיחסים שביניהם.

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

שימושים[עריכת קוד מקור | עריכה]

טופס לסקרים באמצעות OCR

שימוש בטכנולוגיה של זיהוי תווים אופטי, והמרת קובץ גרפי טקסטואלי לקובץ המורכב מתווים, נעשים בדרך כלל לשם המטרות הבאות:

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

שלבי התהליך[עריכת קוד מקור | עריכה]

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

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

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

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

זיהוי כתב יד[עריכת קוד מקור | עריכה]

בזיהוי כתב יד אי אפשר להשתמש באלגוריתם המשווה את מאפייני האות לגופן. לכן משתמשים בשיטות זיהוי אחרות (עיין זיהוי כתב בוויקיפדיה).אחת מהשיטות (כנראה בן הקלות ביותר לתכנות ולהבנה) היא יצירת תמונה בצורת מלבן (בשחור לבן) של מופעים שונים של אותה אות כתב, לדוגמה : כל שורה מכילה 10 מופעים שונים (תמונות) של אותה אות, וכל שורה מתאימה לאות שונה. כל מופע של אות חסום במלבן (או במעגל),ומתוח לגובה ולרוחב כך שהוא יתאים בדיוק לגודל מלבן המופע. כל המלבנים בשורה גודלם קבוע, והם נמצאים במקום קבוע בתמונה. צבע מופע האות במלבן: שחור, צבע המלבן: לבן, וצבע הרקע: שחור. כדי למצוא מה מאפיין כל אות, התוכנה מחשבת בזמן הלימוד (השלב האיטי), כמה פעמים נחתכת האות על ידי קו ישר העובר בין שתי נקודות על מלבן החוסם את האות. התוכנה בונה קובץ של מספרים שלמים, המכיל את התכונות הכי טובות להבדלה בין אות אחת לשנייה. לדוגמה: תכונה מספר 1234 הוא קו החותך את כל מופעי האות שמספרה 15, 3 פעמים, ואת מופעי האות שמספרה 7, 0 פעמים. בזמן הזיהוי (השלב המהיר) התוכנה יוצרת מלבן חוסם סביב תמונת אות המיועדת לזיהוי, קוראת את קובץ התכונות הכי טובות, טוענת את תוכנו במערך, ובודקת כמה פעמים נחתכת האות על ידי הקווים המגדירים את התכונות הכי טובות, ולפי הנתונים הללו בודקת לאיזו אות ההתמונה הזאת מתאימה ביותר.

תמונת מופעי האותיות

הערות:

  • מיקום נקודה מוגדר על ידי זוג מספרים: אחד מהם קובע היכן היא נמצאת ביחס לרוחב תמונת המופעים, והשני קובע היכן היא נמצאת ביחס לאורכה.
  • טעינת הקובץ למערך לכאורה היא מיותרת, ומבזבזת זמן ומקום בזיכרון המחשב. אבל תהליך החיפוש, מהיר במערך מאשר בקובץ.
  • המערך הוא רב ממדי, בעל 4 ממדים : 2 הממדים הראשונים היא מטריצה ריבועית באורך ורוחב של מספר האותיות, בה כל אות מושוות לאות אחרת. הממד הבא הוא מספר התכונות הכי חשובות (נניח: עד 3 תכונות מבדילות באופן מוחלט בין 2 אותיות). הממד הבא אורכו 3 מספרים: מספר התכונה לדוגמה: ישר מספר 1234, הציון שניתן לאות נניח : 2 שמשמעותו חותך את האות 2 פעמים, והמספר השלישי הציון שניתן לאות המושוות , נניח: 0 , שמשמעותו: חותך את האות 0 פעמים.
  • כשנותנים לתוכנה לחשב באופן אוטומטי מה הן 3 התכונות עם הציון הכי טוב, היא נוטה למצוא 3 ישרים הקרובים זה לזה, ובדרך כלל מיצגים את אותה התכונה, ולכן כדי למצוא את 3 התכונות הכי טובות נהוג לכתוב שגרה, הבוחרת 3 ישרים המחברים נקודות רחוקות יחסית.
  • לכל אות נותנים 10 מופעים כמה שאפשר שונים יותר, כדי שהתוכנה תלמד את התכונות המשותפות, ולא תגדיר אות על ידי תכונה מטעה. לדוגמה : נניח שבכל 10 המופעים של האות - 'ג' בכתב, האות נכתבה כשהחלק העליון שלה נוטה ימינה. בשלב הלימוד התוכנה תיצור קו המקשר שתי נקודות: נקודה על הצלע העליונה של המלבן החוסם את האות, קרוב לפינה הימנית עליונה, ונקודה על אמצע הצלע הימנית של המלבן. בכל המופעים האות - 'ג' לא תיחתך, כתוצאה מכך התוכנה תלמד שהאות - 'ג' חלקה העליון נוטה ימינה. ולכן התוכנה לא תצליח לזהות 'ג' שחלקה העליון קו אנך (אות - 'ג' רגילה).
  • אם אחד ממופעי האות הוא כל כך שונה, שהוא נראה כאילו הוא אות אחרת, הוא לא יאפשר לתוכנה ללמוד את התכונות המאפיינות את האות. במקרה כזה צריך ליצור בתמונת המופעים, שתי שורות המגדירות את אותה אות : שורה של המופעים הרגילים של אותה אות, ושורה של מופעים הדומים למופע השונה.
האות 'ב ' נחתכה 3 פעמים בעקבות נקודה שחורה בפינה וזוהתה כ -'פ ' בטעות
  • בצג המחשב, קו אלכסוני דק, מוצג לפעמים כסדרה של מלבנים הנוגעים זה בזה בפינות. סביר שאם ננסה לחתוך קו כזה בקו אלכסוני דק אחר, התוצאה תהייה שהקווים לא נחתכו. כי חיתוך שני קווים, פירושו שבנקודה מסוימת קו אחד עלה על קו אחר, אבל במקרה שלנו לא חייב להיות שבנקודת החיתוך, מלבן מקו אחד עלה על מלבן מקו שני. לכן בתוכנה כותבים שגרה להרחבת הקו בצורה כזו: עוברים על כל הנקודות בתמונה (שהן בעצם מלבנים קטנים) ואם מוצאים 4 מלבנים צמודים( 2 למעלה ו-2 למעתה) שמתוכם 2 לבנים ו-2 שחורים, כאשר 2 השחורים נוגעים זה בזה רק בפינה אחת( כלומר עומדים באלכסון), משנים אחד מהמלבנים הלבנים לצבע שחור.
  • תכונה המתקבלת מקו חיתוך העובר ליד מרכז המלבן החוסם את האות, מקבלת ציון גבוה מתכונה המתקבלת על ידי קו המחבר שתי נקודות בקרבת פינת המלבן. כי עיקר תכונות האות מוגדרות על ידי מרכזה. לדוגמה : בין האותיות 'ב', 'ה', 'כ' ו -'פ' בכתב, אפשר להבדיל, בעיקר על פי מרכזם.
  • כדי לחסוך בזיכרון ולהאיץ את החישוב, מחשבים את טיב התכונה בעזרת חישוב במספרים שלמים ועיגול התוצאה. לדוגמה : נניח שאות אחת נחתכה בעזרת קו של תכונה מסוימת ב - 9 מתוך 10 המופעים . התוכנה תבצע ממוצע במספרים שלמים :
   \frac{9}{10} =0  = הממוצע

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

  \frac{9}{10} = 1   = הממוצע

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

זיהוי אות ביחס לשורה[עריכת קוד מקור | עריכה]

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

  • האם האות נחתכה על ידי קו מקביל לשורה ( האם קו צהוב נחתך ? , 16 תכונות בגבהים שונים) .
  • יחס גובה האות לגובה השורה באחוזים (באחוזים, כדי שבקובץ התכונות ישמרו מספרים שלמים. גובה האות הוא גובה המלבן החוסם אותה).
  • יחס אורך האות לגובה השורה באחוזים (רוחב האות הוא רוחב המלבן החוסם אותה).
  • מספר החלקים של האות ( באות 'ה' שני חלקים , הספרה '8' מוקפת בקו אחד רציף, ולכן מכילה רק חלק אחד).
  • האם האות מחוברת לאות שלפניה.
  • האם האות מחוברת לאות שאחריה.
  • האם האות נמצאת תמיד (בכל 10 המופעים) בסוף המילה ?
  • האם האות נמצאת תמיד בתחילת המילה ?

ראו גם[עריכת קוד מקור | עריכה]

קישורים חיצוניים[עריכת קוד מקור | עריכה]