Računalo s jednom pločom

Kako izraditi projekt prepoznavanja lica Raspberry Pi

Kako izraditi projekt prepoznavanja lica Raspberry Pi

Raspberry Pi je jeftino mini računalo koje je većini ljudi, uključujući studente i hobiste, znatno olakšalo računanje i programiranje. Ovo mini računalo može učiniti sve što može stolno računalo, od pregledavanja interneta do izrade uzbudljivih projekata i programa. A jedan od ovih nevjerojatnih projekata je izrada prepoznavanja lica Raspberry Pi. Iako ovaj projekt može biti jako zanimljiv, nije ga baš lako izraditi. Stoga bih vam preporučio da članak slijedite korak po korak.

Prepoznavanje lica Raspberry Pi


Izrada programa za prepoznavanje lica možda je nekada bila vrlo teška i napredna stvar. Ali s Raspberry Pi-om ništa nije preteško! U ovom sam članku koristio Open Source Computer Vision Library (OpenCV) za izradu projekta.

Ovo je spremište dizajnirano za rad s računalnom učinkovitošću i aplikacijama u stvarnom vremenu. Stoga je idealan za naš program prepoznavanja lica u stvarnom vremenu. Ovaj članak vodit će vas korak po korak kroz cijeli projekt. Dakle, držite se do kraja da imate svoje prepoznavanje lica Raspberry Pi!

Zahtjevi


Za izradu sustava za prepoznavanje lica Raspberry Pi trebat će vam sljedeće stvari:

  1. Raspberry Pi V4
  2. Noir kamera
  3. OpenCV

Raspberry Pi veze


Obavezno stvorite sljedeće veze prije početka kodiranja:

  1. Uspostavite veze između Raspberry Pi i vrpca kabela s zaslona
  2. Pričvrstite SDA na SDA pin vašeg Pi
  3. Stavite SCL s zaslona na SCL iglu
  4. Pričvrstite vrpčasti kabel kamere na Raspberry Pi
  5. Stavite GND s zaslona u Pi GND
  6. Spojite Raspberry Pi 5V i 5V zaslona

Korak 1: Instalirajte OpenCV na Raspberry Pi


Prvi korak je instaliranje OpenCV-a na vaš Pi uređaj. Da biste to učinili, pokrenite Raspberry Pi i otvorite SSH vezu. Da biste uključili sav raspoloživi prostor na micro-SD kartici, proširite svoj datotečni sustav.

$ sudo raspi-config

Zatim na izborniku odaberite "Napredne mogućnosti", a zatim "Proširi datotečni sustav":

Nakon toga pritisnite " gumb i ponovno pokrenite Raspberry Pi.

$ sudo ponovno pokretanje

Korak 2: Potvrdite instalaciju OpenCV-a


Nakon što završite s ponovnim pokretanjem, na vašem Pi trebao bi biti spremno virtualno okruženje OpenCV. Sada biste trebali potvrditi je li OpenCV ispravno instaliran u vaš Pi. Pokrenite naredbu "izvor" svaki put kada otvorite novi terminal tako da su sistemske varijable ispravno postavljene.

izvor ~ /.profil

Sada unesite svoje virtualno okruženje:

workon cv

(Cv) tekst znači da ste u cv virtualnom okruženju.

(cv) pi @ malina: ~ $

Da biste unijeli svoj Python tumač:

piton

Vidjet ćete da se u tumaču pojavljuje ">>>". Da biste uvezli OpenCV biblioteku:

uvoz cv2

Ako nema poruka o pogrešci, možete biti sigurni da je OpenCV pravilno instaliran.

Korak 3: Preuzmite OpenCV


Sada preuzmite svoj instalirani OpenCV. Morat ćete preuzeti i OpenCV i OpenCV doprinos. Doprinos dolazi s modulima i funkcijama koji će vam trebati u ovom eksperimentu.

$ cd ~ $ wget -O opencv.zip https: // github.com / opencv / opencv / archive / 4.0.0.zip $ wget -O opencv_contrib.zip https: // github.com / opencv / opencv_contrib / archive / 4.0.0.zip

Sada raspakirajte arhive:

$ raspakirajte opencv.zip $ raspakirajte opencv_contrib.zip

Korak 4: Instalirajte ovisnosti


Sada instalirajte potrebne ovisnosti o OpenCV-u na vaš Raspberry Pi kako bi ispravno radio:

$ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get install build-bitno cmake pkg-config $ sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng-dev $ sudo apt-get install libavcodec -dev libavformat-dev libswscale-dev libv4l-dev $ sudo apt-get install libxvidcore-dev libx264-dev $ sudo apt-get install libgtk2.0-dev libgtk-3-dev $ sudo apt-get install libfontconfig1-dev libcairo2-dev $ sudo apt-get install libgdk-pixbuf2.0-dev libpango1.0-dev $ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103 $ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 $ sudo apt-get install libatlas-base-sudo apt gfortran- dobiti instalaciju python2.7-dev python3-dev $ sudo apt-get instalirati python3-pil.imagetk

Korak 5: Instalirajte pip


U ovom koraku morat ćete instalirati upravitelj paketa za python pod nazivom "pip".

$ wget https: // bootstrap.pypa.io / get-pip.py $ sudo python3 get-pip.py

Korak 6: instalirajte Numpy


Nakon toga instalirajte python biblioteku nazvanu "Numpy".

$ Pip3 instaliraj numpy

Korak 7: Testirajte kameru


Sad kad ste instalirali sve potrebne stvari, uključujući OpenCV, vrijeme je da provjerite funkcionira li pravilno fotoaparat. Već biste trebali instalirati Picam na svom Raspberry Pi. Unesite sljedeći kôd u svoj Python IDE:

uvoz numpy kao np uvoz cv2 cap = cv2.Ograničenje za VideoCapture (0).set (3,640) # set Ograničenje širine.set (4,480) # set Height while (True): ret, frame = cap.read () okvir = cv2.flip (frame, -1) # Okreni kameru okomito sivo = cv2.cvtColor (okvir, cv2.COLOR_BGR2GREY) cv2.imshow ('okvir', okvir) cv2.imshow ('sivo', sivo) k = cv2.waitKey (30) & 0xff ako je k == 27: # pritisnite 'ESC' za napuštanje prekida slova.puštanje () cv2.uništitiAllWindows ()

Ovaj kôd djeluje tako što snima video stream koji je generirao vaš PiCam koji prikazuje i sivi način i BGR način boje. Zatim izvedite kod slijedećom naredbom:

python simpleCamTest.py

Sada pritisnite tipku [ESC] da biste završili program. Obavezno kliknite video prozor prije nego što ga završite. Sada biste trebali vidjeti kako fotoaparat pravilno radi i prikazuje rezultate. Ako vaša kamera prikazuje poruke pogreške "Utvrđivanje nije uspjelo", upotrijebite sljedeću naredbu da to popravite:

sudo modprobe bcm2835-v4l2

Korak 8: Otkrivanje lica


Trebali biste znati da je prvi korak dovršetka našeg projekta prepoznavanja lica učiniti PiCam snimanjem lica. Sigurno mora prvo otkriti lice kako bi ga prepoznalo u budućnosti.

Algoritam za otkrivanje lica zahtijeva slike s licem, kao i bez lica, kako bi obučio klasifikator i spasio strukture od njih. Srećom, OpenCV koji ste prethodno preuzeli dolazi s detektorom i trenažerom. Također, već ima neke unaprijed obučene klasifikatore poput lica, očiju, ruku itd. Da biste stvorili detektor lica s OpenCV-om, upotrijebite sljedeće kodove:

uvoz numpy kao np uvoz cv2 faceCascade = cv2.CascadeClassifier ('Cascades / haarcascade_frontalface_default.xml ') cap = cv2.Ograničenje za VideoCapture (0).set (3,640) # set Ograničenje širine.set (4,480) # set Height while True: ret, img = cap.read () img = cv2.flip (img, -1) siva = cv2.cvtColor (img, cv2.COLOR_BGR2GREY) lica = faceCascade.detectMultiScale (sivo, faktor razmjere = 1.2, minSusjedi = 5, minVeličina = (20, 20)) za (x, y, w, h) u licima: cv2.pravokutnik (img, (x, y), (x + w, y + h), (255,0,0), 2) roi_gray = sivi [y: y + h, x: x + w] roi_color = img [ y: y + h, x: x + w] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff ako je k == 27: # pritisnite 'ESC' za napuštanje prekida slova.puštanje () cv2.uništitiAllWindows ()

Sada ćete morati pozvati funkciju klasifikatora s nekim faktorima skale, parametrima i minimalnom veličinom lica koju će otkriti.

lica = faceCascade.detectMultiScale (sivo, faktor razmjere = 1.2, minSusjedi = 5, minVeličina = (20, 20))

Ovaj kod djeluje otkrivanjem lica na slici. Sada ćete možda htjeti označiti lica koristeći oblik kao pravokutnik. Upotrijebite sljedeći kod:

za (x, y, w, h) u licima: cv2.pravokutnik (img, (x, y), (x + w, y + h), (255,0,0), 2) roi_gray = sivi [y: y + h, x: x + w] roi_color = img [ y: y + h, x: x + w]

Dakle, ovako to funkcionira:

Ako klasifikator pronađe bilo koja lica na slici, prikazuje položaje lica u obliku pravokutnika kako je naređeno, a koristi "h" kao visinu i "w" kao širinu i lijeve kutove gore (x, y). To prilično sažima naš pravokutnik (x, y, w, h).

Sad kad ste završili s lokacijama, stvorite "ROI" za lice i prikažite rezultat pomoću funkcije imshow (). Pokrenite ga u python okruženju pomoću Raspberry Pi terminala:

python faceDetection.py

I rezultat:

Korak 9: Spremanje podataka


U ovom dijelu morate stvoriti skup podataka u kojem će vaš program spremiti prikupljene podatke o ID-ima lica koje je otkrio. Da biste to učinili, stvorite direktorij (koristim FacialRecognition):

mkdir Prepoznavanje lica

Sada izradite poddirektorij s imenom "skup podataka".

mkdir skup podataka

Zatim upotrijebite sljedeći kod:

import cv2 import os cam = cv2.VideoCapture (0) kamera.set (3, 640) # set video width cam.set (4, 480) # set video height face_detector = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml ') # Za svaku osobu unesite jedan numerički ID lica face_id = input (' \ n unesite ID korisnika i pritisnite  ==> ') print ("\ n [INFO] Inicijalizacija snimanja lica. Pogledajte kameru i pričekajte ... ") # Inicijalizirajte pojedinačni uzorak broja lica = 0 dok (True): ret, img = cam.read () img = cv2.flip (img, -1) # flip video sliku okomito sivo = cv2.cvtColor (img, cv2.COLOR_BGR2GREY) lica = detektor lica.detectMultiScale (siva, 1.3, 5) za (x, y, w, h) u licima: cv2.pravokutnik (img, (x, y), (x + w, y + h), (255,0,0), 2) count + = 1 # Snimite snimljenu sliku u mapu skupova podataka cv2.imwrite ("skup podataka / korisnik."+ str (face_id) + '.'+ str (brojanje) + ".jpg ", siva [y: y + h, x: x + w]) cv2.imshow ('slika', img) k = cv2.waitKey (100) & 0xff # Pritisnite 'ESC' za izlaz iz videozapisa ako je k == 27: break elif count> = 10: # Uzmite 10 uzoraka lica i zaustavite video pauzu # Napravite malo ispisa za čišćenje ("\ n [INFO] Izlaz iz programa i čišćenje stvari ") cam.puštanje () cv2.uništitiAllWindows ()

Imajte na umu da ćemo svaki snimljeni okvir spremiti kao datoteku u poddirektorij "set podataka":

cv2.imwrite ("skup podataka / korisnik."+ str (face_id) + '.'+ str (brojanje) + ".jpg ", siva [y: y + h, x: x + w])

Nakon toga, morate uvesti biblioteku “os” da biste spremili gornju datoteku. Ime datoteka slijedit će strukturu poput ove:

Korisnik.face_id.računati.jpg, / pre>

Gore spomenuti kod snimit će samo 10 slika za svaki id. To sigurno možete promijeniti ako želite.
Pokušajte sada pokrenuti program i snimiti neke ID-ove. Obavezno pokrenite kod svaki put kada promijenite korisnika ili postojeću fotografiju.

10. korak: Trener


U ovom ćete koraku morati koristiti funkciju OpenCV za obuku prepoznavača OpenCV s podacima iz vašeg skupa podataka. Započnite s izradom poddirektorija za pohranu obučenih podataka.

trener mkdir

Zatim pokrenite sljedeći kod:

import cv2 import numpy as np from PIL import image import os # Staza za lice slike path path = 'data set' prepoznavač = cv2.lice.LBPHFaceRecognizer_create () detektor = cv2.CascadeClassifier ("haarcascade_frontalface_default.xml "); # funkcija za dobivanje slika i podataka oznake def getImagesAndLabels (put): imagePaths = [os.staza.join (put, f) za f u os.listdir (put)] faceSamples = [] ids = [] za imagePath u imagePaths: PIL_img = Slika.otvori (imagePath).convert ('L') # pretvori u sive img_numpy = np.niz (PIL_img, 'uint8') id = int (os.staza.split (imagePath) [- 1].podjela(".") [1]) lica = detektor.deteMultiScale (img_numpy) za (x, y, w, h) u licima: faceSamples.append (img_numpy [y: y + h, x: x + w]) id.append (id) return faceSamples, ids print ("\ n [INFO] Obrazovna lica. Trebat će nekoliko sekundi. Pričekajte ... ") lica, ids = getImagesAndLabels (put) prepoznavač.vlak (lica, np.niz (ids)) # Spremite model u trener / trener.yml prepoznavač.write ('trener / trener.yml ') # prepoznavač.save () radio na Macu, ali ne i na Pi # Ispis broja obučenih lica i ispis završnog programa ("\ n [INFO] 0 obučenih lica. Izlaz iz programa ".format (len (np.jedinstveni (ID-ovi))))

Obavezno instalirajte PIL knjižnicu na Raspberry Pi. Ako toga nemate, pokrenite sljedeću naredbu:

pip instalirati jastuk

Ovdje koristim LBPH prepoznavač lica koji se isporučuje s paketom OpenCV. Sada slijedite ovaj redak:

prepoznavač = cv2.lice.LBPHFaceRecognizer_create ()

Sve vaše fotografije bit će odvedene u direktorij "skupova podataka" pomoću funkcije "getImagesAndLabels". Vratit će 2 niza pod nazivom "Ids" i "Face". Sada je vrijeme za obuku prepoznavača.

prepoznavač.vlak (lica, id-ovi)

Sad ćete vidjeti „trenera.yml ”imenovana datoteka spremljena u direktorij trenera.

Korak 11: Prepoznavanje lica


Vrijeme je za završnu akciju. Nakon ovog koraka, vaš prepoznavač može pogoditi povratni ID ako je lice prethodno snimljeno. Pa, napišimo naš konačni kod:

uvoz cv2 uvoz numpy kao np uvoz os prepoznavač = cv2.lice.Prepoznavač LBPHFaceRecognizer_create ().read ('trener / trener.yml ') cascadePath = "haarcascade_frontalface_default.xml "faceCascade = cv2.CascadeClassifier (cascadePath); font = cv2.FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # imena povezana s id-ovima: example ==> Marcelo: id = 1, etc names = ['None', 'Markian', 'Bell', 'Grace', 'A', 'Z '] # Inicijalizirajte i započnite snimanje videozapisa u stvarnom vremenu cam = cv2.VideoCapture (0) kamera.set (3, 640) # set video widht cam.set (4, 480) # postavi visinu video zapisa # Definirajte najmanju veličinu prozora koja će se prepoznati kao lice minW = 0.1 * cam.dobiti (3) minH = 0.1 * cam.get (4) while True: ret, img = cam.read () img = cv2.flip (img, -1) # Okreni vertikalno sivo = cv2.cvtColor (img, cv2.COLOR_BGR2GREY) lica = faceCascade.detectMultiScale (siva, faktor faktor = 1.2, minSusjedi = 5, minVeličina = (int (minW), int (minH)),) za (x, y, w, h) u licima: cv2.pravokutnik (img, (x, y), (x + w, y + h), (0,255,0), 2) id, pouzdanost = prepoznavač.predvidjeti (sivo [y: y + h, x: x + w]) # Provjerite je li povjerenje manje od njih 100 ==> "0" savršeno odgovara ako (pouzdanost < 100): id = names[id] confidence = " 0%".format(round(100 - confidence)) else: id = "unknown" confidence = " 0%".format(round(100 - confidence)) cv2.putText(img, str(id), (x+5,y-5), font, 1, (255,255,255), 2) cv2.putText(img, str(confidence), (x+5,y+h-5), font, 1, (255,255,0), 1) cv2.imshow('camera',img) k = cv2.waitKey(10) & 0xff # Press 'ESC' for exiting video if k == 27: break # Do a bit of cleanup print("\n [INFO] Exiting Program and cleanup stuff") cam.release() cv2.destroyAllWindows()

Program radi kao prepoznavač. funkcija predviđanja () uzima različite dijelove snimljenog lica kao različite parametre i vraća se spremljenom vlasniku dok prikazuje ID.
Ako ne prepozna lice, na slici će se prikazati "nepoznato".

Tako, Voila!

Napokon, Uvidi


Dakle, na ovaj način napravite prepoznavanje lica Raspberry Pi. Obavezno slijedite ovaj članak korak po korak kako biste postigli najbolji rezultat! Sada, pored ovog klasifikatora prepoznavanja lica, možete izvršiti prepoznavanje očiju ili prepoznavanje osmijeha koristeći različite klasifikatore i funkcije. Istražio sam sve povezane članke na Internetu i smislio ovaj. Nadam se da vam je ovaj vodič pomogao u projektima. I nadam se da će vam uspjeti. Ne zaboravite spomenuti svoje misli u odjeljku za komentare!

Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...
Vodič za bitku za Wesnoth
Bitka za Wesnoth jedna je od najpopularnijih strateških igara otvorenog koda koje trenutno možete igrati. Ne samo da se ova igra razvija već jako dugo...