Έχετε αναρωτηθεί ποτέ πώς το Snapchat εφαρμόζει με ακρίβεια διάφορα φίλτρα στο πρόσωπό σας; Το smartphone σας κάνει μαγικά όταν ξεκλειδώνει χρησιμοποιώντας τα χαρακτηριστικά του προσώπου σας; Όχι, απλώς παρακολουθείτε το Face Detection σε δράση.
Το Face Detection είναι μια τεχνολογία τεχνητής νοημοσύνης που μπορεί να αναγνωρίσει ανθρώπινα πρόσωπα σε μια ψηφιακή εικόνα ή βίντεο. Ανακαλύψτε πώς μπορείτε να δημιουργήσετε ένα πρόγραμμα ανίχνευσης προσώπου σε πραγματικό χρόνο σε λιγότερο από 25 γραμμές κώδικα με τον θρυλικό αλγόριθμο Haar Cascade.
Τι είναι το Haar Cascade;
Το Haar Cascade είναι ένας αλγόριθμος ανίχνευσης αντικειμένων που εισήχθη από τον Paul Viola και τον Michael Jones για τον εντοπισμό προσώπων σε εικόνες ή βίντεο. Μια συνάρτηση καταρράκτη εκπαιδεύεται χρησιμοποιώντας πολλές θετικές και αρνητικές εικόνες που μπορούν αργότερα να χρησιμοποιηθούν για την αναγνώριση οποιουδήποτε αντικειμένου ή προσώπου σε άλλα μέσα. Αυτά τα εκπαιδευμένα αρχεία είναι διαθέσιμα στο Αποθετήριο OpenCV GitHub.
Χρησιμοποιώντας μια προσέγγιση συρόμενου παραθύρου, ένα παράθυρο σταθερού μεγέθους επαναλαμβάνεται πάνω από μια εικόνα από αριστερά προς τα δεξιά, από πάνω προς τα κάτω. Σε κάθε φάση, το παράθυρο σταματά και ταξινομεί εάν η περιοχή περιέχει πρόσωπο ή όχι.
Το OpenCV, ένα εργαλείο υπολογιστικής όρασης, λειτουργεί με ένα προεκπαιδευμένο μοντέλο Haar Cascade για την ταξινόμηση των χαρακτηριστικών. Κάθε φάση ελέγχει πέντε χαρακτηριστικά: δύο χαρακτηριστικά άκρων, δύο χαρακτηριστικά γραμμής και ένα χαρακτηριστικό τεσσάρων ορθογωνίων.
Κατά την παρατήρηση, η περιοχή των ματιών φαίνεται πιο σκούρα από την περιοχή των μάγουλων ενώ η περιοχή της μύτης φαίνεται πιο φωτεινή από την περιοχή των ματιών. Μπορείτε να απεικονίσετε αυτά τα χαρακτηριστικά με τον παρακάτω τρόπο.
Χρησιμοποιώντας αυτά τα χαρακτηριστικά και τον υπολογισμό των pixel, ο αλγόριθμος προσδιορίζει περισσότερα από 100.000 σημεία δεδομένων. Στη συνέχεια, μπορείτε να χρησιμοποιήσετε έναν αλγόριθμο Adaboost για να βελτιώσετε την ακρίβεια και να απορρίψετε άσχετες λειτουργίες. Σε πολλές επαναλήψεις, αυτή η προσέγγιση ελαχιστοποιεί το ποσοστό σφάλματος και αυξάνει το βάρος του χαρακτηριστικού μέχρι να επιτύχει μια αποδεκτή ακρίβεια.
Ωστόσο, η τεχνική του συρόμενου παραθύρου σταματάει εάν μια συγκεκριμένη δοκιμαστική περίπτωση αποτύχει και είναι υπολογιστικά ακριβή. Για να το λύσετε αυτό, μπορείτε να εφαρμόσετε την έννοια του Cascade of Classifiers. Αντί να εφαρμόζει όλες τις δυνατότητες σε ένα μόνο παράθυρο, αυτή η προσέγγιση ομαδοποιεί και τις εφαρμόζει σταδιακά.
Εάν το παράθυρο αποτύχει στο πρώτο στάδιο, η διαδικασία το απορρίπτει, διαφορετικά συνεχίζεται. Αυτό οδηγεί σε δραστική μείωση του αριθμού των λειτουργιών που πρέπει να εκτελεστούν και καθιστά βιώσιμη τη χρήση του για εφαρμογές σε πραγματικό χρόνο.
Ροή εργασιών ανίχνευσης προσώπου
Ακολουθήστε αυτόν τον αλγόριθμο για να δημιουργήσετε το πρόγραμμα ανίχνευσης προσώπου:
- Φορτώστε τον αλγόριθμο μετωπικής όψης Haar Cascade.
- Αρχικοποιήστε την κάμερα.
- Διαβάστε τα καρέ από την κάμερα.
- Μετατρέψτε έγχρωμες εικόνες σε κλίμακα του γκρι.
- Λάβετε τις συντεταγμένες του προσώπου.
- Σχεδιάστε ένα ορθογώνιο και βάλτε το κατάλληλο μήνυμα.
- Εμφανίστε την έξοδο.
Τι είναι το OpenCV;
Το OpenCV είναι μια βιβλιοθήκη όρασης και μηχανικής εκμάθησης υπολογιστή ανοιχτού κώδικα. Διαθέτει πάνω από 2.500 βελτιστοποιημένους αλγόριθμους για διάφορες εφαρμογές. Αυτές περιλαμβάνουν την ανίχνευση προσώπου/αντικειμένων, την αναγνώριση, την ταξινόμηση και πολλά άλλα.
Απόρρητο των δεδομένων του προσώπου σας αποτελεί ξεχωριστή ανησυχία. Εκατοντάδες εξέχουσες εταιρείες όπως η Google, η IBM και η Yahoo χρησιμοποιούν το OpenCV στις εφαρμογές τους. Μερικοί άνθρωποι που στοχεύουν να διατηρήσουν τα δεδομένα τους ιδιωτικά έχουν αποδείξει υπάρχουν τρόποι για να αποφύγετε την αναγνώριση προσώπου.
Για να εγκαταστήσετε το OpenCV στην Python, χρησιμοποιήστε την εντολή:
κουκούτσι εγκαθιστώ opencv-python
Πώς να δημιουργήσετε ένα πρόγραμμα ανίχνευσης προσώπου χρησιμοποιώντας Python
Ακολουθήστε αυτά τα βήματα για να δημιουργήσετε τον ανιχνευτή προσώπου:
Αυτό το παράδειγμα κώδικα, μαζί με το αρχείο αλγορίθμου Haar Cascade, είναι διαθέσιμο σε α Αποθετήριο GitHub και είναι δωρεάν για χρήση βάσει της άδειας MIT.
- Κατεβάστε το Haar Cascade Frontal Face Προεπιλεγμένη XML αρχείο και τοποθετήστε το στην ίδια θέση με το πρόγραμμα Python.
- Εισαγάγετε τη βιβλιοθήκη OpenCV.
# εισαγωγή των απαιτούμενων βιβλιοθηκών
εισαγωγή cv2 - Αποθηκεύστε το αρχείο αλγορίθμου Haar Cascade Frontal Face για εύκολη αναφορά.
# φόρτωση του αρχείου αλγορίθμου haar case στη μεταβλητή alg
alg = "haarcascade_frontalface_default.xml" - Χρησιμοποιήστε την κλάση CascadeClassifier για να φορτώσετε ένα αρχείο XML στο OpenCV.
# περνώντας τον αλγόριθμο στο OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Τραβήξτε το βίντεο από την κάμερα. Περάστε το 0 στο VideoCapture() λειτουργία για να χρησιμοποιήσετε την κύρια κάμερα. Εάν έχετε συνδέσει μια εξωτερική κάμερα, μπορείτε να χρησιμοποιήσετε τους διαδοχικούς αριθμούς 1, 2 και ούτω καθεξής για να τη χρησιμοποιήσετε.
# λήψη της ροής βίντεο από την κάμερα
cam = cv2.VideoCapture (0) - Ρυθμίστε έναν άπειρο βρόχο για να διαβάζετε την είσοδο της κάμερας καρέ προς καρέ. ο ανάγνωση() η συνάρτηση επιστρέφει δύο παραμέτρους. Η πρώτη τιμή είναι τύπου boolean που υποδεικνύει εάν η λειτουργία είναι επιτυχής ή όχι. Η δεύτερη παράμετρος περιέχει το πραγματικό πλαίσιο με το οποίο πρόκειται να εργαστείτε. Αποθηκεύστε αυτό το πλαίσιο στο img μεταβλητός.
ενώΑληθής:
_, img = cam.read() - Ορίστε το προεπιλεγμένο κείμενο να εμφανίζεται ως Το πρόσωπο δεν εντοπίστηκε. Όταν εντοπιστεί, ενημερώστε την τιμή αυτής της μεταβλητής.
κείμενο = "Το πρόσωπο δεν εντοπίστηκε"
- Η είσοδος που λαμβάνεται από τον πραγματικό κόσμο είναι πολύχρωμη, σε μορφή BGR. Το BGR σημαίνει μπλε, πράσινο και κόκκινο. Αυτό δημιουργεί πολλή επεξεργασία για εφαρμογές υπολογιστικής όρασης. Για να μειώσετε αυτό, χρησιμοποιήστε μια μορφή κλίμακας του γκρι.
Περάστε το πλαίσιο και τη μορφή κώδικα μετατροπής, COLOR_BGR2ΓΚΡΙ, προς την cvtColor() για να αλλάξετε κάθε καρέ του βίντεο από χρώμα σε κλίμακα του γκρι.# μετατρέψτε κάθε καρέ από BGR σε κλίμακα του γκρι
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Χρήση detectMultiScale() για τον εντοπισμό προσώπων. Αυτή η μέθοδος λαμβάνει τρεις παραμέτρους ως είσοδο. Πρώτα είναι η εικόνα πηγής, γκριImg. Η δεύτερη παράμετρος είναι ο scaleFactor. Αυτό καθορίζει πόσο πρέπει να μειώσετε το μέγεθος της εικόνας σε κάθε κλίμακα εικόνας. Χρησιμοποιήστε την προεπιλεγμένη τιμή 1.3 ως παράγοντα κλιμάκωσης. Όσο υψηλότερος είναι ο συντελεστής κλίμακας, τόσο λιγότερα βήματα και τόσο πιο γρήγορη είναι η εκτέλεση. Ωστόσο, υπάρχει επίσης μεγαλύτερη πιθανότητα να λείπουν πρόσωπα. Η τρίτη παράμετρος είναι minNeighbors. Αυτό καθορίζει πόσους γείτονες πρέπει να έχει κάθε υποψήφιο ορθογώνιο για να το διατηρήσει. Όσο υψηλότερη είναι η τιμή, τόσο μικρότερη είναι η πιθανότητα ψευδούς θετικού, αλλά σημαίνει επίσης ότι χάνονται ασαφή ίχνη προσώπου.
# ανίχνευση προσώπων χρησιμοποιώντας το Haar Cascade
face = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Όταν ανιχνεύσετε ένα πρόσωπο, λαμβάνετε τέσσερις συντεταγμένες. Το x αντιπροσωπεύει τη συντεταγμένη x, το y αντιπροσωπεύει τη συντεταγμένη y, το w αντιπροσωπεύει το πλάτος και το h το ύψος. Ενημερώστε το κείμενο σε Εντοπίστηκε πρόσωπο και σχεδιάστε ένα ορθογώνιο χρησιμοποιώντας αυτές τις συντεταγμένες. Το χρώμα του ορθογωνίου είναι πράσινο (BGR) με πάχος δύο pixel.
# σχεδιάστε ένα ορθογώνιο γύρω από το πρόσωπο και ενημερώστε το κείμενο σε Ανίχνευση προσώπου
για (x, y, w, h) στο πρόσωπο:
κείμενο = "Εντοπίστηκε πρόσωπο"
cv2.ορθογώνιο παραλληλόγραμμο(img, (Χ, y), (Χ + w, y + η), (0, 255, 0), 2) - Προαιρετικά εκτυπώστε το κείμενο στην κονσόλα εξόδου. Εμφανίστε το κείμενο στην οθόνη χρησιμοποιώντας το καταγεγραμμένο πλαίσιο ως πηγή, κείμενο όπως προκύπτει στο παραπάνω κείμενο, γραμματοσειρά στυλ FONT_HERSHEY_SIMPLEX, συντελεστής κλίμακας γραμματοσειράς 1, μπλε χρώμα, πάχος δύο εικονοστοιχείων και τύπος γραμμής AA.
# εμφανίστε το κείμενο στην εικόνα
Τυπώνω(κείμενο)
εικόνα = cv2.putText (img, κείμενο, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Εμφανίστε το παράθυρο με τον τίτλο Ανίχνευση προσώπου και η εικόνα. Χρησιμοποιήστε το πλήκτρο αναμονής () μέθοδος εμφάνισης του παραθύρου για 10 χιλιοστά του δευτερολέπτου και ελέγχου για πάτημα πλήκτρου. Εάν ένας χρήστης πατήσει το Esc κλειδί (Τιμή ASCII 27), βγείτε από τον βρόχο.
# εμφανίστε το παράθυρο εξόδου και πατήστε το πλήκτρο escape για έξοδο
cv2.imshow("Ανίχνευση προσώπου", εικόνα)
κλειδί = cv2.waitKey (10)αν κλειδί == 27:
Διακοπή - Τέλος, απελευθερώστε το αντικείμενο της κάμερας από το πρόγραμμα python και κλείστε όλα τα παράθυρα.
έκκεντρο.ελευθέρωση()
cv2.destroyAllWindows()
Ανίχνευση προσώπου με χρήση Python σε δράση
Όταν εμφανίζεται ένα πρόσωπο, θα πρέπει να δείτε την έξοδο ως εξής:
Όταν δεν υπάρχει πρόσωπο, θα δείτε ένα μήνυμα όπως αυτό:
Περιορισμοί ανίχνευσης προσώπου με χρήση αλγόριθμου Haar Cascade
Ενώ αυτός ο αλγόριθμος είναι ελαφρύς, με μικρό μέγεθος μοντέλου και λειτουργεί γρήγορα, υπάρχουν μερικοί περιορισμοί:
- Σε ένα βίντεο σε πραγματικό χρόνο, το πρόσωπο πρέπει να βρίσκεται στην οπτική γωνία της κάμερας. Εάν το πρόσωπο είναι πολύ μακριά ή πολύ κοντά ή έχει πολύ κλίση, ο αλγόριθμος αποτυγχάνει να πάρει τα χαρακτηριστικά.
- Είναι ένας αλγόριθμος μετωπικής όψης, επομένως δεν μπορείτε να εντοπίσετε πλάγιες όψεις.
- Υψηλά ψευδώς θετικά αποτελέσματα. Συχνά ανιχνεύει περιοχές ως πρόσωπα, παρόλο που δεν υπάρχει πρόσωπο.
- Πρέπει να υπάρχουν βέλτιστες συνθήκες φωτισμού. Ο υπερβολικός ή αμυδρός φωτισμός εμποδίζει την ακρίβεια του αλγορίθμου.
Οι πολλές εφαρμογές της ανίχνευσης προσώπου
Η ανίχνευση προσώπου έχει ένα ευρύ φάσμα εφαρμογών στον σημερινό κόσμο. Μπορείτε να το χρησιμοποιήσετε για αναγνώριση προσώπου σε smartphone, σπίτια, οχήματα και σημεία ελέγχου μετανάστευσης. Η ανίχνευση προσώπου είναι ήδη κοινή στην παρακολούθηση CCTV, στα φίλτρα μέσων κοινωνικής δικτύωσης και στην αυτόματη παρακολούθηση προσώπου στον κινηματογράφο.
Είναι μόνο η αρχή αυτής της υπέροχης τεχνολογίας. Με τις προόδους, μπορεί να είμαστε σε θέση να εντοπίσουμε τα εξαφανισμένα παιδιά, να συλλάβουμε εγκληματίες και να αποτρέψουμε εγκλήματα όπως η κλοπή ταυτότητας.