לטכנולוגיית זיהוי וזיהוי לוחיות רישוי יש יישומים רבים. ניתן להשתמש בו במערכות דרכים, חניונים ללא כרטיסים, בתי מגורים לבקרת גישה לרכב ועוד. טכנולוגיה זו משלבת ראייה ממוחשבת ובינה מלאכותית.
אתה תשתמש ב-Python כדי ליצור תוכנית זיהוי וזיהוי לוחיות רישוי. התוכנית תיקח את תמונת הקלט, תעבד אותה כדי לזהות ולזהות את לוחית הרישוי, ולבסוף תציג את התווים של לוחית הרישוי כפלט.
הגדרת סביבת Python
כדי להמשיך בנוחות עם הדרכה זו, עליך להכיר את היסודות של Python. זה מתחיל בהגדרת סביבת התוכנית.
לפני שתתחיל בקידוד, עליך להתקין מספר ספריות בסביבה שלך. פתח כל Python IDE וצור קובץ Python. הפעל כל פקודה בטרמינל כדי להתקין את הספרייה המתאימה. כדאי שיהיה לך קודם התקנה של Python PIP במחשב שלך.
-
OpenCV-Python: תשתמש בספרייה זו לעיבוד מקדים של תמונת הקלט והצגת תמונות פלט שונות.
צִפצוּף להתקין OpenCV-Python
-
אימוטילס: תשתמש בספרייה זו כדי לחתוך את תמונת הקלט המקורית לרוחב הרצוי.
צִפצוּף להתקין אימוטילס
-
pytesseract: תשתמש בספרייה זו כדי לחלץ את התווים של לוחית הרישוי ולהמיר אותם למחרוזות.
ספריית pytesseract מסתמכת על Tesseract OCR מנוע לזיהוי תווים.צִפצוּף להתקין pytesseract
מה זה Tesseract OCR וכיצד להתקין אותו במחשב שלך
Tesseract OCR הוא מנוע שיכול לזהות תווים של שפה. עליך להתקין אותו במחשב שלך לפני השימוש בספריית pytesseract. כדי לעשות זאת:
- פתח כל דפדפן מבוסס כרום
- הורד את Tesseract OCR להכין
- הפעל את ההתקנה והתקן אותה כמו כל תוכנית אחרת
לאחר הכנת הסביבה והתקנת tesseract OCR, אתה מוכן לקוד את התוכנית.
1. ייבוא הספריות
התחל בייבוא הספריות שהתקנת בסביבה. ייבוא הספריות מאפשר להתקשר ולהשתמש בפונקציות שלהן בפרויקט.
יְבוּא cv2
יְבוּא אימוטילס
יְבוּא pytesseract
אתה צריך לייבא את OpenCV-Python ספרייה כמו cv2. ייבא את הספריות האחרות באמצעות אותם שמות שבהם השתמשת כדי להתקין אותן.
2. לוקח את הקלט
לאחר מכן כוון את pytesseract למיקום בו מותקן מנוע ה-Tesseract. קח את תמונת המכונית כקלט באמצעות ה- cv2.imread פוּנקצִיָה. החלף את שם התמונה בשם התמונה שבה אתה משתמש. אחסן את התמונה באותה תיקיה כמו הפרויקט שלך כדי להקל על הדברים.
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
original_image = cv2.imread('image3.jpeg')
אתה יכול להחליף את תמונת הקלט הבאה בזו שבה תרצה להשתמש.
3. עיבוד מוקדם של הקלט
שנה את גודל רוחב התמונה ל-500 פיקסלים. לאחר מכן המר את התמונה לגווני אפור כ- פונקציית זיהוי קצוות מושקעת עובד רק עם תמונות בגווני אפור. לבסוף, התקשר ל מסנן דו צדדי פונקציה להפחתת הרעש בתמונה.
original_image = imutils.resize (תמונה מקורית, רוחב=500 )
grey_image = cv2.cvtColor (תמונה מקורית, cv2.COLOR_BGR2GRAY)
grey_image = cv2.bilateralFilter (gray_image, 11, 17, 17)
4. זיהוי לוחית הרישוי על הקלט
זיהוי לוחית הרישוי הוא תהליך קביעת החלק ברכב בעל תווי לוחית הרישוי.
ביצוע זיהוי קצה
התחל בהתקשרות ל- cv2.Canny פונקציה שתזהה אוטומטית את הקצוות בתמונה המעובדת מראש.
edged_image = cv2.Canny (gray_image, 30, 200)
מהקצוות הללו נמצא את קווי המתאר.
מציאת קווי המתאר
תתקשר ל cv2.findContours לתפקד ולהעביר עותק של תמונה שולית. פונקציה זו תזהה את קווי המתאר. צייר סביב קווי המתאר שזוהו בתמונה המקורית באמצעות ה- cv2.drawContours פוּנקצִיָה. לבסוף, פלט את התמונה המקורית עם כל קווי המתאר הגלויים מצויירים.
קווי מתאר, חָדָשׁ = cv2.findContours (edged_image.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
img1 = original_image.copy()
cv2.drawContours(img1, קווי מתאר, -1, (0, 255, 0), 3)
cv2.imshow("img1", img1)
התוכנית משרטטת את כל קווי המתאר שהיא מוצאת בתמונת המכונית באופן מובהק.
לאחר מציאת קווי המתאר עליך למיין אותם כדי לזהות את המועמדים הטובים ביותר.
מיון קווי המתאר
מיין את קווי המתאר לפי שטח מינימלי של 30. התעלם מאלה שלמטה כי הם נוטים פחות להיות קו המתאר של לוחית הרישוי. צור עותק של התמונה המקורית וצייר את 30 המובילים קווי מתאר על התמונה. לבסוף, הצג את התמונה.
קווי מתאר = ממוינים (קווי מתאר, מפתח = cv2.contourArea, הפוך = נָכוֹן)[:30]
# מאחסן את קו המתאר של לוחית הרישוי
screenCnt = אף אחד
img2 = original_image.copy()
# מצייר את 30 קווי המתאר המובילים
cv2.drawContours(img2, קווי מתאר, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
יש עכשיו פחות קווי מתאר ממה שהיו בהתחלה. קווי המתאר היחידים שצוירו הם אלו המשוערים להכיל את לוחית הרישוי.
לבסוף, עליך לעבור בלולאה על קווי המתאר הממוינים ולקבוע מי מהם הוא לוחית המספר.
לולאה מעל 30 קווי המתאר המובילים
צור לולאה ללולאה על פני קווי המתאר. חפש את קו המתאר עם ארבע פינות, וקבע את היקפו ואת הקואורדינטות שלו. אחסן את התמונה של קו המתאר המכילה את לוחית הרישוי. לבסוף, צייר את קו מתאר לוחית הרישוי על התמונה המקורית והצג אותה.
ספירה = 0
idx = 7עבור c בקווי מתאר:
# הערך את קו המתאר של לוחית הרישוי
contour_perimeter = cv2.arcLength (c, נָכוֹן)
approx = cv2.approxPolyDP(c, 0.018 *קונטור_perimeter, נָכוֹן)# חפש קווי מתאר עם 4 פינות
אםלן(משוער)== 4:
screenCnt = כ# מצא את הקואורדינטות של מתאר לוחית הרישוי
x, y, w, h = cv2.boundingRect (c)
new_img = original_image [ y: y + h, x: x + w]# מאחסן את התמונה החדשה
cv2.imwrite('./'+str (idx)+'.png',new_img)
idx += 1
לשבור
# מצייר את קו המתאר של לוחית הרישוי בתמונה המקורית
cv2.drawContours(תמונה מקורית, [screenCnt], -1, (0, 255, 0), 3)
cv2.imshow("לוחית רישוי זוהתה", תמונה מקורית )
לאחר לולאה, התוכנית שלך זיהתה את קו המתאר המכיל את לוחית הרישוי. הוא מצייר על קו המתאר של לוחית הרישוי בלבד.
5. זיהוי לוחית הרישוי שזוהתה
זיהוי לוחית הרישוי פירושו קריאת התווים בתמונה החתוכה של לוחית הרישוי. טען את תמונת לוחית הרישוי שאחסנת בעבר והצג אותה. לאחר מכן, התקשר ל pytesseract.image_to_string לתפקד ולהעביר את תמונת לוחית הרישוי החתוכה. פונקציה זו ממירה את התווים בתמונה למחרוזת.
שם קובץ # של תמונת לוחית הרישוי החתוכה
cropped_License_Plate = './7.png'
cv2.imshow("קצוץרישיוןצַלַחַת", cv2.imread(cropped_License_Plate))
# ממיר את תווי לוחית הרישוי למחרוזת
text = pytesseract.image_to_string (cropped_License_Plate, lang='אנג')
לוחית הרישוי החתוכה מוצגת למטה. התווים עליו יהיו הפלט שתדפיס מאוחר יותר על המסך.
לאחר שזיהית וזיהית את לוחית הרישוי, אתה מוכן להציג את הפלט.
6. הצגת הפלט
זהו השלב האחרון. אתה מדפיס את הטקסט שחולץ למסך. טקסט זה מכיל את התווים של לוחית הרישוי.
הדפס("לוחית הרישוי היא:", טקסט)
cv2.waitKey(0)
cv2.destroyAllWindows()
הפלט הצפוי של התוכנית צריך להיות דומה לתמונה למטה:
ניתן לראות את טקסט לוחית הרישוי במסוף.
חידד את כישורי הפייתון שלך
זיהוי וזיהוי לוחיות רישוי לרכב ב-Python הוא פרויקט מעניין לעבוד עליו. זה מאתגר, אז זה אמור לעזור לך ללמוד עוד על Python.
כשזה מגיע לתכנות, תרגול הוא הליבה לשליטה בשפה. כדי לתרגל את הכישורים שלך, אתה צריך לעבוד על פרויקטים מעניינים.