Ξεκινήσαμε με την εκμάθηση βασικών στοιχείων του OpenCV και στη συνέχεια κάναμε κάποιες βασικές επεξεργασίες και χειρισμούς εικόνων σε εικόνες ακολουθούμενες από τμηματοποιήσεις εικόνων και πολλές άλλες λειτουργίες χρησιμοποιώντας το OpenCV και τη γλώσσα python. Εδώ, σε αυτήν την ενότητα, θα εκτελέσουμε μερικές απλές τεχνικές ανίχνευσης αντικειμένων χρησιμοποιώντας την αντιστοίχιση προτύπων. Θα βρούμε ένα αντικείμενο σε μια εικόνα και μετά θα περιγράψουμε τα χαρακτηριστικά του. Τα χαρακτηριστικά είναι τα κοινά χαρακτηριστικά της εικόνας, όπως γωνίες, άκρα κ.λπ. Θα ρίξουμε επίσης μια ματιά σε ορισμένους κοινούς και δημοφιλείς αλγόριθμους ανίχνευσης αντικειμένων όπως SIFT, SURF, FAST, BREIF & ORB.
Όπως αναφέρθηκε στα προηγούμενα σεμινάρια, το OpenCV είναι Open Source Commuter Vision Library που διαθέτει διεπαφές C ++, Python και Java και υποστηρίζει Windows, Linux, Mac OS, iOS και Android. Έτσι μπορεί να εγκατασταθεί εύκολα στο Raspberry Pi με περιβάλλον Python και Linux. Και το Raspberry Pi με OpenCV και συνδεδεμένη κάμερα μπορούν να χρησιμοποιηθούν για τη δημιουργία πολλών εφαρμογών επεξεργασίας εικόνας σε πραγματικό χρόνο, όπως Ανίχνευση προσώπου, κλείδωμα προσώπου, παρακολούθηση αντικειμένων, ανίχνευση πινακίδας αυτοκινήτου, σύστημα οικιακής ασφάλειας κ.λπ.
Η ανίχνευση και η αναγνώριση αντικειμένων αποτελούν τη σημαντικότερη περίπτωση χρήσης για την όραση του υπολογιστή, χρησιμοποιούνται για να κάνουν ισχυρά πράγματα όπως
- Σκηνές επισήμανσης
- Πλοήγηση με ρομπότ
- Αυτοκίνητα
- Αναγνώριση σώματος (Microsoft Kinect)
- Ανίχνευση ασθενειών και καρκίνου
- Αναγνώριση προσώπου
- Αναγνώριση χειρογράφου
- Προσδιορισμός αντικειμένων σε δορυφορικές εικόνες
Ανίχνευση αντικειμένων VS Recognition
Η αναγνώριση αντικειμένων είναι το δεύτερο επίπεδο ανίχνευσης αντικειμένων στο οποίο ο υπολογιστής μπορεί να αναγνωρίσει ένα αντικείμενο από πολλά αντικείμενα σε μια εικόνα και μπορεί να είναι σε θέση να το αναγνωρίσει.
Τώρα, θα εκτελέσουμε ορισμένες λειτουργίες επεξεργασίας εικόνας για να βρούμε ένα αντικείμενο από μια εικόνα.
Εύρεση αντικειμένου από μια εικόνα
Εδώ θα χρησιμοποιήσουμε την αντιστοίχιση προτύπων για την εύρεση χαρακτήρα / αντικειμένου σε μια εικόνα, θα χρησιμοποιήσουμε τη συνάρτηση cv2.matchTemplate () του OpenCV για την εύρεση αυτού του αντικειμένου
εισαγωγή cv2 εισαγωγή numpy ως np
Φορτώστε την εικόνα εισόδου και μετατρέψτε την σε γκρι
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) grey = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY)
Φόρτωση της εικόνας προτύπου
template = cv2.imread ('waldo.jpg', 0) # αποτέλεσμα της αντιστοίχισης προτύπου αντικειμένου πάνω από ένα αποτέλεσμα εικόνας = cv2.matchTemplate (γκρι, πρότυπο, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (αποτέλεσμα)
Δημιουργία πλαισίου οριοθέτησης
top_left = max_loc # αύξηση του μεγέθους του ορίου ορθογωνίου κατά 50 pixel bottom_right = (top_left + 50, top_left + 50) cv2 . ορθογώνιο (εικόνα, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('found found', εικόνα) cv2.waitKey (0) cv2.destroyAllWindows ()
Στο cv2.matchTemplate (γκρι, πρότυπο, cv2.TM_CCOEFF) , εισαγάγετε την εικόνα σε γκρι κλίμακα για να βρείτε το αντικείμενο και το πρότυπο. Στη συνέχεια, εφαρμόστε τη μέθοδο αντιστοίχισης προτύπων για την εύρεση των αντικειμένων από την εικόνα, εδώ χρησιμοποιείται το cv2.TM_CCOEFF .
Ολόκληρη η συνάρτηση επιστρέφει έναν πίνακα που εισάγεται στο αποτέλεσμα, που είναι το αποτέλεσμα της διαδικασίας αντιστοίχισης προτύπων.
Και στη συνέχεια χρησιμοποιούμε το cv2.minMaxLoc (αποτέλεσμα) , το οποίο δίνει τις συντεταγμένες ή το πλαίσιο οριοθέτησης όπου το αντικείμενο βρέθηκε σε μια εικόνα και όταν λάβουμε αυτές τις συντεταγμένες σχεδιάστε ένα ορθογώνιο πάνω του και τεντώστε μερικές διαστάσεις του κουτιού έτσι ώστε το το αντικείμενο μπορεί εύκολα να χωρέσει μέσα στο ορθογώνιο.
Υπάρχουν διάφορες μέθοδοι για την εκτέλεση αντιστοίχισης προτύπων και σε αυτήν την περίπτωση χρησιμοποιούμε cv2.TM_CCOEFF που σημαίνει συντελεστή συσχέτισης.
Εδώ τα συντεταγμένα πληκτρολογίων (X, Y) εξάγονται χρησιμοποιώντας ανιχνευτή κοσκινίσματος και σχεδιάζονται πάνω από την εικόνα χρησιμοποιώντας τη συνάρτηση πληκτρολογίου cv2 draw.
ΣΠΑΖΟΝΤΑ ΚΥΜΑΤΑ ΠΑΡΑΛΙΑΣ
εισαγωγή cv2 εισαγωγή numpy ως np image = cv2.imread ('paris.jpg') γκρι = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY)
Δημιουργήστε αντικείμενο SURF Feature Detector, εδώ ορίζουμε το κατώφλι hessian σε 500
surf = cv2.xfeatures2d.SURF_create (500) πληκτρολόγια, περιγραφείς = surf.detectAndCompute (γκρι, Κανένα) εκτύπωση ("Εντοπίστηκε αριθμός σημείων πληκτρολογίου:", len (αριθμητικά σημεία))
Σχεδιάστε πλούσια βασικά σημεία στην εικόνα εισαγωγής
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - SURF', εικόνα) cv2.waitKey () cv2.destroyAll
Έξοδος κονσόλας:
ΓΡΗΓΟΡΑ
εισαγωγή cv2 εισαγωγή numpy ως np image = cv2.imread ('paris.jpg') γκρι = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY)
Δημιουργία αντικειμένου FAST Detector
fast = cv2.FastFeatureDetector_create () # Απόκτηση βασικών σημείων, από προεπιλογή η μη μέγιστη καταστολή είναι On # για να απενεργοποιήσετε το σετ fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (γκρι, Κανένα) εκτύπωση ("Αριθμός σημείων πληκτρολογίου Εντοπίστηκε: ", len (πληκτρολόγια))
Σχεδιάστε πλούσια σημεία στην εικόνα εισόδου
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - FAST', εικόνα) cv2.waitKey () cv2.destroyAll
Έξοδος κονσόλας:
ΣΥΝΤΟΜΟΣ
εισαγωγή cv2 εισαγωγή numpy ως np image = cv2.imread ('paris.jpg') γκρι = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY)
Δημιουργήστε FAST αντικείμενο ανιχνευτή
σύντομη = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Δημιουργήστε BRIEF αντικείμενο εξαγωγής
#brief = cv2.DescriptorExtractor_create ("ΣΥΝΤΟΜΗ") # Προσδιορισμός βασικών σημείων keypoints = fast.detect (γκρι, Κανένα)
Λάβετε περιγραφείς και νέα τελικά σημεία χρησιμοποιώντας το BRIEF
keypoints, deskriptors = brief.compute (γκρι, σημεία πληκτρολογίου) εκτύπωση ("Αριθμός εντοπισμένων σημείων πληκτρολογίου:", len (σημεία σημείων))
Σχεδιάστε πλούσια σημεία στην εικόνα εισόδου
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - BRIEF', εικόνα) cv2.waitKey () cv2.destroyAll
Έξοδος κονσόλας:
ΣΦΑΙΡΑ
εισαγωγή cv2 εισαγωγή numpy ως np image = cv2.imread ('paris.jpg') γκρι = cv2.cvtColor (εικόνα, cv2.COLOR_BGR2GRAY)
Δημιουργήστε αντικείμενο ORB, μπορούμε να καθορίσουμε τον αριθμό των βασικών σημείων που επιθυμούμε
orb = cv2.ORB_create () # Προσδιορισμός βασικών σημείων keypoints = orb.detect (γκρι, Κανένα)
Αποκτήστε τους περιγραφείς
εκτύπωση πληκτρολογίου, περιγραφή = orb.compute (γκρι, σημεία πληκτρολογίου) ("Εντοπίστηκε αριθμός σημείων πληκτρολογίου:", len (σημεία αναφοράς))
Σχεδιάστε πλούσια σημεία στην εικόνα εισόδου
image = cv2.drawKeypoints (image, keypoints, None, flags = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Feature Method - ORB', εικόνα) cv2.waitKey () cv2.destroyAll
Έξοδος κονσόλας:
Μπορούμε να καθορίσουμε τον αριθμό των σημείων πληκτρολογίου που έχει το μέγιστο όριο των 5000, ωστόσο η προεπιλεγμένη τιμή είναι 500, δηλαδή το ORB θα ανιχνεύσει αυτόματα τα καλύτερα 500 σημεία, εάν δεν καθορίζεται για οποιαδήποτε τιμή των σημείων.
Έτσι, έτσι γίνεται η ανίχνευση αντικειμένων στο OpenCV, τα ίδια προγράμματα μπορούν επίσης να εκτελεστούν σε εγκατεστημένο στο OpenCV Raspberry Pi και μπορούν να χρησιμοποιηθούν ως φορητή συσκευή όπως τα Smartphone με Google Lens.
Αυτό το άρθρο αναφέρεται από το Master Computer Vision ™ OpenCV4 στο Python with Deep Learning course on Udemy, δημιουργήθηκε από τον Rajeev Ratan, εγγραφείτε για να μάθετε περισσότερα για το Computer Vision και το Python.