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, Studeni
Anonim
Image
Image
Prepoznavanje lica+prepoznavanje
Prepoznavanje lica+prepoznavanje

Ovo je jednostavan primjer pokretanja otkrivanja i prepoznavanja lica s OpenCV -om s kamere. NAPOMENA: OVAJ PROJEKT IZRADIO SAM ZA NATJEČAJ 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 stvaranje 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 biti lijepo upakiran Python IDE koji se isporučuje s tonama korisnih paketa, kao što su NumPy, Pandas, IPython Notebook itd. Čini se da se preporučuje svugdje u znanstvenoj zajednici. Provjerite instaliranje Anaconde.

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 se na ovaj način postavljaju/temelje vodiči za OpenCV -Python.

U mom slučaju, izvadio sam paket (u biti mapu) ravno na svoj F pogon. (F: / opencv).

Korak 3: Postavite varijable okoliša

Postavite varijable okoliša
Postavite varijable okoliša

Kopirajte i zalijepite datoteku cv2.pyd

Direktorij Anaconda Site-packages (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šem računalu):

# Python 2.7 i 64-bitni stroj: F: / opencv / build / python / 2.7 / x64# Python 2.7 i 32-bitni stroj: F: / opencv / build / python / 2.7 / x84

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

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

Nakon izvođenja 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 "Ovo računalo" u sustavu Windows 8.1)-> lijevom tipkom miša kliknite Svojstva-> lijevom tipkom miša kliknite karticu "Napredno"-> lijevo kliknite gumb "Varijable okruženja …". Dodajte novu korisničku varijablu da pokažem na OpenCV (ili x86 za 32-bitni sustav ili x64 za 64-bitni sustav.) Trenutno sam na 64-bitnom stroju.

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: / Korisnici / Johnny / Anaconda; C: / Korisnici / Johnny / Anaconda / Skripte

Nakon:

F: / Korisnici / Johnny / Anaconda; C: / Korisnici / Johnny / Anaconda / Skripte;%OPENCV_DIR%\ bin

Ovo smo gotovi smo! FFMPEG je spreman za upotrebu!

Korak 4: Testirajte za potvrdu

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?

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

uvoz cv2

ispis cv2._ verzija_

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

Test 2: Možemo li koristiti kodek FFMPEG?

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

datoteka.

To je što

test.py

može izgledati ovako (Napomena: puno zahvaljujući Peteovim i Warrenovim prijedlozima u polju za komentare - zamijenio sam svoj izvorni testni kod s njegovim - sami ga testirajte i javite nam ako ovo bolje funkcionira):

uvoz 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 videozapis. cap.release () out.release ()

Ovaj test je VRLO VAŽAN. Ako želite obraditi video datoteke, morate osigurati da Anaconda / Spyder IDE može koristiti FFMPEG (video kodek). Trebali su mi dani da to uspijem. 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

Cilj

U ovoj sesiji,

  • Vidjet ćemo osnove detekcije lica pomoću Cascade Clasifikatora temeljenih na Haar 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:/Programske datoteke/opencv /cascade_data.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.pravokutnik (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 stvaranje 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 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 s

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

OVDJE koristim svoj vlastiti skup podataka …. Uz pomoć koda koji je dan ispod:

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 ('enter user 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.pravokutnik (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

Izradite funkciju za pripremu seta za obuku

Sada ćemo definirati funkciju

getImagesWithID (put)

koja uzima apsolutni put do baze podataka kao ulazni argument i vraća hrpu od 2 popisa, jedan koji sadrži otkrivena lica, a drugi koji sadrži odgovarajuću oznaku za to lice. Na primjer, ako i -ti indeks na popisu lica predstavlja 5. pojedinca u bazi podataka, tada odgovarajuće i -to mjesto na popisu oznaka ima vrijednost jednaku 5.

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

uvoz os

import numpy as np import cv2 from PIL import Image # Za prepoznavanje lica upotrijebit ćemo LBPH Face Recognizer 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 u sive tonove licaImg = Image.open (imagePath).convert ('L') faceNP = np.array (licaImg, 'uint8') # Dobijte oznaku slike ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Otkrijte lice na slici lica.append (faceNP) IDs.append (ID) cv2.imshow ("Dodavanje lica za treniranje", faceNP) cv2.waitKey (10) vraća np.array (ID -ove), lica ID -ove, lica = getImagesWithID (put) prepoznavač.train (lica, ID -ove) 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:/Program Files/projects/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 videozapisa s kamere 2. usporedite ga sa svojom.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 …… također možete preuzeti zip datoteku ispod veze: Kliknite ovdje za preuzimanje kodova Dakle, u ovoj uputi izvršili smo zadatak otkrivanja lica+prepoznavanja pomoću OpenCV -a …..ako ste ovako instruktivno ….. plzzz pretplatite me se i glasajte za mene …..hvala prijateljima:)

Preporučeni: