דילוג לתוכן
תומר ניידנוב

§01/License Plate Recognition

בינה מלאכותית יישומית · פלטפורמה

License Plate Recognition

החלק הקשה לא היה מודל אחד. הוא היה לגרום לזיהוי תנועה, זיהוי לוחית וניתוח לוחית להתנהג כמערכת אחת.

אב־טיפוס לראייה ממוחשבת עבור וידאו רציף מחניה: סינון תנועה, מודל מאומן לזיהוי לוחיות, ניתוח תווים והתראות.

תפקיד
זיהוי תנועה · אימון וכוונון מודלים · ניתוח לוחיות
תקופה
נוב׳ 2024 — יולי 2025
סטטוס
פרויקט צוות שהושלם
צוות
צוות אוניברסיטאי של חמישה

פרויקט צוות אוניברסיטאי שהושלם; קוד המקור נשמר במאגר המקורי.

§02/גרסת 60 שניות

גרסת 60 שניות

01 / מה היה שבור
בווידאו רציף, אותה לוחית משתנה עם המרחק, הזווית, התאורה וטשטוש התנועה, וכל שלב איטי או לא מדויק פוגע בשלב שאחריו.
02 / המהלך
להתייחס לאיסוף הנתונים, שער התנועה, זיהוי הלוחית וניתוח הלוחית כצינור אחד שניתן לאמן, ואז לנתק את השלבים היקרים בעזרת תורים.
03 / התרומה שלי
בצוות של חמישה התמקדתי בזיהוי תנועה ובמודלים לזיהוי ולניתוח לוחיות: איסוף והכנת נתונים, אימון, הערכה, כוונון ושילוב שלהם בצינור.
04 / מה אפשר לבדוק
מאגר הצוות המקורי שומר 69 קומיטים וארכיטקטורת Python מרובת שירותים שניתן לבדוק.

§03/הסיפור המלא

לפי בחירה

הסיפור

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

01/מסגורהמודל מתחיל בנתונים

המודל מתחיל בנתונים

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

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

02/בנייהכמה מודלים, שרשרת כשל אחת

כמה מודלים, שרשרת כשל אחת

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

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

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

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

03/הוכחהלמדוד את המודלים ואת השרשרת כולה

למדוד את המודלים ואת השרשרת כולה

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

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

§04/הראיות שמתחת

עומק לפי בחירה
מערכת וארכיטקטורה
4
שלבים

תנועה ← זיהוי ← OCR ← התראה

קלט רציף
מצב

שלבים אסינכרוניים

Compose
פריסה

שירותים בקונטיינרים

טכנולוגיות

  • Python
  • Ultralytics YOLO
  • PaddleOCR
  • FastAPI
  • Redis
  • Docker
  • PyQt5
החלטות ופשרות
  1. D-01

    2025

    שירותים נפרדים עם תור, לא תהליך יחיד.

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

    2025

    שער תנועה לפני זיהוי.

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

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

  2. 02

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

  3. 03

    למדוד שיעור לכידה מקצה לקצה מההתחלה במקום דיוק רכיבים. זה המספר היחיד שמתאר אם המערכת עובדת.