Sisällysluettelo:

Reaaliaikainen kasvojentunnistus: kokonaisvaltainen projekti: 8 vaihetta (kuvilla)
Reaaliaikainen kasvojentunnistus: kokonaisvaltainen projekti: 8 vaihetta (kuvilla)

Video: Reaaliaikainen kasvojentunnistus: kokonaisvaltainen projekti: 8 vaihetta (kuvilla)

Video: Reaaliaikainen kasvojentunnistus: kokonaisvaltainen projekti: 8 vaihetta (kuvilla)
Video: 10 tieteen läpimurtoa vuonna 2022 🪐 2024, Heinäkuu
Anonim
Reaaliaikainen kasvojentunnistus: kokonaisvaltainen projekti
Reaaliaikainen kasvojentunnistus: kokonaisvaltainen projekti

Viimeisessä OpenCV: tä tutkivassa opetusohjelmassamme opimme AUTOMATIC VISION OBJECT TRACKING. Nyt käytämme PiCam-kameraamme kasvojen tunnistamiseen reaaliajassa, kuten alla näet:

Kuva
Kuva

Tämä projekti tehtiin tämän upean "Open Source Computer Vision Library": n, OpenCV: n avulla. Tässä opetusohjelmassa keskitymme Raspberry Pi: hen (eli Raspbian OS: ksi) ja Pythoniin, mutta testasin koodin myös Macillani ja se toimii myös hyvin. OpenCV on suunniteltu laskennallista tehokkuutta varten ja keskittyy vahvasti reaaliaikaisiin sovelluksiin. Se on siis täydellinen reaaliaikaiseen kasvojentunnistukseen kameran avulla.

Jotta voimme luoda kokonaisen kasvojentunnistusprojektin, meidän on työskenneltävä kolmen hyvin erillisen vaiheen parissa:

  1. Kasvontunnistus ja tiedonkeruu
  2. Harjoittele tunnistinta
  3. Kasvojen tunnistus

Alla oleva lohkokaavio jatkaa näitä vaiheita:

Kuva
Kuva

Vaihe 1: BoM - Bill of Material

Pääosat:

  1. Raspberry Pi V3 - 32,00 dollaria
  2. 5 megapikselin 1080p -anturi OV5647 -minikameran videomoduuli - 13,00 dollaria

Vaihe 2: OpenCV 3 -paketin asennus

OpenCV 3 -paketin asentaminen
OpenCV 3 -paketin asentaminen

Käytän Raspberry Pi V3: ta, joka on päivitetty Raspbianin (Stretch) viimeiseen versioon, joten paras tapa asentaa OpenCV on seurata Adrian Rosebrockin kehittämää erinomaista opetusohjelmaa: Raspbian Stretch: Asenna OpenCV 3 + Python Raspberry Pi -laitteeseesi.

Kokeilin useita erilaisia oppaita OpenCV: n asentamiseen Pi: hen. Adrianin opetusohjelma on paras. Kehotan sinua tekemään samoin noudattamalla hänen ohjeita askel askeleelta.

Kun olet suorittanut Adrianin opetusohjelman, sinulla pitäisi olla OpenCV -virtuaalinen ympäristö valmiina suorittamaan kokeitamme Pi -laitteellasi.

Mennään virtuaaliseen ympäristöön ja varmistetaan, että OpenCV 3 on asennettu oikein.

Adrian suosittelee suorittamaan komennon "lähde" aina, kun avaat uuden päätelaitteen varmistaaksesi, että järjestelmämuuttujat on määritetty oikein.

lähde ~/.profiili

Seuraavaksi siirrytään virtuaaliseen ympäristöön:

workon cv

Jos näet kehotteen edeltävän tekstin (cv), olet cv -virtuaalisessa ympäristössä:

(cv) pi@vadelma: ~ $Adrian kiinnittää huomion siihen, että cv Python -virtuaalinen ympäristö on täysin riippumaton ja erotettu Raspbian Stretchin lataukseen sisältyvästä oletusversiosta Pythonista. Joten kaikki Python-paketit maailmanlaajuisessa sivustopakettien hakemistossa eivät ole cv-virtuaalisen ympäristön käytettävissä. Samoin kaikki cv-sivustopaketteihin asennetut Python-paketit eivät ole käytettävissä Pythonin maailmanlaajuiselle asennukselle

Kirjoita nyt Python -tulkkiisi:

python

ja vahvista, että käytössäsi on versio 3.5 (tai uudempi)

Tuo tulkin sisälle (">>>" tulee näkyviin) tuo OpenCV -kirjasto:

tuoda cv2

Jos virheilmoituksia ei näy, OpenCV on asennettu oikein PYTHON VIRTUAL YMPÄRISTÖÖN.

Voit myös tarkistaa asennetun OpenCV -version:

cv2._ -versio_

3.3.0 pitäisi ilmestyä (tai parempi versio, joka voidaan julkaista tulevaisuudessa). Yllä oleva terminaalin tulostusnäyttö näyttää edelliset vaiheet.

Vaihe 3: Kameran testaaminen

Kameran testaaminen
Kameran testaaminen

Kun OpenCV on asennettu RPi -laitteeseesi, testaamme sen varmistamiseksi, että kamera toimii oikein.

Oletan, että sinulla on PiCam jo asennettu Raspberry Pi -laitteeseesi.

Syötä alla oleva Python -koodi IDE -laitteeseesi:

tuo numpy np: nä

tuoda cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Leveys cap.set (4, 480) # set Korkeus taas (True): ret, frame = cap.read () frame = cv2. käännä (kehys, -1) # Käännä kamera pystysuunnassa harmaa = cv2.cvtColor (kehys, cv2. COLOR_BGR2GRAY) cv2.imshow ('kehys', kehys) cv2.imshow ('harmaa', harmaa) k = cv2.waitKey (30) & 0xff, jos k == 27: # sulje tauko painamalla ESC -näppäintä. Release () cv2.destroyAllWindows ()

Yllä oleva koodi kaappaa PiCamisi luoman videovirran näyttäen sekä BGR -värin että harmaan tilan.

Huomaa, että pyöritin kameraani pystysuunnassa kokoonpanotavan vuoksi. Jos se ei ole sinun tapauksesi, kommentoi tai poista "käännä" komentorivi.

Voit vaihtoehtoisesti ladata koodin GitHubista: simpleCamTest.py

Suorita suorittamalla komento:

python simpleCamTest.py

Lopeta ohjelma painamalla näppäimistön näppäintä [ESC].

Napsauta hiirtä videoikkunassa, ennen kuin painat [ESC]

Yllä oleva kuva näyttää tuloksen.

Jotkut valmistajat löysivät ongelmia yrittäessään avata kameraa (virheilmoitus "Väite epäonnistui"). Näin voi tapahtua, jos kameraa ei otettu käyttöön OpenCv -asennuksen aikana, joten kameran ohjaimet eivät asentuneet oikein. Korjaa komento seuraavasti:

sudo modprobe bcm2835-v4l2

Voit myös lisätä bcm2835-v4l2 /etc /modules-tiedoston viimeiselle riville, jotta ohjain latautuu käynnistyksen yhteydessä.

Jos haluat tietää enemmän OpenCV: stä, voit seurata opetusohjelmaa: loading -video-python-opencv-tutorial

Vaihe 4: Kasvontunnistus

Kasvojentunnistus
Kasvojentunnistus
Kasvojentunnistus
Kasvojentunnistus

Kasvojentunnistuksen perustehtävä on tietysti "Kasvontunnistus". Ennen kaikkea sinun on "kaapattava" kasvot (vaihe 1), jotta ne voidaan tunnistaa, verrattuna tulevaan otettuihin uusiin kasvoihin (vaihe 3).

Yleisin tapa tunnistaa kasvot (tai esineet) on käyttää "Haar Cascade -luokitusta"

Objektien tunnistus käyttämällä Haar-ominaisuuspohjaisia kaskadiluokittimia on tehokas kohteen havaitsemismenetelmä, jonka Paul Viola ja Michael Jones ehdottivat vuonna 2001 julkaisussaan "Rapid Object Detection using Boosted Cascade of Simple Features". Se on koneoppimiseen perustuva lähestymistapa, jossa kaskaditoiminto on koulutettu monista positiivisista ja negatiivisista kuvista. Sitä käytetään sitten muiden kuvien esineiden havaitsemiseen.

Täällä työskentelemme kasvojentunnistuksen kanssa. Aluksi algoritmi tarvitsee paljon positiivisia kuvia (kasvokuvia) ja negatiivisia kuvia (kuvia ilman kasvoja) luokittelijan kouluttamiseksi. Sitten meidän on poimittava siitä ominaisuuksia. Hyvä uutinen on, että OpenCV: n mukana tulee kouluttaja ja ilmaisin. Jos haluat kouluttaa oman luokittimesi mille tahansa esineelle, kuten autolle, lentokoneelle jne., Voit luoda OpenCV: n avulla sellaisen. Sen kaikki yksityiskohdat ovat täällä: Cascade Classifier Training.

Jos et halua luoda omaa luokittelijaasi, OpenCV sisältää jo monia esikoulutettuja kasvojen, silmien, hymyn jne. Luokittelijoita. Nämä XML-tiedostot voidaan ladata haarcascades-hakemistosta.

Teoria riittää, luodaan kasvotunnistin OpenCV: llä!

Lataa tiedosto: faceDetection.py GitHubista.

tuo numpy np: nä

tuoda cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while True: ret, img = cap.read () img = cv2.flip (img, -1) grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = faceCascade.detectMultiScale (harmaa, scaleFactor = 1,2, minNaapurit = 5, minSize = (20, 20)) (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] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff, jos k == 27: # sulje tauko painamalla ESC -näppäintä. Release () cv2.destroyAllWindows ()

Usko tai älä, mutta yllä olevat muutamat koodirivit ovat kaikki mitä tarvitset kasvojen tunnistamiseen Pythonin ja OpenCV: n avulla.

Kun vertaat kameran viimeiseen testaukseen käytettyyn koodiin, huomaat, että siihen on lisätty muutamia osia. Huomaa alla oleva rivi:

faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml')

Tämä on rivi, joka lataa "luokittelijan" (sen on oltava hakemistossa nimeltä "Cascades/", projektihakemistosi alla).

Sitten asetamme kameramme ja lataamme silmukan sisään syöttövideomme harmaasävytilassa (sama kuin ennen).

Nyt meidän on kutsuttava luokittelutoimintomme ja välitettävä sille joitakin erittäin tärkeitä parametreja, kuten skaalaustekijä, naapureiden lukumäärä ja havaittujen kasvojen vähimmäiskoko.

kasvot = faceCascade.detectMultiScale (harmaa, asteikko Tekijä = 1,2, min Naapurit = 5, minKoko = (20, 20))

Missä,

  • harmaa on syötetty harmaasävykuva.
  • scaleFactor on parametri, joka määrittää, kuinka paljon kuvan kokoa pienennetään kussakin kuva -asteikossa. Sitä käytetään mittakaavan pyramidin luomiseen.
  • minNeighbors on parametri, joka määrittää, kuinka monta naapuria kullakin ehdokas suorakulmiolla pitäisi olla, jotta se säilyy. Suurempi luku antaa vähemmän vääriä positiivisia.
  • minSize on pienin suorakulmion koko, jota pidetään kasvona.

Toiminto tunnistaa kuvasta kasvot. Seuraavaksi meidän on "merkittävä" kasvot kuvaan käyttämällä esimerkiksi sinistä suorakulmiota. Tämä tehdään tällä koodin osalla:

(x, y, w, h) kasvoille:

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]

Jos kasvot löytyvät, se palauttaa havaittujen kasvojen sijainnit suorakulmioina, joissa on vasen yläkulma (x, y) ja jonka leveys on "w" ja korkeus = "h" ==> (x, y, w, h). Katso yllä oleva kuva.

Kun olemme saaneet nämä sijainnit, voimme luoda "ROI" (piirretty suorakulmio) kasvoille ja esittää tuloksen imshow () -funktiolla.

Suorita yllä oleva python -skripti python -ympäristössäsi Rpi -terminaalin avulla:

python faceDetection.py

Lopputulos:

Kuva
Kuva

Voit myös sisällyttää luokittelijoita "silmien havaitsemiseen" tai jopa "hymyn havaitsemiseen". Näissä tapauksissa sisällytät luokittelutoiminnon ja suorakulmion piirtämisen kasvosilmukan sisään, koska ei olisi järkeä havaita kasvojen ulkopuolista silmää tai hymyä.

Huomaa, että kun Pi: llä on useita luokittelijoita samalla koodilla, prosessi hidastuu, kun tämä havaintomenetelmä (HaarCascades) käyttää paljon laskentatehoa. Työpöydällä sen käyttäminen on helpompaa.

GitHubistani löydät muita esimerkkejä:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

Ja yllä olevassa kuvassa näet tuloksen.

Voit myös seurata alla olevaa opetusohjelmaa ymmärtääksesi kasvojentunnistuksen paremmin:

Haar Cascade Object Detection Kasvot ja silmät OpenCV Python -opetusohjelma

Vaihe 5: Tietojen kerääminen

Tiedonkeruu
Tiedonkeruu
Tiedonkeruu
Tiedonkeruu

Ensinnäkin minun on kiitettävä Ramiz Rajaa hänen hienosta työstään kasvojen tunnistamisen alalla valokuvissa:

KASVON TUNNISTUS OPENCV: N JA PYTHONIN KANSSA: ALKUPERÄISEN OPAS

ja myös Anirban Kar, joka kehitti erittäin kattavan opetusohjelman videon avulla:

KASVOTUNNISTUS - 3 osaa

Suosittelen todella tutustumaan molempiin opetusohjelmiin.

Sanotaan näin, että aloitetaan projektimme ensimmäinen vaihe. Tässä tehtävämme alkaa viimeisestä vaiheesta (kasvojentunnistus), luomme yksinkertaisesti tietojoukon, johon tallennamme jokaiselle tunnukselle harmaiden valokuvien ryhmän kasvojen tunnistamiseen käytetyn osan kanssa.

Luo ensin hakemisto, jossa kehität projektiasi, esimerkiksi FacialRecognitionProject:

mkdir FacialRecognitionProject

Tässä hakemistossa meidän projektillemme luomiemme 3 python -komentosarjan lisäksi meidän on täytynyt tallentaa siihen kasvojen luokittelija. Voit ladata sen GitHubista: haarcascade_frontalface_default.xml

Luo seuraavaksi alihakemisto, johon tallennamme kasvonäytteemme ja annamme sille nimen "dataset":

mkdir -tietojoukko

Ja lataa koodi GitHubista: 01_face_dataset.py

tuoda cv2

import os cam = cv2. VideoCapture (0) cam.set (3, 640) # aseta videoleveys cam.set (4, 480) # aseta videon korkeus face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Jokaiselle henkilölle, syötä yksi numeerinen kasvotunnus face_id = input ('\ n anna käyttäjätunnus lopuksi paina ==>') print ("\ n [INFO] Kasvojen kaappauksen alustaminen. Katso kameraa ja odota…") # Alusta yksittäinen näytteenotto = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # käännä videokuva pystysuunnassa harmaa = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = face_detector.detectMultiScale (harmaa, 1.3, 5) (x, y, w, h) kasvoissa: cv2. suorakulmio (img, (x, y), (x+w, y+h), (255, 0, 0), 2)) count + = 1 # Tallenna otettu kuva datasets -kansioon cv2.imwrite ("dataset/User." + str (face_id) + '.' + str (count) + ".jpg", harmaa [y: y + h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Paina 'ESC' poistuaksesi videosta, jos k == 27: break elif count> = 30: # Ota 30 kasvonäytettä ja lopeta videotauko # Tee ab it of cleanup print ("\ n [INFO] Ohjelmasta poistaminen ja siivoustiedot") cam.release () cv2.destroyAllWindows ()

Koodi on hyvin samanlainen kuin koodi, jonka näimme kasvojentunnistuksessa. Lisäsimme "syöttökomennon" käyttäjätunnuksen tallentamiseen, jonka pitäisi olla kokonaisluku (1, 2, 3 jne.)

face_id = input ('\ n anna käyttäjätunnus lopuksi paina ==>')

Ja jokaisen kaapatun kehyksen osalta meidän on tallennettava se tiedostona "tietojoukko" -hakemistoon:

cv2.imwrite ("tietojoukko/käyttäjä." + str (face_id) + '.' + str (count) + ".jpg", harmaa [y: y + h, x: x + w])

Huomaa, että yllä olevan tiedoston tallentamiseksi sinun on tuotava kirjasto "os". Jokaisen tiedoston nimi noudattaa rakennetta:

User.face_id.count.jpg

Esimerkiksi käyttäjälle, jolla on face_id = 1, tietojoukon/ hakemiston neljäs mallitiedosto on seuraavanlainen:

Käyttäjä.1.4.jpg

kuten yllä olevassa Pi -valokuvastani näkyy. Koodillani otan 30 näytettä jokaisesta tunnuksesta. Voit muuttaa sen viimeisellä "elifillä". Näytteiden määrää käytetään katkaisemaan silmukka, josta kasvonäytteet otetaan.

Suorita Python -komentosarja ja kaappaa muutama tunnus. Sinun on suoritettava komentosarja aina, kun haluat koota uuden käyttäjän (tai vaihtaa valokuvia jo olemassa oleviin).

Vaihe 6: Valmentaja

Kouluttaja
Kouluttaja

Tässä toisessa vaiheessa meidän on otettava kaikki käyttäjätiedot tietojoukostamme ja "koulutettava" OpenCV Recognizer. Tämä tehdään suoraan tietyn OpenCV -toiminnon avulla. Tuloksena on.yml -tiedosto, joka tallennetaan "trainer/" -hakemistoon.

Aloitetaan siis alihakemiston luominen, johon tallennamme koulutetut tiedot:

mkdir kouluttaja

Lataa GitHubistani toinen python -komentosarja: 02_face_training.py

tuoda cv2

tuoda numpy np: nä PIL -tuonnista Kuvan tuonti os # Polku kasvokuvan tietokannan polulle = 'tietojoukko' tunnistin = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); # -toiminto kuvien ja tarratietojen saamiseksi: PIL_img = Image.open (imagePath).convert ('L') # muunna se harmaasävyiseksi img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. jakaa (".") [1]) kasvot = ilmaisin.detectMultiScale (img_numpy) (x, y, w, h) kasvoille: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Harjoittele kasvoja. Se kestää muutaman sekunnin. Odota…") kasvot, ids = getImagesAndLabels (polku) tunnistin.train (kasvot, np.array (ids)) # Tallenna malli trainer/trainer.yml -tunnistimeen.write ('trainer/trainer.yml') # tunnistin.save () toimi Macissa, mutta ei Pi -laitteessa # Tulosta koulutettujen kasvojen määrä ja lopeta ohjelman tulostus ("\ n [INFO] {0} kasvot koulutettu. Ohjelmasta poistuminen.format (len (np.unique (ids)))))

Varmista, onko PIL -kirjasto asennettu Rpi -laitteeseesi. Jos ei, suorita seuraava komento terminaalissa:

pip asenna tyyny

Käytämme tunnistimena LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) -kasvontunnistinta, joka sisältyy OpenCV -pakettiin. Teemme tämän seuraavalla rivillä:

tunnistin = cv2.face. LBPHFaceRecognizer_create ()

Funktio "getImagesAndLabels (polku)" ottaa kaikki kuvat hakemistosta: "dataset/" ja palauttaa kaksi taulukkoa: "Ids" ja "kasvot". Kun nämä taulukot syötetään, "koulutat tunnistimemme":

tunnistaja.juna (kasvot, tunnukset)

Tämän seurauksena tiedosto nimeltä "trainer.yml" tallennetaan aiemmin luomaamme kouluttajahakemistoon.

Se siitä! Sisällysin viimeisen tulostuslausuman, jossa näytin vahvistusta varten, kouluttamiemme Käyttäjien kasvojen lukumäärän.

Joka kerta, kun suoritat vaiheen 1, myös vaihe 2 on suoritettava

Vaihe 7: Tunnistin

Tunnistin
Tunnistin
Tunnistin
Tunnistin

Nyt olemme saavuttaneet projektimme viimeisen vaiheen. Täällä otamme tuoreet kasvot kamerallemme ja jos tämän henkilön kasvot on kuvattu ja koulutettu aiemmin, tunnistimemme tekee "ennusteen", joka palauttaa tunnuksensa ja indeksin, joka osoittaa, kuinka luottavainen tunnistin on tässä ottelussa.

Lataamme kolmannen vaiheen python -komentosarjan GitHubista: 03_face_recognition.py.

tuoda cv2

tuoda numpy np: nä tuoda os -tunnistin = cv2.face. LBPHFaceRecognizer_create () tunnistaja.luku ('trainer/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath); font = cv2. FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # tunnuksiin liittyvät nimet: example ==> Marcelo: id = 1, etc names = ['Ei mitään', 'Marcelo', 'Paula', 'Ilza', 'Z ',' W '] # Alusta ja aloita reaaliaikainen videokuvaus cam = cv2. VideoCapture (0) cam.set (3, 640) # aseta video leveä cam.set (4, 480) # aseta videon korkeus # Määritä minimi ikkunan koko tunnistetaan kasvona minW = 0,1*cam.get (3) minH = 0,1*cam.get (4) kun taas True: ret, img = cam.read () img = cv2.flip (img, -1) # Käännä pystysuunnassa harmaa = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) kasvot = faceCascade.detectMultiScale (harmaa, scaleFactor = 1,2, minNeighbors = 5, minSize = (int (minW), int (minH)),) (x, y, w, h) kasvoissa: cv2.suorakulmio (img, (x, y), (x+w, y+h), (0, 255, 0), 2) id, varmuus = tunnistin.predict (harmaa [y: y+h, x: x+w]) # Tarkista onko luottamus pienempi 100 ==> "0" vastaa täydellisesti, jos (luottamus <100): id = names [id] varmuus = "{0}% ".format (pyöreä (100 - luottamus)) else: id =" unknown "trust =" {0}%". format (round (100 - conf idence)) cv2.putText (img, str (id), (x+5, y-5), fontti, 1, (255, 255, 255), 2) cv2.putText (img, str (luottamus), (x+5, y+h-5), fontti, 1, (255, 255, 0), 1) cv2.imshow ('kamera', img) k = cv2.waitKey (10) & 0xff # Paina 'ESC' videosta poistumiseen, jos k == 27: break # Tee vähän puhdistustulostusta ("\ n [INFO] Poistutaan ohjelmasta ja puhdistustöistä") cam.release () cv2.destroyAllWindows ()

Lisäämme tähän uuden taulukon, joten näytämme "nimet" numeroitujen tunnusten sijaan:

names = ['Ei mitään', 'Marcelo', 'Paula', 'Ilza', 'Z', 'W']

Joten esimerkiksi: Marcelo tekee käyttäjän, jonka tunnus on = 1; Paula: id = 2 jne.

Seuraavaksi tunnistamme kasvot, samoin kuin ennen haasCascade -luokittelijan kanssa. Kun meillä on havaitut kasvot, voimme kutsua yllä olevan koodin tärkeimmän funktion:

tunnus, luottamus = tunnistin. ennustus (harmaa osa kasvoista)

Tunnistaja.predict () ottaa parametriksi analysoitavan kasvojen osan ja palauttaa todennäköisen omistajansa, ilmoittaen sen tunnuksen ja kuinka paljon luottamusta tunnistin on tämän ottelun suhteen.

Huomaa, että luottamusindeksi palauttaa "nolla", jos sitä pidetään täydellisenä osumana

Ja lopuksi, jos tunnistin voisi ennustaa kasvot, laitamme kuvan päälle tekstin, jolla on todennäköinen tunnus ja kuinka suuri on "todennäköisyys" prosentteina siitä, että ottelu on oikea ("todennäköisyys" = 100 - luottamusindeksi). Jos ei, kasvoille laitetaan "tuntematon" -merkki.

Alla gif, jossa tulos:

Kuva
Kuva

Yllä olevassa kuvassa näytän joitain tämän projektin kanssa tehtyjä testejä, joissa olen myös käyttänyt valokuvia varmistaakseni, toimiiko tunnistin.

Vaihe 8: Johtopäätös

Johtopäätös
Johtopäätös

Kuten aina, toivon, että tämä projekti voi auttaa muita löytämään tiensä elektroniikan jännittävään maailmaan!

Lisätietoja ja lopullisen koodin löydät GitHub-varastostani: OpenCV-Face-Recognition

Lisää projekteja löydät blogistani: MJRoBot.org

Alla välähdys tulevasta opetusohjelmasta, jossa tutkimme "automaattista kasvojentunnistusta ja muita kasvojentunnistusmenetelmiä":

Kuva
Kuva

Terveisiä etelästä maailmasta!

Nähdään seuraavassa ohjeessani!

Kiitos, Marcelo

Suositeltava: