Sisällysluettelo:

Kasvontunnistus+tunnistus: 8 vaihetta (kuvien kanssa)
Kasvontunnistus+tunnistus: 8 vaihetta (kuvien kanssa)

Video: Kasvontunnistus+tunnistus: 8 vaihetta (kuvien kanssa)

Video: Kasvontunnistus+tunnistus: 8 vaihetta (kuvien kanssa)
Video: Face ID 101: How to Set Up Facial Recognition on Your iPhone 2024, Joulukuu
Anonim
Image
Image
Kasvontunnistus+tunnistus
Kasvontunnistus+tunnistus

Tämä on yksinkertainen esimerkki kasvojen tunnistamisesta ja tunnistamisesta OpenCV: n avulla kamerasta. HUOMAUTUS: TEIN TÄMÄN PROJEKTIN ANTURIKILPAILUUN JA KÄYTIN KAMERAA ANTURINA SEURAAMIS- JA TUNNISTUSKASVOIHIN. Tavoitteemme Tässä istunnossa 1. Asenna Anaconda 2. Lataa avoin CV -paketti 3. Aseta ympäristömuuttujat 4. Vahvista testi 5 Tee koodi kasvojentunnistukseen 6. Tee koodi tietojoukon luomiseksi 7. Tee koodi tunnistimen kouluttamiseksi 8. Tee koodi kasvojen tunnistamiseksi ja tulos.

Vaihe 1: Asenna Anaconda

Asenna Anaconda
Asenna Anaconda

Anaconda on pohjimmiltaan kauniisti pakattu Python IDE, joka toimitetaan tonneilla hyödyllisiä paketteja, kuten NumPy, Pandas, IPython Notebook jne. Sitä näyttää suositeltavan kaikkialla tiedeyhteisössä. Tarkista Anaconda sen asentamiseksi.

Vaihe 2: Lataa avoin CV -paketti

Lataa avoin CV -paketti
Lataa avoin CV -paketti

Siirry ensin OpenCV -paketin viralliselle OpenCV -sivustolle. Valitse haluamasi versio (2.x tai 3.x). Käytän Python 2.x- ja OpenCV 2.x -käyttöjärjestelmiä - lähinnä siksi, että OpenCV -Python -opetusohjelmat asennetaan/perustuvat näin.

Minun tapauksessani olen purkanut paketin (lähinnä kansion) suoraan F -asemaan. (F: / opencv).

Vaihe 3: Aseta ympäristömuuttujat

Aseta ympäristömuuttujat
Aseta ympäristömuuttujat

Kopioi ja liitä cv2.pyd -tiedosto

Anaconda-sivustopakettien hakemisto (esim. F: / Program Files / Anaconda2 / Lib / site-package minun tapauksessani) sisältää tuodut Python-paketit. Tavoitteenamme on kopioida ja liittää cv2.pyd -tiedosto tähän hakemistoon (jotta voimme käyttää tuonti -cv2 -tiedostoa Python -koodeissamme.)

Kopioi cv2.pyd -tiedosto…

Tästä OpenCV -hakemistosta (alkuosa saattaa olla hieman erilainen koneellasi):

# Python 2.7 ja 64-bittinen kone: F: / opencv / build / python / 2.7 / x64# Python 2.7 ja 32-bittinen kone: F: / opencv / build / python / 2.7 / x84

Tähän Anaconda -hakemistoon (alkuosa saattaa olla hieman erilainen koneellasi):

F: / Ohjelmatiedostot / Anaconda2 / Lib / sivustopaketit

Tämän vaiheen suorittamisen jälkeen voimme nyt käyttää tuonti -cv2 -koodia Python -koodissa. MUTTA, meidän on vielä tehtävä hieman enemmän työtä saadaksemme FFMPEG: n (videokoodekin) toimimaan (jotta voimme käsitellä esimerkiksi videoita.)

Napsauta hiiren kakkospainikkeella "Oma tietokone" (tai "Tämä tietokone" Windows 8.1: ssä)-> napsauta hiiren kakkospainikkeella Ominaisuudet-> napsauta hiiren kakkospainikkeella "Lisäasetukset"-> napsauta hiiren kakkospainikkeella "Ympäristömuuttujat …" -painiketta. Lisää uusi käyttäjämuuttuja osoittamaan OpenCV: tä (joko x86 32-bittiselle järjestelmälle tai x64 64-bittiselle järjestelmälle.) Olen tällä hetkellä 64-bittisellä koneella.

32-bittinen OPENCV_DIRC: / opencv / build / x86 / vc12

64-bittinen OPENCV_DIRC: / opencv / build / x64 / vc12

Liitä %OPENCV_DIR %\ bin käyttäjämuuttujan polkuun.

Esimerkiksi PATH -käyttäjämuuttujani näyttää tältä…

Ennen:

F: / Käyttäjät / Johnny / Anaconda; C: / Käyttäjät / Johnny / Anaconda / Scripts

Jälkeen:

F: / Käyttäjät / Johnny / Anaconda; C: / Käyttäjät / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

Tässä me olemme valmiita! FFMPEG on käyttövalmis!

Vaihe 4: Testaa vahvistaaksesi

Vahvista testi
Vahvista testi
Vahvista testi
Vahvista testi

Meidän on testattava, voimmeko tehdä nämä nyt Anacondassa (Spyder IDE: n kautta):

  • Tuo OpenCV -paketti
  • Käytä FFMPEG -apuohjelmaa (videoiden lukemiseen/kirjoittamiseen/käsittelyyn)

Testi 1: Voimmeko tuoda OpenCV: n?

Varmistaakseen, että Anaconda pystyy nyt tuomaan OpenCV-Python-paketin (nimittäin cv2), ongelma IPython -konsolissa:

tuoda cv2

tulosta cv2._ -versio_

Jos paketti cv2 tuodaan ok ilman virheitä ja cv2 -versio tulostetaan, olemme kaikki hyviä!

Testi 2: Voimmeko käyttää FFMPEG -koodekkia?

Aseta näyte

input_video.mp4

videotiedosto hakemistoon. Haluamme testata, pystymmekö:

  • lue tämä.mp4 -videotiedosto ja
  • kirjoittaa uuden videotiedoston (voi olla.avi tai.mp4 jne.)

Tätä varten meillä on oltava testipython -koodi, jota kutsutaan test.py. Aseta se samaan hakemistoon kuin näyte

input_video.mp4

tiedosto.

Tämä on mitä

test.py

saattaa näyttää tältä (Huomaa: kiitos paljon Pete'n ja Warrenin ehdotuksista kommenttikentässä - olen korvannut alkuperäisen testikoodin hänen omaansa - testaa se itse ja kerro meille, toimiiko tämä paremmin):

tuoda cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = videon lukeminen onnistui. Väärä - videon lukeminen epäonnistui. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = videon kirjoitus onnistui. Väärä - videon kirjoittaminen epäonnistui. cap.release () out.release ()

Tämä testi on TÄRKEÄÄ. Jos haluat käsitellä videotiedostoja, sinun on varmistettava, että Anaconda / Spyder IDE voi käyttää FFMPEG: tä (videokoodekki). Meni päiviä ennen kuin sain sen toimimaan. Mutta toivon, että se vie paljon vähemmän aikaa!:) Huomautus: vielä yksi erittäin tärkeä vinkki Anaconda Spyder IDE: tä käytettäessä. Muista tarkistaa nykyinen työhakemisto (CWD) !!!

Vaihe 5: Tee koodi kasvojentunnistukseen

Tee koodi kasvojentunnistukseen
Tee koodi kasvojentunnistukseen
Tee koodi kasvojentunnistukseen
Tee koodi kasvojentunnistukseen

Päämäärä

Tässä istunnossa

  • Näemme kasvojentunnistuksen perusteet käyttämällä Haar-ominaisuuksiin perustuvia kaskadiluokittimia
  • Laajennamme samaa silmien havaitsemiseen jne

Haar-kaskadin tunnistus OpenCV: ssä

Tässä käsitellään havaitsemista. OpenCV sisältää jo monia esikoulutettuja kasvojen, silmien, hymyn jne. Luokittelijoita. Nämä XML-tiedostot tallennetaan kansioon opencv/data/haarcascades/. Luodaan kasvojen ja silmän tunnistin OpenCV: llä. Ensin meidän on ladattava vaaditut XML -luokittelijat. Lataa sitten syöttökuvamme (tai -videomme) harmaasävytilassa TAI voimme käyttää kameraa (reaaliaikaiseen kasvojentunnistukseen)

tuo numpy np: nä

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Ohjelmatiedostot/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Ohjelmatiedostot/opencv/sources/data/haarcascade.xml ') cap = cv2. VideoCapture (0), kun taas 1: ret, img = cap.read () harmaa = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = face_cascade.detectMultiScale (harmaa, 1,5, 5) kohteelle (x, y, w, h) kasvoissa: cv2. suorakulmio (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = harmaa [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 (kasvot)) +"kasvot" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, jos k == 27: break cap.release () cv2.destroyAllWindows ()

Vaihe 6: Tee koodi tietojoukon luomiseksi

Tee koodi tietojoukon luomiseksi
Tee koodi tietojoukon luomiseksi
Tee koodi tietojoukon luomiseksi
Tee koodi tietojoukon luomiseksi

Teemme kasvojentunnistusta, joten tarvitset joitain kasvokuvia! Voit joko luoda oman tietojoukon tai aloittaa jollakin käytettävissä olevista kasvotietokannoista, https://face-rec.org/databases/ tarjoaa ajantasaisen yleiskatsauksen. Kolme mielenkiintoista tietokantaa ovat (osia kuvauksesta on lainattu osoitteesta

  • AT&T Facedatabase
  • Yalen kasvotietokanta A
  • Yalen laajennettu tietokanta B

TÄSTÄ käytän omaa tietojoukkoani…. Alla olevan koodin avulla:

tuo numpy np: nä

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Ohjelmatiedostot/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user id') sampleN = 0; kun taas 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = face_cascade.detectMultiScale (harmaa, 1,3, 5) (x, y, w, h) kasvoissa: näyteN = näyte N+1; cv2.imwrite ("F:/Ohjelmatiedostot/projektit/face_rec/kasvotData/Käyttäjä."+str (id)+"."+str (näyteN)+".jpg", harmaa [y: y+h, x: x+w]) cv2. suorakulmio (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) jos näyteN> 20: break cap.release () cv2.destroyAllWindows ()

Vaihe 7: Tee koodi, joka opettaa tunnistimen

Tee koodi, joka kouluttaa tunnistimen
Tee koodi, joka kouluttaa tunnistimen

Luo toiminto harjoitussarjan valmistamiseksi

Nyt määritellään funktio

getImagesWithID (polku)

joka ottaa absoluuttisen polun kuvatietokantaan syöttöargumenttina ja palauttaa tuple of 2 listan, joista toinen sisältää havaitut kasvot ja toinen sisältää vastaavan tunnisteen kyseiselle kasvolle. Jos esimerkiksi kasvoluettelon i: s indeksi edustaa tietokannan viidennen yksilöä, vastaavan tarran luettelon ensimmäisen sijan arvo on 5.

Muunna nyt tietojoukon kasvot (joka luodaan vaiheessa 6).yml -tiedostoksi alla annetun koodin avulla:

tuonti

tuo numpy np: nä tuoda cv2 PIL -tuontikuvasta # Kasvontunnistusta varten käytämme LBPH -kasvojentunnistimen tunnistinta = cv2.createLBPHFaceRecognizer (); path = "F:/Ohjelmatiedostot/projektit/face_rec/kasvotData" def getImagesWithID (polku): imagePaths = [os.path.join (polku, f) f: lle os.listdir (polku)] # print image_path #getImagesWithID (path) kasvot = IDs = imagePathille imagePaths: # Lue kuva ja muunna se harmaasävyisiksi kasvoiksiImg = Image.open (imagePath).convert ('L') faceNP = np.array (kasvotImg, 'uint8') # Hanki kuvan tunniste ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Tunnista kuvassa olevat kasvot. Liitä (faceNP) ID.append (ID) cv2.imshow ("Kasvojen lisääminen transsiin", faceNP) cv2.waitKey (10) palauta np.array (ID), kasvotunnukset, kasvot = getImagesWithID (polku) tunnistin.juna (kasvot, tunnukset) tunnistin.save ("F:/Ohjelmatiedostot/projektit/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

käyttämällä tätä koodia kaikki kasvotietojoukot muunnetaan yhdeksi.yml -tiedostoksi…..polun sijainti on ("F:/Ohjelmatiedostot/projektit/face_rec/faceREC/trainingdata.yml")

Vaihe 8: Tee koodi kasvojen ja tuloksen tunnistamiseksi

Guyzz, tämä on viimeinen vaihe, jossa voimme luoda koodin, joka tunnistaa kasvot verkkokamerasi avulla. TÄMÄ VAIHE ON KAKSI TOIMINTAA, JOTKA SUORITETAAN…. 1. videon kaappaaminen kamerasta 2. vertaa sitä.yml -tiedostoosi

tuo numpy nimellä npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRec; rec.load ("F:/Ohjelmatiedostot/projektit/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) ja 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = face_cascade.detectMultiScale (harmaa, 1,5, 5) (x, y, w, h) kasvoissa: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (harmaa [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', jos id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), fontti, 255)) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

ja lopulta tulos tulee silmiesi eteen ……. Voit myös ladata zip -tiedoston linkin alapuolelta: Lataa koodit napsauttamalla tätä. kuten tämä opettavainen….. plzzz tilaa minut ja äänestä minua….. kiitos ystävät:)

Suositeltava: