Μηχανική Όραση
Η μηχανική όραση, ή υπολογιστική όραση ή τεχνητή όραση είναι ένα επιστημονικό πεδίο της τεχνητής νοημοσύνης το οποίο επιχειρεί να αναπαράγει αλγοριθμικά την αίσθηση της όρασης, συνήθως σε ένα ηλεκτρονικό υπολογιστή ή ένα ρομπότ. Η μηχανική όραση σχετίζεται με τη θεωρία και την τεχνολογία που εμπλέκονται στη σχεδίαση και κατασκευή συστημάτων που λαμβάνουν και αναλύουν δεδομένα από ψηφιακές εικόνες. Τα εν λόγω δεδομένα μπορούν να είναι φωτογραφίες, βίντεο, όψεις από πολλαπλές κάμερες, πολυδιάστατες εικόνες από ιατρικό σαρωτή και άλλα πολλά.
Αυτό είναι ένα απλό παράδειγμα ανίχνευσης και αναγνώρισης προσώπου με την βιβλιοθήκη OpenCV από κάμερα.
Με απλά βήματα ας δούμε πως λειτουργεί η ανίχνευση και αναγνώριση
1. Εγκατάσταση λογισμικού Anaconda
2. Κάντε λήψη του βιβλιοθήκης Open CV
3. Ορίστε περιβαλλοντικές μεταβλητές στον υπολογιστή
4. Δοκιμή για επιβεβαίωση
5. Δημιουργήστε κώδικα ανίχνευσης προσώπου
6. Κάντε κώδικα για να δημιουργήσετε το σύνολο δεδομένων
7. Κάντε κώδικα για να εκπαιδεύσετε το αναγνωριστικό
8. Κάντε τον κώδικα για να αναγνωρίσετε τα πρόσωπα & το αποτέλεσμα.
Βήμα 1: Εγκαταστήστε το Anaconda
Anaconda είναι ουσιαστικά ένα όμορφα συσκευασμένο Python IDE που αποστέλλεται με τους τόνους των χρήσιμων πακέτων, όπως NumPy, Pandas, IPython Notebook, κλπ. Φαίνεται ότι συνιστάται παντού στην επιστημονική κοινότητα. Ελέγξτε το Anaconda για να το εγκαταστήσετε σε περιβάλλον windows
Βήμα 2: Λήψη πακέτου Open CV
Εικόνα του αρχείου λήψης ανοιχτού βιογραφικού
Πρώτον, μεταβείτε στην επίσημη τοποθεσία της OpenCV για να κατεβάσετε το πλήρες πακέτο OpenCV. Επιλέξτε μια έκδοση που σας αρέσει (2.x ή 3.x). Εχουμε έκδοση Python 2.x και OpenCV 2.x - κυρίως επειδή αυτό είναι το τρέχων setup / βάση του OpenCV-Python σεμιναρίου.
Στην περίπτωσή μου, έχω εξαγάγει το πακέτο (ουσιαστικά σ' ένα φάκελο) κατευθείαν στο δίσκο (F: \ opencv).
Βήμα 3: Ορισμός περιβαλλοντικών μεταβλητών
Εικόνα ορισμού περιβαλλοντικών μεταβλητών
πρέπει να Αντιγράψτε και επικολλήστε το αρχείο cv2.pyd
Ο κατάλογος των πακέτων ιστότοπων Anaconda (π.χ. στην περίπτωσή μου στην διαδρομή F: \ Program Files \ Anaconda2 \ Lib \ site-packages ) περιέχει τα πακέτα Python που μπορείτε να εισαγάγετε. Ο στόχος μας είναι να αντιγράψουμε και να επικολλήσουμε το αρχείο cv2.pyd σε αυτόν τον φάκελο (ώστε να μπορέσουμε να χρησιμοποιήσουμε το cv2 εισαγωγής στους κώδικες Python).
Για να το κάνετε αυτό, αντιγράψτε το αρχείο cv2.pyd από το φάκελο του openCV...
Από αυτόν τον φάκελο του 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-packets
Μετά την εκτέλεση αυτού του βήματος θα μπορέσουμε τώρα να χρησιμοποιήσουμε την εισαγωγή cv2 στον κώδικα της Python.
ΑΛΛΑ, πρέπει να κάνουμε λίγο περισσότερη δουλειά για να δουλέψουμε και με τον FFMPEG (κωδικοποιητή βίντεο) (για να μπορέσουμε να κάνουμε πράγματα όπως επεξεργασία βίντεο).
Κάντε δεξί κλικ στο "Ο Υπολογιστής μου" (ή "Αυτός ο υπολογιστής" στα Windows 8.1)
-> κάντε αριστερό κλικ στο Properties
-> κάντε αριστερό κλικ στην καρτέλα "Advanced"
-> κάντε αριστερό κλικ στο κουμπί "Environment Variables ...".
Προσθέστε μια νέα μεταβλητή χρήστη για να δείξετε το OpenCV (είτε x86 για σύστημα 32 bit είτε x64 για σύστημα 64 bit). Αυτή τη στιγμή βρίσκομαι σε μια μηχανή 64 bit.
σε μηχανή των 32-bit OPENCV_DIR C: \ opencv \ build \ x86 \ vc12
σε μηχανή των 64-bit OPENCV_DIR C: \ opencv \ build \ x64 \ vc12
Προσθέστε το %OPENCV_DIR% \ bin στο μεταβλητό 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:
import cv2
print cv2 .__ version__
Εάν το πακέτο cv2 εισαχθεί εντάξει χωρίς λάθη και εκτυπώνεται η έκδοση του cv2, τότε είναι όλα καλά!
Δοκιμή 2: Μπορούμε να χρησιμοποιήσουμε τον κωδικοποιητή FFMPEG;
Τοποθετήστε ένα δείγμα βίντεο με την εντολή
input_video.mp4
σε έναν φάκελο. Θέλουμε να εξετάσουμε αν μπορούμε:
να διαβάσετε αυτό το αρχείο βίντεο.mp4 και να
γράψετε ένα νέο αρχείο βίντεο (μπορεί να είναι .avi ή .mp4 κ.λπ.)
Για να γίνει αυτό, πρέπει να έχουμε έναν κώδικα δοκιμής python, να τον ονομάσουμε test.py. Τοποθετήστε το στον ίδιο κατάλογο με το δείγμα βίντεο.
input_video.mp4
file.
This is what
test.py
το αρχείο test.py περιέχει τον παρακάτω κώδικα
import cv2 cap = cv2.VideoCapture("input_video.mp4") print cap.isOpened() # True = read video successfully. False - fail to read video. fourcc = cv2.VideoWriter_fourcc(*'XVID') out = cv2.VideoWriter("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened() # True = write out video successfully. False - fail to write out video. cap.release() out.release()
Αυτή η δοκιμή είναι ΠΟΛΥ ΣΗΜΑΝΤΙΚΗ. Αν θέλετε να επεξεργαστείτε αρχεία βίντεο, θα πρέπει να βεβαιωθείτε ότι το Anaconda / Spyder IDE μπορεί να χρησιμοποιήσει τον κωδικοποιητή βίντεο FFMPEG. Χρειάστηκαν αρκετές μέρες για να το δουλέψω. Αλλά ελπίζω ότι θα σας πάρει πολύ λιγότερο χρόνο! :)
Σημείωση: μια ακόμα πολύ σημαντική συμβουλή κατά τη χρήση του Anaconda Spyder IDE. Βεβαιωθείτε ότι έχετε ελέγξει τον τρέχοντα φάκελο εργασίας (CWD) !!!
Βήμα 5: Δημιουργία κώδικα για ανίχνευση προσώπου
Εικόνα του Κώδικα για ανίχνευση προσώπου
Εικόνα του Κώδικα για ανίχνευση προσώπου
Στόχος
Σε αυτό το βήμα,
Θα δούμε τα βασικά στοιχεία της ανίχνευσης προσώπου χρησιμοποιώντας τους ταξινομητές Cascade βασισμένους στο χαρακτηριστικό Haar
Θα επεκτείνουμε το ίδιο για την ανίχνευση ματιών κλπ
Haar-cascade Detection στο OpenCV
Εδώ θα ασχοληθούμε με την ανίχνευση. Το OpenCV περιέχει ήδη πολλούς προ-εκπαιδευμένους ταξινομητές για πρόσωπο, μάτια, χαμόγελο κλπ. Αυτά τα αρχεία XML αποθηκεύονται σε opencv / data / haarcascades / folder. Ας δημιουργήσουμε ανιχνευτή προσώπου και ματιών με το OpenCV.
Πρώτα πρέπει να φορτώσουμε τους απαιτούμενους ταξινομητές XML. Στη συνέχεια, φορτώστε την εικόνα εισόδου (ή το βίντεο) σε κατάσταση κλίμακας του γκρι Ή μπορούμε να χρησιμοποιήσουμε την κάμερα (για ανίχνευση προσώπου σε πραγματικό χρόνο)
import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_eye.xml') cap = cv2.VideoCapture(0)<br>while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.5, 5) for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) print "found " +str(len(faces)) +" face(s)" cv2.imshow('img',img) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()
Βήμα 6: Δημιουργία κώδικα για τη δημιουργία συνόλου δεδομένων
Εικόνα Δημιουργία κώδικα για τη δημιουργία συνόλου δεδομένων
Εικόνα Δημιουργία κώδικα για τη δημιουργία συνόλου δεδομένων
Κάνουμε αναγνώριση προσώπου, έτσι θα χρειαστείτε μερικές εικόνες προσώπου! Μπορείτε είτε να δημιουργήσετε το δικό σας σύνολο δεδομένων είτε να ξεκινήσετε με μία από τις διαθέσιμες βάσεις δεδομένων, http://face-rec.org/databases/ σας δίνει μια ενημερωμένη επισκόπηση. Τρεις ενδιαφέρουσες βάσεις δεδομένων (μέρη της περιγραφής αναφέρονται από το http://face-rec.org):
AT & T Facedatabase
Yale Facedatabase A
Εκτεταμένη βάση δεδομένων Yale Facedat
ΕΔΩ χρησιμοποιώ το δικό μου σύνολο δεδομένων .... με τη βοήθεια του κώδικα που δίνεται παρακάτω:
import numpy as np import cv2 face_cascade = cv2.CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2.VideoCapture(0) id = raw_input('enter user id') sampleN=0; while 1: ret, img = cap.read() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: sampleN=sampleN+1; cv2.imwrite("F:/Program Files/projects/face_rec/facesData/User."+str(id)+ "." +str(sampleN)+ ".jpg", gray[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) if sampleN > 20: break cap.release() cv2.destroyAllWindows()
Βήμα 7: Δημιουργία κώδικα για να εκπαιδεύσετε το Recognizer
Εικόνα του Κώδικα για την Εκπαίδευση του Recognizer
Δημιουργήστε τη λειτουργία για να προετοιμάσετε το σετ εκπαίδευσης
Τώρα, θα ορίσουμε μια λειτουργία
getImagesWithID (διαδρομή)
που λαμβάνει την απόλυτη διαδρομή προς τη βάση δεδομένων εικόνων ως όρισμα εισαγωγής και επιστρέφει πλειάδα 2 λιστών, η μία περιέχει τα ανιχνευμένα πρόσωπα και η άλλη περιέχει την αντίστοιχη ετικέτα για αυτό το πρόσωπο. Για παράδειγμα, εάν ο i-th δείκτης στη λίστα προσώπων αντιπροσωπεύει το 5ο άτομο στη βάση δεδομένων, τότε η αντίστοιχη θέση i στη λίστα των ετικετών έχει τιμή ίση με 5.
Τώρα μετατρέψτε τα πρόσωπα δεδομένων (που δημιουργούνται στο βήμα 6) σε αρχείο .yml με τη βοήθεια του κώδικα που δίνεται παρακάτω:
import os import numpy as np import cv2 from PIL import Image # For face recognition we will the the LBPH Face Recognizer recognizer = cv2.createLBPHFaceRecognizer(); path="F:/Program Files/projects/face_rec/facesData" def getImagesWithID(path): imagePaths = [os.path.join(path, f) for f in os.listdir(path)] # print image_path #getImagesWithID(path) faces = [] IDs = [] for imagePath in imagePaths: # Read the image and convert to grayscale facesImg = Image.open(imagePath).convert('L') faceNP = np.array(facesImg, 'uint8') # Get the label of the image ID= int(os.path.split(imagePath)[-1].split(".")[1]) # Detect the face in the image faces.append(faceNP) IDs.append(ID) cv2.imshow("Adding faces for traning",faceNP) cv2.waitKey(10) return np.array(IDs), faces Ids,faces = getImagesWithID(path) recognizer.train(faces,Ids) recognizer.save("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows()
Χρησιμοποιώντας αυτόν τον κώδικα, όλα τα σύνολα δεδομένων που μετατρέπονται σε ένα μόνο αρχείο .yml ..... είναι η θέση διαδρομής ("F: / Program Files / projects / face_rec / faceREC / trainingdata.yml")
Βήμα 8: Δημιουργία κώδικα για την αναγνώριση των προσώπων και του αποτελέσματος
Guyzz αυτό είναι το τελευταίο βήμα στο οποίο μπορούμε να δημιουργήσουμε τον κώδικα για να αναγνωρίσουμε τα πρόσωπα με τη βοήθεια της κάμεράς σας
Σ 'αυτό το βήμα υπάρχουν δύο λειτουργίες που πρέπει να εκτελεστούν
1. καταγραφή του βίντεο από την κάμερα
2. να το συγκρίνετε με το αρχείο .yml σας
import numpy as np
import cv2 face_cascade = cv2.CascadeClassifier('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
rec = cv2.createLBPHFaceRecognizer();
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)
while 1:
ret, img = cap.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.5, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
id,conf=rec.predict(gray[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()
και τελικά το αποτέλεσμα θα έρθει μπροστά από τα μάτια σας ......
u μπορείτε επίσης να κατεβάσετε το αρχείο zip από κάτω από τον σύνδεσμο:
Έτσι, σε αυτό το εντολέα εκτελούσαμε το καθήκον της ανίχνευσης προσώπου + αναγνώρισης χρησιμοποιώντας OpenCV ..... αν σας αρέσει αυτό το εκπαιδευτικό ....
κατεβάστε όλα τα αρχεία από εδώ
end