Η τεχνολογία ανίχνευσης και αναγνώρισης πινακίδων κυκλοφορίας έχει πολλές εφαρμογές. Μπορεί να χρησιμοποιηθεί σε οδικά συστήματα, χώρους στάθμευσης χωρίς εισιτήρια, κατοικίες ελέγχου πρόσβασης οχημάτων και πολλά άλλα. Αυτή η τεχνολογία συνδυάζει την όραση υπολογιστή και την τεχνητή νοημοσύνη.
Θα χρησιμοποιήσετε την Python για να δημιουργήσετε ένα πρόγραμμα ανίχνευσης και αναγνώρισης πινακίδων κυκλοφορίας. Το πρόγραμμα θα λάβει την εικόνα εισόδου, θα την επεξεργαστεί για να εντοπίσει και να αναγνωρίσει την πινακίδα κυκλοφορίας και, τέλος, να εμφανίσει τους χαρακτήρες της πινακίδας κυκλοφορίας ως έξοδο.
Ρύθμιση του περιβάλλοντος Python
Για να ακολουθήσετε άνετα αυτό το σεμινάριο, πρέπει να είστε εξοικειωμένοι με τα βασικά της Python. Αυτό ξεκινά με τη ρύθμιση του περιβάλλοντος του προγράμματος.
Πριν ξεκινήσετε την κωδικοποίηση, πρέπει να εγκαταστήσετε μερικές βιβλιοθήκες στο περιβάλλον σας. Ανοίξτε οποιοδήποτε Python IDE και δημιουργήστε ένα αρχείο Python. Εκτελέστε κάθε εντολή στο τερματικό για να εγκαταστήσετε την αντίστοιχη βιβλιοθήκη. Θα πρέπει να έχετε μια προηγούμενη
εγκατάσταση του Python PIP στον υπολογιστή σας.-
OpenCV-Python: Θα χρησιμοποιήσετε αυτήν τη βιβλιοθήκη για την προεπεξεργασία της εικόνας εισόδου και την εμφάνιση διαφόρων εικόνων εξόδου.
κουκούτσι εγκαθιστώ OpenCV-Python
-
imutils: Θα χρησιμοποιήσετε αυτήν τη βιβλιοθήκη για να περικόψετε την αρχική εικόνα εισόδου στο επιθυμητό πλάτος.
κουκούτσι εγκαθιστώ imutils
-
pytesseract: Θα χρησιμοποιήσετε αυτήν τη βιβλιοθήκη για να εξαγάγετε τους χαρακτήρες της πινακίδας κυκλοφορίας και να τους μετατρέψετε σε συμβολοσειρές.
Η βιβλιοθήκη pytesseract βασίζεται στο Tesseract OCR μηχανή για αναγνώριση χαρακτήρων.κουκούτσι εγκαθιστώ pytesseract
Τι είναι το Tesseract OCR και πώς να το εγκαταστήσετε στον υπολογιστή σας
Το Tesseract OCR είναι ένας κινητήρας που μπορεί αναγνωρίζουν τους χαρακτήρες μιας γλώσσας. Θα πρέπει να το εγκαταστήσετε στον υπολογιστή σας πριν χρησιμοποιήσετε τη βιβλιοθήκη pytesseract. Να το πράξουν:
- Ανοίξτε οποιοδήποτε πρόγραμμα περιήγησης που βασίζεται σε Chrome
- Κατεβάστε το Tesseract OCR εγκατάσταση
- Εκτελέστε το πρόγραμμα εγκατάστασης και εγκαταστήστε το όπως οποιοδήποτε άλλο πρόγραμμα
Έχοντας προετοιμάσει το περιβάλλον και εγκαταστήσετε το tesseract OCR, είστε έτοιμοι να κωδικοποιήσετε το πρόγραμμα.
1. Εισαγωγή των Βιβλιοθηκών
Ξεκινήστε εισάγοντας τις βιβλιοθήκες που εγκαταστήσατε στο περιβάλλον. Η εισαγωγή των βιβλιοθηκών σάς επιτρέπει να καλείτε και να χρησιμοποιείτε τις λειτουργίες τους στο έργο.
εισαγωγή cv2
εισαγωγή imutils
εισαγωγή 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 pixel. Στη συνέχεια, μετατρέψτε την εικόνα σε κλίμακα του γκρι ως το λειτουργία ανίχνευσης άκρων λειτουργεί μόνο με εικόνες σε κλίμακα του γκρι. Τέλος, καλέστε το διμερές φίλτρο λειτουργία για μείωση του θορύβου στην εικόνα.
original_image = imutils.resize (original_image, width=500 )
gray_image = cv2.cvtColor (original_image, cv2.COLOR_BGR2GRAY)
gray_image = cv2.bilateralFilter (grey_image, 11, 17, 17)
4. Ανίχνευση της πινακίδας κυκλοφορίας στην είσοδο
Η ανίχνευση της πινακίδας είναι η διαδικασία προσδιορισμού του εξαρτήματος στο αυτοκίνητο που έχει τους χαρακτήρες της πινακίδας.
Εκτέλεση ανίχνευσης άκρων
Ξεκινήστε καλώντας το cv2.Canny λειτουργία η οποία θα ανιχνεύσει αυτόματα τις άκρες στην προεπεξεργασμένη εικόνα.
edged_image = cv2.Canny (grey_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. Αγνοήστε τα παρακάτω καθώς είναι λιγότερο πιθανό να είναι το περίγραμμα της πινακίδας κυκλοφορίας. Δημιουργήστε ένα αντίγραφο της αρχικής εικόνας και σχεδιάστε την top 30 περιγράμματα στην εικόνα. Τέλος, εμφανίστε την εικόνα.
περιγράμματα = ταξινομημένα (περιγράμματα, κλειδί = cv2.contourArea, αντίστροφη = Αληθής)[:30]
# αποθηκεύει το περίγραμμα της πινακίδας κυκλοφορίας
screenCnt = Κανένας
img2 = original_image.copy()
# σχεδιάζει τα κορυφαία 30 περιγράμματα
cv2.drawContours(img2, περιγράμματα, -1, (0, 255, 0), 3)
cv2.imshow("img2", img2)
Τώρα υπάρχουν λιγότερα περιγράμματα από ό, τι στην αρχή. Τα μόνα περιγράμματα που σχεδιάζονται είναι αυτά που κατά προσέγγιση περιέχουν την πινακίδα κυκλοφορίας.
Τέλος, πρέπει να κάνετε κύκλο πάνω από τα ταξινομημένα περιγράμματα και να προσδιορίσετε ποια είναι η πινακίδα κυκλοφορίας.
Κυκλοφορία πάνω από τα κορυφαία 30 περιγράμματα
Δημιουργήστε έναν βρόχο for για να κυκλώσετε πάνω από τα περιγράμματα. Αναζητήστε το περίγραμμα με τέσσερις γωνίες και προσδιορίστε την περίμετρο και τις συντεταγμένες του. Αποθηκεύστε την εικόνα του περιγράμματος που περιέχει την πινακίδα κυκλοφορίας. Τέλος, σχεδιάστε το περίγραμμα της πινακίδας κυκλοφορίας στην αρχική εικόνα και εμφανίστε το.
καταμέτρηση = 0
idx = 7για c στα περιγράμματα:
# περίπου το περίγραμμα της πινακίδας κυκλοφορίας
contour_perimeter = cv2.arcLength (c, Αληθής)
περίπου = cv2.approxPolyDP(c, 0.018 * περίγραμμα_περίμετρος, Αληθής)# Αναζητήστε περιγράμματα με 4 γωνίες
ανλεν(περίπου)== 4:
screenCnt = περίπου# βρείτε τις συντεταγμένες του περιγράμματος της πινακίδας κυκλοφορίας
x, y, w, h = cv2.boundingRect (c)
new_img = αρχική_εικόνα [ 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("εντοπίστηκε πινακίδα", original_image )
Μετά την επαναφορά, το πρόγραμμά σας έχει αναγνωρίσει το περίγραμμα που περιέχει την πινακίδα κυκλοφορίας. Σχεδιάζει μόνο το περίγραμμα της πινακίδας κυκλοφορίας.
5. Αναγνώριση της πινακίδας κυκλοφορίας που εντοπίστηκε
Η αναγνώριση της πινακίδας σημαίνει την ανάγνωση των χαρακτήρων στην περικομμένη εικόνα της πινακίδας κυκλοφορίας. Τοποθετήστε την εικόνα πινακίδας κυκλοφορίας που αποθηκεύσατε προηγουμένως και εμφανίστε την. Στη συνέχεια, καλέστε το pytesseract.image_to_string λειτουργία και περάστε την εικόνα της περικομμένης πινακίδας κυκλοφορίας. Αυτή η συνάρτηση μετατρέπει τους χαρακτήρες της εικόνας σε συμβολοσειρά.
# όνομα αρχείου της περικομμένης εικόνας πινακίδας κυκλοφορίας
cropped_License_Plate = './7.png'
cv2.εμφάνιση("κομμένοάδειαπλάκα", cv2.imread(cropped_License_Plate))
Το # μετατρέπει τους χαρακτήρες της πινακίδας κυκλοφορίας σε συμβολοσειρά
text = pytesseract.image_to_string (cropped_License_Plate, lang='eng')
Η κομμένη πινακίδα κυκλοφορίας φαίνεται παρακάτω. Οι χαρακτήρες σε αυτό θα είναι η έξοδος που θα εκτυπώσετε αργότερα στην οθόνη.
Έχοντας εντοπίσει και αναγνωρίσει την πινακίδα κυκλοφορίας, είστε έτοιμοι να εμφανίσετε την έξοδο.
6. Εμφάνιση της Εξόδου
Αυτό είναι το τελικό βήμα. Εκτυπώνετε το εξαγόμενο κείμενο στην οθόνη. Αυτό το κείμενο περιέχει τους χαρακτήρες της πινακίδας κυκλοφορίας.
Τυπώνω("Η πινακίδα κυκλοφορίας είναι:", κείμενο)
cv2.waitKey(0)
cv2.destroyAllWindows()
Η αναμενόμενη έξοδος του προγράμματος θα πρέπει να είναι παρόμοια με την παρακάτω εικόνα:
Το κείμενο της πινακίδας κυκλοφορίας φαίνεται στο τερματικό.
Ακονίστε τις δεξιότητές σας στην Python
Η ανίχνευση και η αναγνώριση πινακίδων κυκλοφορίας αυτοκινήτων στην Python είναι ένα ενδιαφέρον έργο για να εργαστείτε. Είναι προκλητικό, επομένως θα σας βοηθήσει να μάθετε περισσότερα για την Python.
Όσον αφορά τον προγραμματισμό, η εξάσκηση είναι ο πυρήνας της γνώσης μιας γλώσσας. Για να εξασκήσετε τις δεξιότητές σας, πρέπει να εργαστείτε σε ενδιαφέροντα έργα.