Sadržaj:

Prepoznavanje lica+prepoznavanje: 8 koraka (sa slikama)
Prepoznavanje lica+prepoznavanje: 8 koraka (sa slikama)

Video: Prepoznavanje lica+prepoznavanje: 8 koraka (sa slikama)

Video: Prepoznavanje lica+prepoznavanje: 8 koraka (sa slikama)
Video: 3 РЕЦЕПТА из КУРИНОЙ ПЕЧЕНИ/ ПАШТЕТ!! ГОСТИ БУДУТ В ШОКЕ!! 2024, Decembar
Anonim
Image
Image
Prepoznavanje lica+prepoznavanje
Prepoznavanje lica+prepoznavanje

Ovo je jednostavan primjer pokretanja otkrivanja lica i prepoznavanja pomoću OpenCV -a s kamere. NAPOMENA: OVAJ PROJEKT SAM NAPRAVIO ZA TAKMIČENJE SENZORA I KORISTIO SAM KAMERU KAO SENZOR ZA LICA ZA PRAĆENJE I PREPOZNAVANJE. Dakle, naš cilj Na ovoj sesiji, 1. Instalirajte Anacondu 2. Preuzmite Open CV paket 3. Postavite varijable okoliša 4. Testirajte da biste potvrdili 5 Napravite kôd za otkrivanje lica 6. Napravite kôd za kreiranje skupa podataka 7. Napravite kôd za obuku prepoznavača 8. Napravite kôd za prepoznavanje lica i rezultat.

Korak 1: Instalirajte Anacondu

Instalirajte Anacondu
Instalirajte Anacondu

Anaconda je u osnovi lijepo upakiran Python IDE koji se isporučuje s gomilom korisnih paketa, kao što su NumPy, Pandas, IPython Notebook itd. Čini se da se preporučuje svuda u naučnoj zajednici. Provjerite Anacondu da biste je instalirali.

Korak 2: Preuzmite Open CV paket

Preuzmite Open CV paket
Preuzmite Open CV paket

Prvo idite na službenu web stranicu OpenCV da biste preuzeli cijeli paket OpenCV. Odaberite verziju koja vam se sviđa (2.x ili 3.x). Ja sam na Pythonu 2.x i OpenCV 2.x - uglavnom zato što su ovako postavljeni/zasnovani vodiči za OpenCV -Python.

U mom slučaju, izvadio sam paket (u suštini fasciklu) direktno na svoj F disk. (F: / opencv).

Korak 3: Postavite varijable okoliša

Postavite varijable okoliša
Postavite varijable okoliša

Kopirajte i zalijepite datoteku cv2.pyd

Direktorij Anaconda web-paketa (npr. F: / Program Files / Anaconda2 / Lib / site-packages u mom slučaju) sadrži Python pakete koje možete uvesti. Naš cilj je kopirati i zalijepiti datoteku cv2.pyd u ovaj direktorij (tako da možemo koristiti import cv2 u našim Python kodovima.).

Da biste to učinili, kopirajte datoteku cv2.pyd …

Iz ovog direktorija OpenCV (početni dio može se malo razlikovati na vašoj mašini):

# Python 2.7 i 64-bitna mašina: F: / opencv / build / python / 2.7 / x64# Python 2.7 i 32-bitna mašina: F: / opencv / build / python / 2.7 / x84

U ovaj direktorij Anaconda (početni dio može se malo razlikovati na vašoj mašini):

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

Nakon izvršavanja ovog koraka sada ćemo moći koristiti import cv2 u Python kodu. ALI, moramo još malo poraditi na tome da FFMPEG (video kodek) radi (kako bismo mogli raditi stvari poput obrade videozapisa.)

Desnom tipkom miša kliknite "Moje računalo" (ili "Ovaj računar" u sustavu Windows 8.1)-> lijevo kliknite Svojstva-> lijevo kliknite karticu "Napredno"-> lijevo kliknite gumb "Varijable okruženja …". Dodajte novu korisničku varijablu da pokažem na OpenCV (ili x86 za 32-bitni sistem ili x64 za 64-bitni sistem.) Trenutno sam na 64-bitnoj mašini.

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

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

Dodajte %OPENCV_DIR %\ bin u PATH korisničke varijable.

Na primjer, moja korisnička varijabla PATH izgleda ovako …

Prije:

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

Nakon:

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

To je to, gotovi smo! FFMPEG je spreman za upotrebu!

Korak 4: Potvrdite test

Test za potvrdu
Test za potvrdu
Test za potvrdu
Test za potvrdu

Moramo testirati možemo li sada to učiniti u Anakondi (putem Spyder IDE -a):

  • Uvezite OpenCV paket
  • Koristite uslužni program FFMPEG (za čitanje/pisanje/obradu videozapisa)

Test 1: Možemo li uvesti OpenCV?

Da biste se uvjerili da je Anaconda sada u mogućnosti uvesti paket OpenCV-Python (naime, cv2), izdajte ovo na konzoli IPython:

import cv2

ispis cv2._ verzija_

Ako je paket cv2 uvezen u redu bez grešaka, a verzija cv2 je ispisana, onda smo svi u redu!

Test 2: Možemo li koristiti FFMPEG kodek?

Stavite uzorak

input_video.mp4

video datoteka u direktoriju. Želimo testirati možemo li:

  • pročitajte ovu.mp4 video datoteku i
  • napisati novu video datoteku (može biti.avi ili.mp4 itd.)

Da bismo to učinili, moramo imati testni python kod, nazvati ga test.py. Stavite ga u isti direktorij kao i uzorak

input_video.mp4

file.

Ovo je šta

test.py

može izgledati ovako (Napomena: veliko hvala Peteovim i Warrenovim prijedlozima u polju za komentare - zamijenio sam svoj originalni testni kod sa njegovim - sami ga testirajte i obavijestite nas ako ovo bolje funkcionira):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = čitanje videozapisa uspješno. Netačno - ne možete pročitati video. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = uspješno ispišite video zapis. Netačno - ne možete zapisati video zapis. cap.release () out.release ()

Ovaj test je VEOMA VAŽAN. Ako želite obraditi video datoteke, morate osigurati da Anaconda / Spyder IDE može koristiti FFMPEG (video kodek). Trebali su mi dani da ga pokrenem. Ali nadam se da će vam trebati mnogo manje vremena!:) Napomena: još jedan vrlo važan savjet pri korištenju Anaconda Spyder IDE -a. Obavezno provjerite trenutni radni imenik (CWD) !!!

Korak 5: Napravite kôd za prepoznavanje lica

Napravite kôd za prepoznavanje lica
Napravite kôd za prepoznavanje lica
Napravite kôd za prepoznavanje lica
Napravite kôd za prepoznavanje lica

Gol

U ovoj sesiji,

  • Vidjet ćemo osnove prepoznavanja lica pomoću Haar Cascade Classifikatora zasnovanih na značajkama
  • Isto ćemo proširiti za otkrivanje očiju itd

Haar-kaskadno otkrivanje u OpenCV-u

Ovdje ćemo se pozabaviti otkrivanjem. OpenCV već sadrži mnoge unaprijed obučene klasifikatore za lice, oči, osmijeh itd. Te XML datoteke pohranjene su u datoteci opencv/data/haarcascades/. Napravimo detektor lica i očiju s OpenCV -om. Prvo moramo učitati potrebne XML klasifikatore. Zatim učitajte našu ulaznu sliku (ili video zapis) u načinu rada u sivim tonovima ILI možemo koristiti kameru (za otkrivanje lica u stvarnom vremenu)

uvoz numpy kao 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 /cascar/datacade/datacade.xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) lica = face_cascade.detectMultiScale (sivo, 1.5, 5) za (x, y, w, h) u licima: cv2.pravokutnik (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = sivo [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) za (ex, ey, ew, eh) u očima: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) ispis "pronađeno" +str (len (lica)) +"lice (a)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff ako je k == 27: break cap.release () cv2.destroyAllWindows ()

Korak 6: Napravite kôd za kreiranje skupa podataka

Napravite kôd za stvaranje skupa podataka
Napravite kôd za stvaranje skupa podataka
Napravite kôd za stvaranje skupa podataka
Napravite kôd za stvaranje skupa podataka

Radimo prepoznavanje lica, pa će vam trebati neke slike lica! Možete stvoriti vlastiti skup podataka ili započeti s jednom od dostupnih baza podataka o licu, https://face-rec.org/databases/ daje vam ažuriran pregled. Tri su zanimljive baze podataka (dijelovi opisa citirani su sa

  • AT&T Facedatabase
  • Baza podataka Facebooka Yale A
  • Proširena baza podataka Yale Facedata B

OVDJE koristim vlastiti skup podataka…. Uz pomoć koda koji je dat u nastavku:

uvoz numpy kao 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 ('unesite korisnički ID') sampleN = 0; dok je 1: ret, img = cap.read () sivo = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) lica = face_cascade.detectMultiScale (sivo, 1.3, 5) za (x, y, w, h) u licima: sampleN = uzorakN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/faceData/User."+str (id)+"."+str (sampleN)+".jpg", sivo [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 ()

Korak 7: Napravite kôd za obuku prepoznavača

Napravite kôd za obuku prepoznavača
Napravite kôd za obuku prepoznavača

Kreirajte funkciju za pripremu seta za obuku

Sada ćemo definirati funkciju

getImagesWithID (path)

koji uzima apsolutni put do baze podataka kao ulazni argument i vraća hrpu od 2 liste, jedna koja sadrži otkrivena lica, a druga koja sadrži odgovarajuću oznaku za to lice. Na primjer, ako i -ti indeks na listi lica predstavlja 5. pojedinca u bazi podataka, tada odgovarajuća i -ta lokacija na listi oznaka ima vrijednost jednaku 5.

Sada pretvorite lica skupa podataka (koja su stvorena u koraku 6) u.yml datoteku uz pomoć koda koji je dolje naveden:

import os

import numpy kao np import cv2 iz PIL -a import Image # Za prepoznavanje lica koristićemo LBPH prepoznavač lica prepoznavač = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # ispis image_path #getImagesWithID (put) lica = ID -ovi = za imagePath u imagePaths: # Pročitajte sliku i pretvorite je u sivu skalu licaImg = Image.open (imagePath).convert ('L') faceNP = np.array (faceImg, 'uint8') # Nabavite oznaku slike ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Otkrijte lice na slici ID lica.append (faceNP). (ID) cv2.imshow ("Dodavanje lica za treniranje", faceNP) cv2.waitKey (10) vraćanje np.array (ID -ovi), lica lica, lica = getImagesWithID (putanja) prepoznavač.train (lica, ID -ovi) prepoznavač.save ("F:/Programske datoteke/projekti/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

pomoću ovog koda sav skup podataka o licima pretvoren u jednu.yml datoteku …..path lokacija je ("F:/Programske datoteke/projekti/face_rec/faceREC/trainingdata.yml")

Korak 8: Napravite kôd za prepoznavanje lica i rezultata

Guyzz, ovo je posljednji korak u kojem možemo stvoriti kôd za prepoznavanje lica uz pomoć vaše web kamere. U ovom koraku postoje dvije operacije koje će se izvesti…. 1. snimanje video zapisa sa kamere 2. uporedite ga sa.yml datotekom

uvoz numpy kao npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHere rec.load ("F:/Programske datoteke/projekti/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) dok je 1: ret, img = cap.read () sivo = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) lica = face_cascade.detectMultiScale (sivo, 1,5, 5) za (x, y, w, h) u licima: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (sivo [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 ()

i konačno će vam rezultat doći pred oči …… možete također preuzeti zip datoteku ispod veze: Kliknite ovdje za preuzimanje kodova Dakle, u ovom uputstvu izvršili smo zadatak otkrivanja lica+prepoznavanja pomoću OpenCV -a …..ako ste ovako instruktivno ….. plzzz pretplatite me i glasajte za mene …..hvala prijateljima:)

Preporučuje se: