זיהוי גרף מתמונה

#1

אני מעוניין לכתוב סקריפט שמוצא איזה אותיות מהאלפבית האנגלי מקיימות Euler Path / Circuit (וכך לדעת האם אפשר לצייר את הצורה של האות על דף מבלי לחזור על קווים או להרים את העיפרון). כדי לעשות זאת אני מתכוון לרנדר את האותיות בעזרת PIL / Pillow עם פונט כלשהו, נניח Sans, להמיר את הצורה לגרף עם צמתים וחיבורים, ולמנות את הצמתים האי זוגיים.

יש פה עניין של threshold; למשל, לא הייתי רוצה שקו מזערי באורך 3 פיקסל יחשב לקו נוסף, או מרחק מזערי בין צמתים יחשב לצומת נפרדת, אבל זה נראה לי יחסית פתיר עם קצת Post-processing. החלק ה"קשה" פה הוא ההמרה לגרף, חשבתי להשתמש ב-OpenCV אבל אני לא יודע אם היא תספק את הפונקציונליות שאני מחפש. איך הייתם ניגשים לבעיה הזו?

#2

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

הייתי מציע למצוא ספריה שמבינה את הפורמט של קבצי ttf, ולהוציא מהם ישירות את המידע של האותיות שאתה צריך (חיפוש מהיר מצא לי את זה https://github.com/fonttools/fonttools ) - ממבט ראשון, נראה שיש לו את הפונקציונליות הדרושה אבל אין תעוד…
נקודה חשובה היא לבחור את הפונט שאתה עובד איתו -פונטים מסוג sans-serf (כפי שהצעת) הם בחירה טובה, כי הם פשוטים - לא מכילים כל מיני צ’ופצ’יקים ועיטורים שנועדו ליופי.

#3

לא יכולתי להתאפק - אז הנה, לאחר 15 דקות של ניסוי וטעיה:

מכאן אתה יכול לכתוב אימפלמנטציה משלך ל- Pen שייצר לך את הגרפים שאתה צריך (חסכנו לך את שלב הרינדור ושלב ניתוח התמונה)

6 Likes
#4

יוו איזה מלך! :scream:
חשבתי קודם על למצוא SVGים של האותיות, על TTF לא חשבתי שזה יהיה כזה פשוט, הפיתרון שלך ממש אלגנטי.

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

1 Like