Ühe parda arvuti

Kuidas teha vaarika pi näotuvastuse projekti

Kuidas teha vaarika pi näotuvastuse projekti

Raspberry Pi on odav miniarvuti, mis on arvutite ja programmeerimise enamiku inimeste, sealhulgas õpilaste ja harrastajate jaoks palju lihtsamaks teinud. See miniarvuti saab teha kõike, mida lauaarvuti, alates Interneti sirvimisest kuni põnevate projektide ja programmide loomiseni. Ja üks neist hämmastavatest projektidest on Raspberry Pi näotuvastuse tegemine. Kuigi see projekt võib olla palju huvitav, pole seda eriti lihtne teha. Nii et soovitaksin teil artiklit sammhaaval jälgida.

Vaarika Pi näotuvastus


Näotuvastusprogrammi tegemine võis olla üks kord väga keeruline ja arenenud asi. Kuid Raspberry Pi puhul pole miski liiga raske! Selles artiklis olen projekti teostamiseks kasutanud avatud lähtekoodiga arvutivisiooni raamatukogu (OpenCV).

See hoidla oli loodud töötama arvutustõhususe ja reaalajas rakendustega. Seega on see ideaalne meie reaalajas näotuvastusprogrammi jaoks. See artikkel juhendab teid kogu projekti samm-sammult. Niisiis, järgige lõpuks oma Raspberry Pi näotuvastust!

Nõuded


Raspberry Pi näotuvastussüsteemi tegemiseks vajate järgmisi asju:

  1. Vaarika Pi V4
  2. Noir kaamera
  3. OpenCV

Vaarika Pi ühendused


Enne kodeerimise alustamist looge kindlasti järgmised ühendused:

  1. Looge ühendused ekraanilt Raspberry Pi ja Ribbon kaabli vahel
  2. Kinnitage SDA oma Pi SDA tihvti külge
  3. Pange SCL ekraanilt SCL-tihvti
  4. Kinnitage kaamera lindikaabel Raspberry Pi külge
  5. Pange GND ekraanilt Pi GND-sse
  6. Ühendage Raspberry Pi 5V ja ekraani 5V

1. samm: installige OpenCV Raspberry Pi-le


Esimene samm on OpenCV installimine Pi-seadmesse. Selleks käivitage oma Raspberry Pi ja avage SSH-ühendus. Mikro-SD-kaardil kogu vaba ruumi kaasamiseks laiendage oma failisüsteemi.

$ sudo raspi-config

Seejärel valige menüüst "Täpsemad suvandid" ja seejärel "Laienda failisüsteemi":

Pärast seda vajuta " nuppu ja taaskäivitage oma Raspberry Pi.

$ sudo taaskäivitage

2. samm: kinnitage OpenCV installimine


Kui olete taaskäivitamise lõpetanud, peaks teie Pi-l olema valmis OpenCV virtuaalne keskkond. Nüüd peaksite kinnitama, kas OpenCV on teie Pi-s õigesti installitud. Käivitage käsk “source” iga kord, kui avate uue terminali, nii et süsteemimuutujad oleksid õigesti seadistatud.

allikas ~ /.profiil

Nüüd sisestage oma virtuaalne keskkond:

workon cv

(Cv) tekst tähendab, et olete cv virtuaalses keskkonnas.

(cv) pi @ vaarikas: ~ $

Pythoni tõlki sisestamine:

püüton

Näete tõlkesse ilmuvat “>>>”. OpenCV teegi importimiseks toimige järgmiselt

import CV2

Kui veateateid pole, võite olla kindel, et OpenCV on õigesti installitud.

3. samm: laadige alla OpenCV


Nüüd laadige alla installitud OpenCV. Peate alla laadima nii OpenCV kui ka OpenCV kaastöö. Kaasas on moodulid ja funktsioonid, mida vajate selles katses.

$ cd ~ $ wget -O avamine.zip https: // github.com / opencv / opencv / arhiiv / 4.0.0.zip $ wget -O opencv_contrib.zip https: // github.com / opencv / opencv_contrib / archive / 4.0.0.tõmblukk

Nüüd pakkige arhiivid lahti:

$ unzip avencv.zip $ unzip opencv_contrib.tõmblukk

4. samm: installige sõltuvused


Nüüd installige oma Raspberry Pi-le vajalikud OpenCV-sõltuvused, et see korralikult töötaks:

$ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get install build-essential 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-dev gfortran $ sudo apt- saada install python2.7-dev python3-dev $ sudo apt-get install python3-pil.imagetk

5. samm: installige pip


Selles etapis peate installima pythoni paketihalduri nimega “pip”.

$ wget https: // bootstrap.püpa.io / get-pip.py $ sudo python3 get-pip.py

6. samm: installige Numpy


Pärast seda installige pythoni teek nimega "Numpy".

$ Pip3 install numpy

7. samm: testige kaamerat


Nüüd, kui olete installinud kõik vajalikud asjad, sealhulgas OpenCV, on aeg kontrollida, kas teie kaamera töötab korralikult. Raspberry Pi-sse peaks olema juba installitud Picam. Sisestage Python IDE-s järgmine kood:

impordi numpy nimega np import cv2 cap = cv2.VideoCapture (0) kork.set (3 640) # set Laiuse kork.set (4480) # set Height while (Tõsi): ret, frame = cap.read () raam = cv2.klapp (raam, -1) # Pöörake kaamera vertikaalselt halli = cv2.cvtColor (raam, cv2.COLOR_BGR2GRAY) cv2.imshow ('raam', raam) cv2.imshow ('hall', hall) k = cv2.waitKey (30) & 0xff, kui k == 27: # vajutage katkestuse sulgemiseks ESC.vabastage () cv2.destrAllWindows ()

Selle koodi abil saate hõivata teie PiCami loodud videovoo, mis kuvab nii halli režiimi kui ka BGR-värvirežiimi. Seejärel käivitage kood järgmise käsuga:

python simpleCamTest.py

Nüüd vajutage programmi lõpetamiseks klahvi [ESC]. Enne selle lõpetamist klõpsake kindlasti videoaknal. Nüüd peaksite nägema, kuidas kaamera töötab korralikult ja näitab tulemusi. Kui teie kaameral kuvatakse tõrketeated „Kinnitamine ebaõnnestus”, kasutage selle parandamiseks järgmist käsku:

sudo modprobe bcm2835-v4l2

8. samm: näotuvastus


Peaksite teadma, et esimene samm meie näotuvastusprojekti lõpuleviimiseks on teha PiCam nägu jäädvustama. Kindlasti peab see kõigepealt näo tuvastama, et seda tulevikus ära tunda.

Näotuvastusalgoritm nõuab klassifikaatori koolitamiseks ja struktuuride säästmiseks piltide kasutamist nii näoga kui ka ilma näota. Õnneks on eelnevalt alla laaditud OpenCV-ga kaasas detektor ja treener. Samuti on sellel juba mõned eelnevalt koolitatud klassifikaatorid, nagu nägu, silmad, käed jne. OpenCV-ga näodetektori loomiseks kasutage järgmisi koode:

import numpy kui np import cv2 faceCascade = cv2.CascadeClassifier ('Cascades / haarcascade_frontalface_default.xml ') kork = cv2.VideoCapture (0) kork.set (3 640) # set Laiuse kork.set (4480) # set Height while True: ret, img = kork.loe () img = cv2.klapp (img, -1) hall = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (hall, scaleFactor = 1.2, minNaabrid = 5, minSize = (20, 20)) (x, y, w, h) nägudes: cv2.ristkülik (img, (x, y), (x + w, y + h), (255,0,0), 2) roi_gray = hall [y: y + h, x: x + w] roi_color = img [ y: y + h, x: x + w] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff, kui k == 27: # vajutage katkestuse sulgemiseks nuppu 'ESC'.vabastage () cv2.destrAllWindows ()

Nüüd peate klassifikaatori funktsiooni kutsuma koos mõne skaalateguri, parameetri ja näo minimaalse suurusega, mille see tuvastab.

näod = faceCascade.detectMultiScale (hall, scaleFactor = 1.2, minNaabrid = 5, minSize = (20, 20))

Selle koodi abil saab pildilt nägusid tuvastada. Nüüd võiksite näod ristkülikuna kuju märkida. Selleks kasutage järgmist koodi:

(x, y, w, h) jaoks nägudes: cv2.ristkülik (img, (x, y), (x + w, y + h), (255,0,0), 2) roi_gray = hall [y: y + h, x: x + w] roi_color = img [ y: y + h, x: x + w]

Nii see töötab:

Kui klassifikaator leiab pildilt suvalise näo, näitab see näo asukohta ristkülikuna, nagu kästud, kus ta kasutab kõrguseks „h“ ja laiuseks „w“ ning vasakut ülemist nurka (x, y). See võtab meie ristküliku (x, y, w, h) üsna kokku.

Nüüd, kui olete asukohtadega valmis, looge näole “ROI” ja kuvage tulemus funktsiooniga imshow (). Käivitage see Pythoni keskkonnas, kasutades Raspberry Pi terminali:

python faceDetection.py

Ja tulemus:

9. samm: andmete salvestamine


Selles osas peate looma andmekogumi, kuhu teie programm salvestab kogutud andmed tuvastatud näo ID-de kohta. Selleks looge kataloog (kasutan FacialRecognition):

mkdir Näotuvastus

Nüüd looge alamkataloog nimega "andmekogum".

mkdir andmekogum

Seejärel kasutage järgmist koodi:

import cv2 import os cam = cv2.VideoCapture (0) kaamera.komplekt (3, 640) # seadista videolaiuse kaamera.set (4, 480) # set video kõrgus face_detector = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml ') # Sisestage igale inimesele üks numbriline näo ID face_id = sisend (' \ n sisestage kasutajatunnus vajutage  ==> ') print ("\ n [INFO] Näohõive algatamine. Vaadake kaamerat ja oodake ... ") # Alustage individuaalse proovivõtmise näonumbrite arv = 0, samal ajal kui (True): ret, img = cam.loe () img = cv2.klapp (img, -1) # videopildi vertikaalselt hall = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) näod = näodetektor.detectMultiScale (hall, 1.3, 5) (x, y, w, h) jaoks nägudes: cv2.ristkülik (img, (x, y), (x + w, y + h), (255,0,0), 2) count + = 1 # Salvestage pildistatud pilt andmekogumite kausta cv2.imwrite ("andmekogum / Kasutaja."+ str (näo_id) + '.'+ str (arv) + ".jpg ", hall [y: y + h, x: x + w]) cv2.imshow ('pilt', img) k = cv2.waitKey (100) & 0xff # Video sulgemiseks vajutage "ESC", kui k == 27: katkesta elifide arv> = 10: # Võtke 10 näoproovi ja peatage videopaus # Tehke natuke puhastust ("\ n [INFO] Programmist ja puhastustoimingutest väljumine ") kaamera.vabastage () cv2.destrAllWindows ()

Pange tähele, et salvestame kõik jäädvustatud kaadrid failina alamkataloogi „andmekogum”:

cv2.imwrite ("andmekogum / Kasutaja."+ str (näo_id) + '.'+ str (arv) + ".jpg ", hall [y: y + h, x: x + w])

Pärast seda peate ülaltoodud faili salvestamiseks importima teegi “os”. Failide nimi järgib sellist struktuuri:

Kasutaja.näo ID.loendama.JPG, / pre>

Eespool nimetatud kood salvestab iga ID jaoks ainult 10 pilti. Soovi korral saate seda kindlasti muuta.
Proovige nüüd programmi käivitada ja hõivata mõned ID-d. Käivitage kood kindlasti iga kord, kui muudate kasutajat või olemasolevat fotot.

10. samm: treener


Selles etapis peate kasutama OpenCV funktsiooni, et koolitada OpenCV-tuvastaja teie andmekogumi andmetega. Alustage koolitatud andmete salvestamiseks alamkataloogi loomisest.

mkdir treener

Seejärel käivitage järgmine kood:

impordi cv2 impordi numpy np-na PIL-ist impordi pilt impordi os # näopildi andmebaasi tee = path = 'andmekogum' tunnistaja = cv2.nägu.LBPHFaceRecognizer_create () detektor = cv2.CascadeClassifier ("haarcascade_frontalface_default.xml "); # funktsioon piltide saamiseks ja siltide andmete määramiseks def getImagesAndLabels (tee): imagePaths = [os.tee.liitu (tee, f) f jaoks os.listdir (tee)] faceSamples = [] ids = [] imagePathile imagePaths: PIL_img = Image.avatud (imagePath).teisenda ('L') # teisenda see halltooniks img_numpy = np.massiiv (PIL_img, 'uint8') id = int (os.tee.split (imagePath) [- 1].split (".") [1]) nägu = detektor.detekteeridaMultiScale (img_numpy) (x, y, w, h) nägudes: faceSamples.lisage (img_numpy [y: y + h, x: x + w]) ID-d.lisa (id) return faceSamples, ids print ("\ n [INFO] Treeningnäod. See võtab paar sekundit. Oota ... ") faces, ids = getImagesAndLabels (tee) tuvastaja.rong (näod, np.array (ids)) # Salvestage mudel treenerisse.yml-tuvastaja.kirjutama ('treener / treener.yml ') # tuvastaja.save () töötas Macis, kuid mitte Pi-l # Trükkige koolitatud nägude arv ja lõpetage programmi printimine ("\ n [INFO] 0 koolitatud näod. Programmist väljumine ".formaat (len (np.unikaalne (id))))

Veenduge, et olete oma Raspberry Pi-le installinud PIL-i teegi. Kui teil seda pole, käivitage järgmine käsk:

paigaldage padi

Siin kasutan OpenCV paketiga kaasas olevat LBPH näotuvastajat. Järgige seda rida:

tuvastaja = cv2.nägu.LBPHFaceRecognizer_create ()

Funktsioon „getImagesAndLabels” viib kõik teie fotod kataloogi „andmekogum”. See tagastab 2 massiivi nimega "ID" ja "nägu". Nüüd on aeg äratundjat koolitada.

äratundja.rong (näod, ID-d)

Nüüd näete “treenerit.yml ”nimeline fail on salvestatud treeneri kataloogi.

11. samm: näotuvastus


On viimane tegevus. Pärast seda sammu võib teie tuvastaja arvata tagasipöörduva ID, kui nägu on varem jäädvustatud. Nii et kirjutame oma lõpliku koodi:

import cv2 impordi numpy nimega np impordi os tuvastaja = cv2.nägu.LBPHFaceRecognizer_create () tuvastaja.loe ('treener / treener.yml ') cascadePath = "haarcascade_frontalface_default.xml "faceCascade = cv2.CascadeClassifier (cascadePath); font = cv2.FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # ID-dega seotud nimed: näide ==> Marcelo: id = 1 jne nimed = ['Puudub', 'Markian', 'Bell', 'Grace', 'A', 'Z '] # Initsialiseeri ja alusta reaalajas videohõive cam = cv2.VideoCapture (0) kaamera.komplekt (3, 640) # komplekt videokaamera.seatud (4, 480) # videokõrguse määramine # Määrake näo min tuvastamiseks minimaalne akna suurus minW = 0.1 * nukk.saada (3) minH = 0.1 * nukk.get (4) samas True: ret, img = cam.loe () img = cv2.flip (img, -1) # Flip vertikaalselt hall = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale (hall, scaleFactor = 1.2, minNaabrid = 5, minSize = (int (minW), int (minH)),) (x, y, w, h) nägudel: cv2.ristkülik (img, (x, y), (x + w, y + h), (0,255,0), 2) id, usaldus = tuvastaja.ennustama (hall [y: y + h, x: x + w]) # Kontrollige, kas enesekindlus on väiksem, kui 100 ==> "0" sobib ideaalselt, kui (enesekindlus < 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()

Programm töötab äratundjana. Ennusta () funktsioon võtab jäädvustatud näo erinevad osad erinevate parameetritena ja naaseb salvestatud omaniku juurde, näidates samal ajal ID-d.
Kui see nägu ära ei tunne, näitab see pildil teadmatust.

Niisiis, Voila!

Lõpuks Insights


Nii saate Raspberry Pi näotuvastuse teha nii. Parima tulemuse saamiseks järgige seda artiklit kindlasti samm-sammult! Nüüd saate lisaks sellele näotuvastuse klassifikaatorile teha silmade tuvastamise või naeratuse tuvastamise, kasutades erinevaid klassifikaatoreid ja funktsioone. Olen läbi uurinud kõik seotud artiklid Internetis ja tulnud selle artiklini. Nii et ma loodan väga, et see juhend on teid projektides aidanud. Ja ma loodan, et see on teie jaoks edukas. Ärge unustage kommentaaride jaotises oma mõtteid mainida!

Lahing Wesnothi eest 1.13.6 Areng vabastati
Lahing Wesnothi eest 1.13.6 ilmus eelmisel kuul, on 1-s kuues arendusversioon.13.x-seeria ja see pakub mitmeid täiustusi, eelkõige kasutajaliidese ja ...
League of Legendsi installimine Ubuntu 14-le.04
Kui olete League of Legends fänn, siis on see teile võimalus proovida League of Legendsit. Pange tähele, et LOL-i toetab PlayOnLinux, kui olete Linuxi...
Installige uusim OpenRA strateegiamäng Ubuntu Linuxi
OpenRA on tasuta / tasuta reaalajas strateegiamängumootor, mis loob uuesti Westwoodi varased mängud nagu klassikaline Command & Conquer: Red Alert. Ja...