Πίνακας περιεχομένων:

Ανίχνευση προσώπου+αναγνώριση: 8 βήματα (με εικόνες)
Ανίχνευση προσώπου+αναγνώριση: 8 βήματα (με εικόνες)

Βίντεο: Ανίχνευση προσώπου+αναγνώριση: 8 βήματα (με εικόνες)

Βίντεο: Ανίχνευση προσώπου+αναγνώριση: 8 βήματα (με εικόνες)
Βίντεο: Facial Recognition: Τα πάντα για την αναγνώριση προσώπου! 2024, Ιούλιος
Anonim
Image
Image
Ανίχνευση προσώπου+αναγνώριση
Ανίχνευση προσώπου+αναγνώριση

Αυτό είναι ένα απλό παράδειγμα εκτέλεσης ανίχνευσης και αναγνώρισης προσώπου με OpenCV από κάμερα. ΣΗΜΕΙΩΣΗ: ΕΧΩ ΚΑΝΕΙ ΑΥΤΟ ΤΟ ΕΡΓΟ ΓΙΑ ΑΙΣΘΗΤΗΡΙΚΟ ΔΙΑΓΩΝΙΣΜΟ ΚΑΙ ΧΡΗΣΙΜΟΠΟΙΗΣΑΤΕ ΤΗΝ ΚΑΜΕΡΑ ΣΑΝ ΑΙΣΘΗΤΗΡΙΑ ΣΤΗΝ ΙΣΧΥΣ ΚΑΙ ΤΗΝ ΑΝΑΓΝΩΡΙΣΗ ΠΡΟΣΩΠΩΝ. Λοιπόν, ο στόχος μαςΣε αυτήν τη συνεδρία, 1. Εγκαταστήστε το Anaconda 2. Κατεβάστε το Open CV Package 3. Ορίστε περιβαλλοντικές μεταβλητές 4. Δοκιμή για επιβεβαίωση 5 Δημιουργία κωδικού για ανίχνευση προσώπου 6. Δημιουργία κώδικα για τη δημιουργία συνόλου δεδομένων 7. Δημιουργία κώδικα για εκπαίδευση του αναγνωριστή 8. Δημιουργία κώδικα για αναγνώριση των προσώπων & Αποτέλεσμα.

Βήμα 1: Εγκαταστήστε το Anaconda

Εγκαταστήστε το Anaconda
Εγκαταστήστε το Anaconda

Το Anaconda είναι ουσιαστικά ένα όμορφα συσκευασμένο Python IDE που αποστέλλεται με τόνους χρήσιμων πακέτων, όπως NumPy, Pandas, IPython Notebook κλπ. Φαίνεται ότι συνιστάται παντού στην επιστημονική κοινότητα. Ρίξτε μια ματιά στο Anaconda για να το εγκαταστήσετε.

Βήμα 2: Κατεβάστε το Open CV Package

Κατεβάστε το Open CV Package
Κατεβάστε το Open CV Package

Πρώτον, μεταβείτε στον επίσημο ιστότοπο OpenCV για να κάνετε λήψη του πλήρους πακέτου OpenCV. Επιλέξτε μια έκδοση που σας αρέσει (2.x ή 3.x). Είμαι σε Python 2.x και OpenCV 2.x - κυρίως επειδή έτσι ρυθμίζονται/βασίζονται τα σεμινάρια OpenCV -Python.

Στην περίπτωσή μου, έχω εξαγάγει το πακέτο (ουσιαστικά ένα φάκελο) κατευθείαν στη μονάδα F μου. (F: / opencv).

Βήμα 3: Ορίστε περιβαλλοντικές μεταβλητές

Ορισμός περιβαλλοντικών μεταβλητών
Ορισμός περιβαλλοντικών μεταβλητών

Αντιγράψτε και επικολλήστε το αρχείο cv2.pyd

Ο κατάλογος πακέτων τοποθεσιών Anaconda (π.χ. F: / Program Files / Anaconda2 / Lib / site-packages στην περίπτωσή μου) περιέχει τα πακέτα Python που μπορείτε να εισαγάγετε. Ο στόχος μας είναι να αντιγράψουμε και να επικολλήσουμε το αρχείο cv2.pyd σε αυτόν τον κατάλογο (έτσι ώστε να μπορούμε να χρησιμοποιήσουμε το cv2 εισαγωγής στους κώδικες Python.).

Για να το κάνετε αυτό, αντιγράψτε το αρχείο cv2.pyd…

Από αυτόν τον κατάλογο OpenCV (το αρχικό μέρος μπορεί να είναι ελαφρώς διαφορετικό στο μηχάνημά σας):

# Μηχανή Python 2.7 και 64-bit: F: / opencv / build / python / 2.7 / x64# Python 2.7 και μηχανή 32-bit: F: / opencv / build / python / 2.7 / x84

Σε αυτόν τον κατάλογο Anaconda (το αρχικό μέρος μπορεί να είναι ελαφρώς διαφορετικό στο μηχάνημά σας):

F: / Program Files / Anaconda2 / Lib / site-packages

Μετά την εκτέλεση αυτού του βήματος, θα μπορούμε τώρα να χρησιμοποιούμε εισαγωγή cv2 σε κώδικα Python. ΑΛΛΑ, πρέπει ακόμη να κάνουμε λίγη περισσότερη δουλειά για να λειτουργήσει ο FFMPEG (κωδικοποιητής βίντεο) (για να μπορέσουμε να κάνουμε πράγματα όπως η επεξεργασία βίντεο.)

Κάντε δεξί κλικ στο "My Computer" (ή "Αυτός ο υπολογιστής" στα Windows 8.1)-> αριστερό κλικ στις ιδιότητες-> αριστερό κλικ στην καρτέλα "Advanced"-> αριστερό κλικ στο κουμπί "Μεταβλητές περιβάλλοντος …". Προσθέστε μια νέα μεταβλητή χρήστη για να δείξει το OpenCV (είτε x86 για σύστημα 32-bit είτε x64 για σύστημα 64-bit.) Αυτή τη στιγμή χρησιμοποιώ ένα μηχάνημα 64-bit.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

Προσθέστε %OPENCV_DIR %\ bin στο User Variable PATH.

Για παράδειγμα, η μεταβλητή χρήστη PATH μου μοιάζει με αυτήν…

Πριν:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

Μετά:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

Αυτό τελειώσαμε! Το FFMPEG είναι έτοιμο για χρήση!

Βήμα 4: Δοκιμή για επιβεβαίωση

Δοκιμή για επιβεβαίωση
Δοκιμή για επιβεβαίωση
Δοκιμή για επιβεβαίωση
Δοκιμή για επιβεβαίωση

Πρέπει να δοκιμάσουμε αν μπορούμε τώρα να τα κάνουμε αυτά στο Anaconda (μέσω Spyder IDE):

  • Εισαγωγή πακέτου OpenCV
  • Χρησιμοποιήστε το βοηθητικό πρόγραμμα FFMPEG (για ανάγνωση/εγγραφή/επεξεργασία βίντεο)

Δοκιμή 1: Μπορούμε να εισαγάγουμε OpenCV;

Για να απογοητεύσουμε ότι η Anaconda είναι πλέον σε θέση να εισαγάγει το πακέτο OpenCV-Python (συγκεκριμένα, cv2), εκδώστε αυτά στην κονσόλα IPython:

εισαγωγή cv2

εκτύπωση cv2._ έκδοση_

Εάν το πακέτο cv2 εισαχθεί εντάξει χωρίς σφάλματα και η έκδοση cv2 εκτυπωθεί, τότε είμαστε όλοι καλοί!

Δοκιμή 2: Μπορούμε να χρησιμοποιήσουμε τον κωδικοποιητή FFMPEG;

Τοποθετήστε ένα δείγμα

input_video.mp4

αρχείο βίντεο σε έναν κατάλογο. Θέλουμε να δοκιμάσουμε αν μπορούμε:

  • διαβάστε αυτό το αρχείο βίντεο.mp4 και
  • γράψτε ένα νέο αρχείο βίντεο (μπορεί να είναι.avi ή.mp4 κ.λπ.)

Για να γίνει αυτό πρέπει να έχουμε έναν δοκιμαστικό κώδικα python, να τον ονομάσουμε test.py. Τοποθετήστε τον στον ίδιο κατάλογο με το δείγμα

input_video.mp4

αρχείο.

Αυτό είναι τι

test.py

μπορεί να μοιάζει (Σημείωση: χάρη στις προτάσεις του Pete και του Warren στο πεδίο σχολίων - έχω αντικαταστήσει τον αρχικό κωδικό δοκιμής με αυτόν - δοκιμάστε τον εαυτό σας και ενημερώστε μας αν αυτό λειτουργεί καλύτερα):

εισαγωγή cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = διάβασμα βίντεο με επιτυχία. Λάθος - δεν διαβάζετε βίντεο. Fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", Fourcc, 20.0, (640, 360)) print out.isOpened () # True = εγγραφή βίντεο με επιτυχία. Λάθος - δεν μπορείτε να γράψετε βίντεο. cap.release () out.release ()

Αυτό το τεστ είναι ΠΟΛΥ ΣΗΜΑΝΤΙΚΟ. Εάν θέλετε να επεξεργαστείτε αρχεία βίντεο, θα πρέπει να διασφαλίσετε ότι το Anaconda / Spyder IDE μπορεί να χρησιμοποιήσει το FFMPEG (κωδικοποιητή βίντεο). Μου πήρε μέρες για να λειτουργήσει. Αλλά ελπίζω ότι θα σας πάρει πολύ λιγότερο χρόνο!:) Σημείωση: μια ακόμη πολύ σημαντική συμβουλή όταν χρησιμοποιείτε το Anaconda Spyder IDE. Βεβαιωθείτε ότι έχετε ελέγξει τον τρέχοντα κατάλογο εργασίας (CWD) !!!

Βήμα 5: Δημιουργήστε κώδικα για την ανίχνευση προσώπου

Δημιουργήστε κώδικα για ανίχνευση προσώπου
Δημιουργήστε κώδικα για ανίχνευση προσώπου
Δημιουργήστε κώδικα για ανίχνευση προσώπου
Δημιουργήστε κώδικα για ανίχνευση προσώπου

Στόχος

Σε αυτή τη συνεδρία,

  • Θα δούμε τα βασικά στοιχεία της ανίχνευσης προσώπου με τη χρήση Haar Feature-based Cascade Classifiers
  • Θα επεκτείνουμε το ίδιο για την ανίχνευση ματιών κλπ

Ανίχνευση καταρράκτη Haar στο OpenCV

Εδώ θα ασχοληθούμε με την ανίχνευση. Το OpenCV περιέχει ήδη πολλούς προ-εκπαιδευμένους ταξινομητές για πρόσωπο, μάτια, χαμόγελο κλπ. Αυτά τα αρχεία XML αποθηκεύονται σε φάκελο opencv/data/haarcascades/. Ας δημιουργήσουμε ανιχνευτή προσώπου και ματιών με OpenCV. Πρώτα πρέπει να φορτώσουμε τους απαιτούμενους ταξινομητές XML. Στη συνέχεια, φορτώστε την εικόνα εισόδου (ή βίντεο) σε κατάσταση κλίμακας του γκρι OR μπορούμε να χρησιμοποιήσουμε την κάμερα (για ανίχνευση προσώπου σε πραγματικό χρόνο)

εισαγωγή numpy ως np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/πηγές/δεδομένα/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/ha.xml ') cap = cv2. VideoCapture (0) ενώ 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) πρόσωπα = face_cascade.detectMultiScale (γκρι, 1,5, 5) για (x, y, w, h) σε όψεις: cv2. ορθογώνιο (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = γκρι [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) για (π.χ., ey, ew, eh) στα μάτια: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (πρόσωπα)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Βήμα 6: Δημιουργήστε κώδικα για τη δημιουργία συνόλου δεδομένων

Δημιουργία κώδικα για δημιουργία συνόλου δεδομένων
Δημιουργία κώδικα για δημιουργία συνόλου δεδομένων
Δημιουργία κώδικα για δημιουργία συνόλου δεδομένων
Δημιουργία κώδικα για δημιουργία συνόλου δεδομένων

Κάνουμε αναγνώριση προσώπου, οπότε θα χρειαστείτε μερικές εικόνες προσώπου! Μπορείτε είτε να δημιουργήσετε το δικό σας σύνολο δεδομένων είτε να ξεκινήσετε με μία από τις διαθέσιμες βάσεις δεδομένων προσώπου, το https://face-rec.org/databases/ σας δίνει μια ενημερωμένη επισκόπηση. Τρεις ενδιαφέρουσες βάσεις δεδομένων είναι (τμήματα της περιγραφής παρατίθενται από τη διεύθυνση

  • AT & T Facedatabase
  • Yale Facedatabase A
  • Extended Yale Facedatabase B

ΕΔΩ χρησιμοποιώ το δικό μου σύνολο δεδομένων….με τη βοήθεια του κώδικα που δίνεται παρακάτω:

εισαγωγή numpy ως np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Αρχεία προγράμματος/opencv/πηγές/δεδομένα/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user id') sampleN = 0; ενώ 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) πρόσωπα = face_cascade.detectMultiScale (γκρι, 1,3, 5) για (x, y, w, h) στις όψεις: δείγμα N = δείγμα Ν+1; cv2.imwrite ("F:/Program Files/projects/face_rec /acesData/User."+str (id)+"."+str (sampleN)+".jpg", grey [y: y+h, x: x+w]) cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) εάν δείγμαN> 20: break cap.release () cv2.destroyAllWindows ()

Βήμα 7: Δημιουργήστε κώδικα για να εκπαιδεύσετε τον αναγνωριστή

Δημιουργήστε κώδικα για να εκπαιδεύσετε τον αναγνωριστή
Δημιουργήστε κώδικα για να εκπαιδεύσετε τον αναγνωριστή

Δημιουργήστε τη λειτουργία για την προετοιμασία του σετ εκπαίδευσης

Τώρα, θα ορίσουμε μια συνάρτηση

getImagesWithID (διαδρομή)

που παίρνει την απόλυτη διαδρομή προς τη βάση δεδομένων εικόνων ως όρισμα εισόδου και επιστρέφει πλειάδα λίστας 2, η μία περιέχει τις ανιχνευμένες όψεις και η άλλη περιέχει την αντίστοιχη ετικέτα για αυτήν την όψη. Για παράδειγμα, εάν ο δείκτης ith στη λίστα των προσώπων αντιπροσωπεύει το 5ο άτομο στη βάση δεδομένων, τότε η αντίστοιχη θέση ith στη λίστα ετικετών έχει τιμή ίση με 5.

Τώρα μετατρέψτε τις όψεις του συνόλου δεδομένων (που δημιουργείται στο βήμα 6) σε αρχείο.yml με τη βοήθεια του κώδικα που δίνεται παρακάτω:

εισαγωγή os

εισαγωγή numpy ως np εισαγωγή cv2 από PIL εισαγωγή Εικόνας # Για αναγνώριση προσώπου θα κάνουμε τον αναγνωριστή LBPH Face Recognizer = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec /acesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (διαδρομή) πρόσωπα = IDs = για το imagePath στο imagePaths: # Διαβάστε την εικόνα και μετατρέψτε σε πρόσωπα κλίμακας του γκρι # Λήψη της ετικέτας της ταυτότητας εικόνας = int (os.path.split (imagePath) [-1].split (".") [1]) # # Ανίχνευση του προσώπου στις όψεις της εικόνας. Προσαρτήστε (faceNP) IDs.append (ID) cv2.imshow ("Προσθήκη προσώπων για μεταφορά", faceNP) cv2.waitKey (10) επιστροφή np.array (ID), πρόσωπα Ids, πρόσωπα = getImagesWithID (διαδρομή) αναγνωριστικό. Εκπαίδευση (πρόσωπα, αναγνωριστικά) αναγνωριστικό.αποθήκευση ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

χρησιμοποιώντας αυτόν τον κώδικα, το σύνολο δεδομένων προσώπου μετατράπηκε σε ένα ενιαίο αρχείο.yml …

Βήμα 8: Δημιουργήστε κώδικα για την αναγνώριση των προσώπων και του αποτελέσματος

Guyzz αυτό είναι το τελευταίο βήμα στο οποίο μπορούμε να δημιουργήσουμε τον κώδικα για την αναγνώριση των προσώπων με τη βοήθεια της κάμερας σας. ΑΥΤΟ ΤΟ ΒΗΜΑ ΥΠΑΡΧΟΥΝ ΔΥΟ ΛΕΙΤΟΥΡΓΙΕΣ ΠΟΥ ΠΡΟΣΦΕΡΟΥΝ…. 1. καταγράφοντας το βίντεο από την κάμερα 2. συγκρίνετε το με το αρχείο.yml

εισαγωγή numpy ως npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Αρχεία προγράμματος/opencv/πηγές/δεδομένα/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecizer; rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) ενώ 1: ret, img = cap.read () γκρι = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) πρόσωπα = face_cascade.detectMultiScale (γκρι, 1,5, 5) για (x, y, w, h) στα πρόσωπα: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec. πρόβλεψη (γκρι [y: y+h, x: x+w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

και τελικά το αποτέλεσμα θα έρθει μπροστά στα μάτια σας …… μπορείτε επίσης να κατεβάσετε το αρχείο zip από κάτω από το σύνδεσμο: Κάντε κλικ εδώ για να κατεβάσετε τους κωδικούς Έτσι, σε αυτό το εκπαιδευτικό εκτελέσαμε το έργο της ανίχνευσης προσώπου+αναγνώρισης χρησιμοποιώντας OpenCV…..αν εσείς όπως αυτό το διδακτικό….. plzzz εγγραφείτε με και ψηφίστε με…… ευχαριστώ φίλους:)

Συνιστάται: