Jednodeskový počítač

Ako si vyrobiť projekt rozpoznávania tváre Raspberry Pi

Ako si vyrobiť projekt rozpoznávania tváre Raspberry Pi

Raspberry Pi je nízkonákladový minipočítač, ktorý väčšine ľudí vrátane študentov a nadšencov výrazne uľahčil výpočty a programovanie. Tento minipočítač dokáže všetko, čo stolný počítač, od prehľadávania internetu až po vytváranie vzrušujúcich projektov a programov. A jedným z týchto úžasných projektov je vytvorenie programu Raspberry Pi Face Recognition. Aj keď tento projekt môže byť veľmi zaujímavý, nie je ľahké ho uskutočniť. Takže by som vám odporučil postupovať podľa článku krok za krokom.

Rozpoznávanie tváre Raspberry Pi


Tvorba programu rozpoznávania tváre mohla byť kedysi veľmi náročná a pokročilá vec. Ale s Raspberry Pi nie je nič príliš ťažké! V tomto článku som na vykonanie projektu použil Open Source Computer Vision Library (OpenCV).

Toto úložisko bolo navrhnuté na prácu s výpočtovou účinnosťou a aplikáciami v reálnom čase. Preto je ideálne pre náš program rozpoznávania tváre v reálnom čase. Tento článok vás prevedie krok za krokom celým projektom. Zostaňte teda na konci a získajte svoje vlastné rozpoznávanie tváre Raspberry Pi!

Požiadavky


Na vytvorenie systému rozpoznávania tváre Raspberry Pi budete potrebovať nasledujúce veci:

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

Pripojenie Raspberry Pi


Predtým, ako začnete s programovaním, nezabudnite vytvoriť nasledujúce spojenia:

  1. Vytvorte prepojenie medzi káblom Raspberry Pi a Ribbon z displeja
  2. Pripojte SDA ku kolíku SDA na vašom Pi
  3. Vložte SCL z displeja do kolíka SCL
  4. Pripojte plochý kábel fotoaparátu k Raspberry Pi
  5. Vložte GND z displeja do Pi GND
  6. Pripojte Raspberry Pi 5V a 5V displeja

Krok 1: Nainštalujte OpenCV na Raspberry Pi


Prvým krokom je inštalácia OpenCV na vaše zariadenie Pi. Ak to chcete urobiť, spustite Raspberry Pi a otvorte pripojenie SSH. Ak chcete na karte micro-SD zahrnúť všetok voľný priestor, rozbaľte svoj súborový systém.

$ sudo raspi-config

Potom vyberte z ponuky „Rozšírené možnosti“ a potom „Rozbaliť súborový systém“:

Po tom, hit a reštartujte Raspberry Pi.

$ sudo reštart

Krok 2: Potvrďte inštaláciu OpenCV


Po dokončení reštartu by malo byť na vašom Pi pripravené virtuálne prostredie OpenCV. Teraz by ste mali skontrolovať, či je OpenCV správne nainštalovaný vo vašom Pi. Spustite príkaz „source“ zakaždým, keď otvoríte nový terminál, aby boli systémové premenné nastavené správne.

zdroj ~ /.profilu

Teraz zadajte svoje virtuálne prostredie:

Workon CV

Text (CV) znamená, že sa nachádzate vo virtuálnom prostredí CV.

(cv) pi @ malina: ~ $

Ak chcete zadať svojho tlmočníka Pythonu:

pytón

V tlmočníkovi sa zobrazí „>>>“. Import knižnice OpenCV:

importovať cv2

Ak sa nezobrazia žiadne chybové správy, môžete si byť istí, že je OpenCV nainštalovaný správne.

Krok 3: Stiahnite si OpenCV


Teraz si stiahnite nainštalovaný OpenCV. Budete si musieť stiahnuť OpenCV aj OpenCV contrib. Príspevok je dodávaný s modulmi a funkciami, ktoré budete v tomto experimente potrebovať.

$ 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.PSČ

Teraz rozbaľte archívy:

$ rozbaľte opencv.zip $ unzip opencv_contrib.PSČ

Krok 4: Nainštalujte si závislosti


Teraz nainštalujte potrebné závislosti OpenCV na svoje Raspberry Pi, aby fungovali správne:

$ 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- inštalovať python2.7-dev python3-dev $ sudo apt-get nainštalovať python3-pil.imagetk

Krok 5: Nainštalujte pip


V tomto kroku budete musieť nainštalovať správcu balíkov pre python s názvom „pip“.

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

Krok 6: Numpy nainštalujte


Potom nainštalujte knižnicu pythonu s názvom „Numpy“.

$ Pip3 nainštalovať numpy

Krok 7: Vyskúšajte fotoaparát


Teraz, keď máte nainštalované všetky potrebné veci, vrátane OpenCV, je čas skontrolovať, či váš fotoaparát funguje správne. Na vašom Raspberry Pi by ste už mali mať nainštalovaný Picam. Zadajte nasledujúci kód do svojho Python IDE:

import numpy ako np import cv2 cap = cv2.Kryt VideoCapture (0).sada (3 640) # sada Šírka krytu.set (4 480) # set Height while (True): ret, frame = cap.read () frame = cv2.flip (frame, -1) # Flip camera vertically grey = cv2.cvtColor (rám, cv2.COLOR_BGR2GREY) cv2.imshow ('rám', rám) cv2.imshow ('šedá', šedá) k = cv2.waitKey (30) & 0xff ak k == 27: # stlačte 'ESC' na ukončenie prerušenia.release () cv2.destruAllWindows ()

Tento kód funguje tak, že zachytáva videostream generovaný vašou PiCam, ktorý zobrazuje sivý aj farebný režim BGR. Potom vykonajte kód pomocou nasledujúceho príkazu:

python simpleCamTest.py

Teraz program ukončite stlačením klávesu [ESC]. Nezabudnite pred dokončením kliknúť na okno videa. Teraz by ste mali vidieť, že váš fotoaparát pracuje správne a zobrazuje výsledky. Ak sa na vašom fotoaparáte zobrazujú chybové správy „Assertion failed“, opravte ich pomocou nasledujúceho príkazu:

sudo modprobe bcm2835-v4l2

Krok 8: Detekcia tváre


Mali by ste vedieť, že prvým krokom k dokončeniu nášho projektu rozpoznávania tváre je dosiahnuť, aby fotoaparát PiCam zachytil tvár. Určite musí najskôr detekovať tvár, aby ju v budúcnosti spoznal.

Algoritmus detekcie tváre vyžaduje obrázky s tvárou aj bez tváre, aby sa trénoval klasifikátor a uložili sa z nich štruktúry. Našťastie, OpenCV, ktorý ste si predtým stiahli, je dodávaný s detektorom a trénerom. Tiež už má niekoľko preškolených klasifikátorov, ako sú tvár, oči, ruky atď. Ak chcete vytvoriť detektor tváre pomocou OpenCV, použite nasledujúce kódy:

import numpy ako np import cv2 faceCascade = cv2.CascadeClassifier ('Cascade / haarcascade_frontalface_default.xml ') cap = cv2.Kryt VideoCapture (0).sada (3 640) # sada Šírka krytu.set (4 480) # set Height while True: ret, img = cap.read () img = cv2.flip (img, -1) šedá = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY) face = faceCascade.detectMultiScale (šedá, scaleFactor = 1.2, minSusedia = 5, minSize = (20, 20)) pre (x, y, w, h) v tvárach: cv2.obdĺžnik (img, (x, y), (x + w, y + h), (255,0,0), 2) roi_gray = šedá [y: y + h, x: x + w] roi_color = img [ y: y + h, x: x + w] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff ak k == 27: # stlačte 'ESC' na ukončenie prerušenia.release () cv2.destruAllWindows ()

Teraz budete musieť zavolať funkciu klasifikátora s niektorými faktormi mierky, parametrami a minimálnou veľkosťou tváre, ktorú detekuje.

tváre = faceCascade.detectMultiScale (šedá, scaleFactor = 1.2, min. Susedia = 5, min. Veľkosť = (20, 20))

Tento kód funguje na základe detekcie tvárí na obrázku. Možno budete chcieť označiť tváre pomocou tvaru ako obdĺžnik. Použite na to nasledujúci kód:

pre (x, y, w, h) v tvárach: cv2.obdĺžnik (img, (x, y), (x + w, y + h), (255,0,0), 2) roi_gray = šedá [y: y + h, x: x + w] roi_color = img [ y: y + h, x: x + š]

Funguje to teda takto:

Ak klasifikátor nájde na obrázku ľubovoľné tváre, zobrazí polohy tváre ako obdĺžnik podľa príkazu, kde použije „h“ ako svoju výšku a „w“ ako šírku a ľavé horné rohy (x, y). To pekne zhŕňa náš obdĺžnik (x, y, w, h).

Teraz, keď ste s umiestneniami hotoví, vytvorte „ROI“ pre tvár a ukážte výsledok pomocou funkcie imshow (). Spustite ho v prostredí pythonu pomocou terminálu Raspberry Pi:

python faceDetection.py

A výsledok:

Krok 9: Uloženie údajov


V tejto časti musíte vytvoriť množinu údajov, do ktorej bude váš program ukladať zhromaždené údaje o ID tváre, ktoré zistil. Za týmto účelom vytvorte adresár (používam FacialRecognition):

mkdir FacialRecognition

Teraz vytvorte podadresár s názvom „dataset“.

množina údajov mkdir

Potom použite nasledujúci kód:

import cv2 import os cam = cv2.Videokamera VideoCapture (0).set (3, 640) # set cam width video.sada (4, 480) # sada výšky videa face_detector = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml ') # Pre každú osobu zadajte jedno číselné ID tváre face_id = input (' \ n zadajte ID užívateľa koniec stlačte  ==> ') print ("\ n [INFO] Inicializuje sa snímanie tváre. Pozerajte sa na kameru a čakajte ... ") # Inicializuje počet jednotlivých tvárí vzorkovania = 0, zatiaľ čo (True): ret, img = kamera.read () img = cv2.prevrátiť (obrázok, -1) # prevrátiť obraz videa vertikálne sivý = CV2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY) face = face_detector.detectMultiScale (šedá, 1.3, 5) pre (x, y, w, h) v tvárach: cv2.obdĺžnik (img, (x, y), (x + w, y + h), (255,0,0), 2) počet + = 1 # Uložte nasnímaný obrázok do priečinka súborov údajov cv2.imwrite ("množina údajov / používateľ."+ str (face_id) + '.'+ str (pocet) + ".jpg ", šedá [y: y + h, x: x + w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Stlačením klávesu „ESC“ ukončíte video, ak k == 27: počet prestávok elif> = 10: # Vezmite 10 vzoriek tváre a zastavte prestávku videa # Urobte trochu čistiacej tlače ("\ n [INFO] Ukončenie programu a čistenie ") cam.release () cv2.destruAllWindows ()

Upozorňujeme, že každý z nasnímaných rámcov uložíme ako súbor do podadresára „dataset“:

cv2.imwrite ("množina údajov / používateľ."+ str (face_id) + '.'+ str (pocet) + ".jpg ", šedá [y: y + h, x: x + w])

Potom musíte importovať knižnicu „os“, aby ste uložili vyššie uvedený súbor. Názov súborov bude mať nasledujúcu štruktúru:

Používateľ.face_id.počítať.jpg, / pre>

Vyššie uvedený kód zachytí iba 10 obrázkov pre každé ID. Určite to môžete zmeniť, ak chcete.
Teraz skúste spustiť program a zaznamenajte niektoré ID. Nezabudnite spustiť kód pri každej zmene používateľa alebo existujúcej fotografie.

Krok 10: Tréner


V tomto kroku budete musieť pomocou funkcie OpenCV trénovať rozpoznávač OpenCV s údajmi z vašej množiny údajov. Začnite vytvorením podadresára na ukladanie trénovaných údajov.

tréner mkdir

Potom spustite nasledujúci kód:

import cv2 import numpy ako np z PIL import Obrázok import OS # Cesta pre cestu k databáze obrázkov tváre = 'dataset' rozpoznávač = CV2.tvár.LBPHFaceRecognizer_create () detektor = cv2.CascadeClassifier ("haarcascade_frontalface_default.xml "); # funkcia na získanie obrázkov a údajov štítkov def getImagesAndLabels (cesta): imagePaths = [os.cesta.spojiť (cesta, f) pre f v os.listdir (cesta)] faceSamples = [] ids = [] pre imagePath v imagePaths: PIL_img = obrázok.otvorené (imagePath).convert ('L') # konvertovať na stupne šedej img_numpy = np.pole (PIL_img, 'uint8') id = int (os.cesta.split (imagePath) [- 1].rozdeliť („.") [1]) tváre = detektor.detectMultiScale (img_numpy) for (x, y, w, h) in Faces: faceSamples.append (img_numpy [y: y + h, x: x + w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Cvičné tváre. Bude to trvať niekoľko sekúnd. Počkajte ... ") tváre, ids = getImagesAndLabels (rozpoznávač cesty).vlak (tváre, np.pole (id)) # Uložte model do trénera / trénera.yml rozpoznávač.napísať ('tréner / tréner.yml ') # rozpoznávač.save () fungovalo na Macu, ale nie na Pi # Vytlačiť počet trénovaných tvárí a ukončiť tlač programu ("\ n [INFO] 0 vyškolené tváre. Ukončujúci program “.formát (len (np.unique (ids))))

Uistite sa, že máte na svojom Raspberry Pi nainštalovanú knižnicu PIL. Ak to nemáte, spustite nasledujúci príkaz:

pip inštalovať vankúš

Tu používam rozpoznávač tváre LBPH, ktorý je súčasťou balenia OpenCV. Postupujte podľa tohto riadku:

rozpoznávač = cv2.tvár.LBPHFaceRecognizer_create ()

Všetky vaše fotografie budú presunuté do adresára „dataset“ pomocou funkcie „getImagesAndLabels“. Vráti 2 polia s názvom „IDS“ a „tváre“. Teraz je čas trénovať rozpoznávač.

rozpoznávač.vlak (tváre, identifikačné čísla)

Teraz uvidíte „trénera“.yml ”pomenovaný súbor uložený v adresári trénera.

Krok 11: Rozpoznávanie tváre


Je čas na záverečnú akciu. Po tomto kroku váš rozpoznávač dokáže odhadnúť návratové ID, ak bola tvár zachytená už predtým. Poďme teda napísať náš konečný kód:

import cv2 import numpy ako np import os rozpoznávač = cv2.tvár.LBPHFaceRecognizer_create () rozpoznávač.čítať („tréner / tréner.yml ') cascadePath = "haarcascade_frontalface_default.xml "faceCascade = cv2.CascadeClassifier (cascadePath); font = cv2.FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # mien súvisiacich s ids: example ==> Marcelo: id = 1 atď. Names = ['None', 'Markian', 'Bell', 'Grace', 'A', 'Z '] # Inicializovať a spustiť snímanie videa v reálnom čase cam = cv2.Videokamera VideoCapture (0).set (3, 640) # set video widht cam.set (4, 480) # set video height # Definujte minimálnu veľkosť okna, ktorá bude rozpoznaná ako tvár minW = 0.1 * vačka.získať (3) minH = 0.1 * vačka.get (4) while True: ret, img = cam.read () img = cv2.flip (img, -1) # Flip vertikálne sivý = cv2.cvtColor (obrázok, cv2.COLOR_BGR2GRAY) face = faceCascade.detectMultiScale (šedá, scaleFactor = 1.2, minSusedia = 5, minSize = (int (minW), int (minH)),) pre (x, y, w, h) v tvárach: cv2.obdĺžnik (img, (x, y), (x + w, y + h), (0,255,0), 2) id, spoľahlivosť = rozpoznávač.predpovedať (sivá [y: y + h, x: x + w]) # Skontrolujte, či je spoľahlivosť menšia. 100 ==> „0“ sa dokonale zhoduje, ak (spoľahlivosť < 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 funguje ako rozpoznávač. Funkcia predvídať () vezme rôzne časti zachytenej tváre ako rôzne parametre a vráti sa uloženému vlastníkovi a zobrazí ID.
Ak nerozpozná tvár, na obrázku sa zobrazí „neznámy“.

Takže, Voila!

Na záver Insights


Takto teda rozpoznávate tvár Raspberry Pi. Postupujte podľa tohto článku krok za krokom, aby ste dosiahli najlepší výsledok! Okrem tohto klasifikátora rozpoznávania tváre môžete teraz vykonať aj rozpoznávanie očí alebo rozpoznávanie úsmevu pomocou rôznych klasifikátorov a funkcií. Preskúmal som všetky súvisiace články na internete a prišiel som s týmto. Naozaj teda dúfam, že vám tento sprievodca pomohol s projektmi. A dúfam, že je to pre vás úspešné. Nezabudnite uviesť svoje myšlienky v sekcii komentárov!

Hry Najlepšie aplikácie na mapovanie gamepadu pre Linux
Najlepšie aplikácie na mapovanie gamepadu pre Linux
Ak radi hráte hry v systéme Linux s gamepadom namiesto typického systému vstupu pre klávesnicu a myš, máte tu niekoľko užitočných aplikácií. Mnoho hie...
Hry Užitočné nástroje pre hráčov systému Linux
Užitočné nástroje pre hráčov systému Linux
Ak radi hráte hry v systéme Linux, je pravdepodobné, že ste na vylepšenie herného zážitku použili aplikácie a pomôcky ako Wine, Lutris a OBS Studio. O...
Hry HD remasterované hry pre Linux, ktoré nikdy predtým nemali vydanie Linuxu
HD remasterované hry pre Linux, ktoré nikdy predtým nemali vydanie Linuxu
Mnoho vývojárov a vydavateľov hier prichádza s remastrom starých hier v rozlíšení HD, aby predĺžili životnosť franšízy. Prosím fanúšikov, ktorí požadu...