Αστέρια ΑνενεργάΑστέρια ΑνενεργάΑστέρια ΑνενεργάΑστέρια ΑνενεργάΑστέρια Ανενεργά
 

Μηχανική Όραση

 

Η μηχανική όραση, ή υπολογιστική όραση ή τεχνητή όραση είναι ένα επιστημονικό πεδίο της τεχνητής νοημοσύνης το οποίο επιχειρεί να αναπαράγει αλγοριθμικά την αίσθηση της όρασης, συνήθως σε ένα ηλεκτρονικό υπολογιστή ή ένα ρομπότ. Η μηχανική όραση σχετίζεται με τη θεωρία και την τεχνολογία που εμπλέκονται στη σχεδίαση και κατασκευή συστημάτων που λαμβάνουν και αναλύουν δεδομένα από ψηφιακές εικόνες. Τα εν λόγω δεδομένα μπορούν να είναι φωτογραφίες, βίντεο, όψεις από πολλαπλές κάμερες, πολυδιάστατες εικόνες από ιατρικό σαρωτή και άλλα πολλά.

Αυτό είναι ένα απλό παράδειγμα ανίχνευσης και αναγνώρισης προσώπου με την βιβλιοθήκη OpenCV από κάμερα.

Με απλά βήματα ας δούμε πως λειτουργεί η ανίχνευση και αναγνώριση


1. Εγκατάσταση λογισμικού Anaconda
2. Κάντε λήψη του βιβλιοθήκης Open CV
3. Ορίστε περιβαλλοντικές μεταβλητές στον υπολογιστή
4. Δοκιμή για επιβεβαίωση
5. Δημιουργήστε κώδικα ανίχνευσης προσώπου
6. Κάντε κώδικα για να δημιουργήσετε το σύνολο δεδομένων
7. Κάντε κώδικα για να εκπαιδεύσετε το αναγνωριστικό
8. Κάντε τον κώδικα για να αναγνωρίσετε τα πρόσωπα & το αποτέλεσμα.

Βήμα 1: Εγκαταστήστε το Anaconda
Picture of Install Anaconda
Anaconda είναι ουσιαστικά ένα όμορφα συσκευασμένο Python IDE που αποστέλλεται με τους τόνους των χρήσιμων πακέτων, όπως NumPy, Pandas, IPython Notebook, κλπ. Φαίνεται ότι συνιστάται παντού στην επιστημονική κοινότητα. Ελέγξτε το Anaconda για να το εγκαταστήσετε σε περιβάλλον windows

 

 

Βήμα 2: Λήψη πακέτου Open CV
Εικόνα του αρχείου λήψης ανοιχτού βιογραφικού
Picture of Download Open CV Package

Πρώτον, μεταβείτε στην επίσημη τοποθεσία της 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