Jednodeskový počítač

Jak si vyrobit projekt rozpoznávání tváře Raspberry Pi

Jak si vyrobit projekt rozpoznávání tváře Raspberry Pi

Raspberry Pi je nízkonákladový minipočítač, který většině lidí, včetně studentů a fandů, výrazně usnadnil výpočet a programování. Tento minipočítač dokáže vše, co stolní počítač, od procházení internetu až po vytváření vzrušujících projektů a programů. A jedním z těchto úžasných projektů je Raspberry Pi Face Recognition. I když tento projekt může být hodně zajímavý, jeho realizace není příliš snadná. Doporučil bych vám tedy postupovat podle článku krok za krokem.

Rozpoznávání tváře Raspberry Pi


Vytvoření programu pro rozpoznávání tváří mohlo být jednou velmi obtížnou a pokročilou věcí. Ale s Raspberry Pi není nic těžkého! V tomto článku jsem k projektu použil knihovnu Open Source Computer Vision (OpenCV).

Toto úložiště bylo navrženo pro práci s výpočetní účinností a aplikacemi v reálném čase. Proto je ideální pro náš program rozpoznávání tváře v reálném čase. Tento článek vás provede celým projektem krok za krokem. Zůstaňte tedy na konci a získejte vlastní Raspberry Pi Face Recognition!

Požadavky


K vytvoření systému rozpoznávání obličeje Raspberry Pi budete potřebovat následující věci:

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

Připojení Raspberry Pi


Než začnete programovat, vytvořte následující připojení:

  1. Vytvořte spojení mezi kabelem Raspberry Pi a Ribbon z displeje
  2. Připojte SDA ke kolíku SDA na vašem Pi
  3. Umístěte SCL z displeje na kolík SCL
  4. Připojte plochý kabel fotoaparátu k Raspberry Pi
  5. Vložte GND z displeje do Pi GND
  6. Připojte Raspberry Pi 5V a 5V displeje

Krok 1: Nainstalujte OpenCV na Raspberry Pi


Prvním krokem je instalace OpenCV na vaše zařízení Pi. Chcete-li to provést, spusťte Raspberry Pi a otevřete připojení SSH. Chcete-li na kartu micro-SD zahrnout veškeré dostupné místo, rozbalte souborový systém.

$ sudo raspi-config

Poté vyberte z nabídky „Pokročilé možnosti“ a poté „Rozbalit souborový systém“:

Poté stiskněte " tlačítko a restartujte Raspberry Pi.

$ sudo restart

Krok 2: Potvrďte instalaci OpenCV


Po dokončení restartu by na vašem Pi mělo být připravené virtuální prostředí OpenCV. Nyní byste měli ověřit, zda je OpenCV správně nainstalován ve vašem Pi. Spusťte příkaz „source“ pokaždé, když otevřete nový terminál, aby byly systémové proměnné nastaveny správně.

zdroj ~ /.profil

Nyní zadejte své virtuální prostředí:

Workon CV

Text (cv) znamená, že se nacházíte ve virtuálním prostředí cv.

(cv) pi @ raspberry: ~ $

Chcete-li zadat svého interpreta Pythonu:

krajta

V tlumočníkovi se zobrazí „>>>“. Import knihovny OpenCV:

import cv2

Pokud nejsou k dispozici žádné chybové zprávy, můžete si být jisti, že je OpenCV nainstalován správně.

Krok 3: Stáhněte si OpenCV


Nyní si stáhněte nainstalovaný OpenCV. Budete si muset stáhnout jak OpenCV, tak OpenCV. Příspěvek přichází s moduly a funkcemi, které budete v tomto experimentu potřebovat.

$ 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

Nyní rozbalte archivy:

$ rozbalte opencv.zip $ rozbalit opencv_contrib.zip

Krok 4: Instalace závislostí


Nainstalujte si na svůj Raspberry Pi potřebné závislosti OpenCV, aby fungoval správně:

$ 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- získejte instalaci python2.7-dev python3-dev $ sudo apt-get install python3-pil.imagetk

Krok 5: Nainstalujte pip


V tomto kroku budete muset nainstalovat správce balíčků pro python s názvem „pip“.

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

Krok 6: Numpy nainstalujte


Poté nainstalujte knihovnu pythonu nazvanou „Numpy“.

$ Pip3 install numpy

Krok 7: Otestujte kameru


Nyní, když jste nainstalovali všechny potřebné věci, včetně OpenCV, je čas zkontrolovat, zda váš fotoaparát funguje správně. Na vašem Raspberry Pi byste již měli mít nainstalovaný Picam. Zadejte následující kód do svého IDE Pythonu:

import numpy jako np import cv2 cap = cv2.Kryt VideoCapture (0).sada (3 640) # sada Šířka víčka.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 ('frame', frame) cv2.imshow ('šedá', šedá) k = cv2.waitKey (30) & 0xff pokud k == 27: # stiskněte 'ESC' pro ukončení limitu.release () cv2.destruAllWindows ()

Tento kód funguje tak, že zachycuje video stream generovaný vaší PiCam, který zobrazuje jak šedý režim, tak barevný režim BGR. Potom proveďte kód pomocí následujícího příkazu:

python simpleCamTest.py

Nyní stiskněte klávesu [ESC] pro dokončení programu. Než dokončíte okno videa, nezapomeňte na něj kliknout. Nyní byste měli vidět, jak váš fotoaparát pracuje správně a zobrazuje výsledky. Pokud se na vašem fotoaparátu zobrazují chybové zprávy „Assertion failed“, opravte to pomocí následujícího příkazu:

sudo modprobe bcm2835-v4l2

Krok 8: Detekce obličeje


Měli byste vědět, že prvním krokem k dokončení našeho projektu rozpoznávání tváře je, aby PiCam zachytil tvář. Určitě musí nejprve detekovat obličej, aby jej v budoucnu rozpoznal.

Algoritmus detekce obličeje vyžaduje obrázky s obličejem i bez obličeje, aby se cvičil klasifikátor a ukládaly se z nich struktury. Naštěstí OpenCV, který jste si stáhli předem, je dodáván s detektorem a trenérem. Také již má některé předem vyškolené klasifikátory, jako je obličej, oči, ruce atd. Chcete-li vytvořit detektor obličeje s OpenCV, použijte následující kódy:

import numpy jako np import cv2 faceCascade = cv2.CascadeClassifier ('Cascade / haarcascade_frontalface_default.xml ') cap = cv2.Kryt VideoCapture (0).sada (3 640) # sada Šířka víčka.set (4 480) # set Height while True: ret, img = cap.read () img = cv2.flip (img, -1) šedá = cv2.cvtColor (obrázek, cv2.COLOR_BGR2GRAY) tváře = faceCascade.detectMultiScale (šedá, scaleFactor = 1.2, minNe Neighbors = 5, minSize = (20, 20)) pro (x, y, w, h) v plochách: cv2.obdélník (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 pokud k == 27: # stiskněte 'ESC' pro ukončení limitu.release () cv2.destruAllWindows ()

Nyní budete muset zavolat funkci klasifikátoru s některými faktory měřítka, parametry a minimální velikostí obličeje, kterou detekuje.

tváře = faceCascade.detectMultiScale (šedá, scaleFactor = 1.2, minSousedé = 5, minSize = (20, 20))

Tento kód funguje detekcí tváří na obrázku. Možná budete chtít označit tváře pomocí tvaru jako obdélník. Použijte k tomu následující kód:

pro (x, y, w, h) v obličejích: cv2.obdélník (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]

Funguje to tedy takto:

Pokud klasifikátor najde na obrázku jakékoli tváře, zobrazí pozice tváře jako obdélník podle povelu, kde použije „h“ jako svou výšku a „w“ jako šířku a levé horní rohy (x, y). To do značné míry shrnuje náš obdélník (x, y, w, h).

Nyní, když jste s umístěními hotovi, vytvořte „ROI“ pro obličej a ukažte výsledek pomocí funkce imshow (). Spusťte jej v prostředí pythonu pomocí terminálu Raspberry Pi:

python faceDetection.py

A výsledek:

Krok 9: Ukládání dat


V této části musíte vytvořit datovou sadu, kde váš program bude ukládat shromážděná data o ID tváře, kterou zjistil. Chcete-li to provést, vytvořte adresář (používám FacialRecognition):

mkdir FacialRecognition

Nyní vytvořte podadresář s názvem „datová sada“.

datová sada mkdir

Potom použijte následující kód:

import cv2 import os cam = cv2.Kamera VideoCapture (0).set (3, 640) # set cam width cam.set (4, 480) # nastavit výšku videa face_detector = cv2.CascadeClassifier ('haarcascade_frontalface_default.xml ') # Pro každou osobu zadejte jedno číselné ID obličeje face_id = input (' \ n zadejte ID uživatele konec stiskněte  ==> ') print ("\ n [INFO] Inicializace snímání obličeje. Podívejte se na kameru a počkejte… ") # Inicializujte počet individuálních vzorků počtu obličejů = 0 while (True): ret, img = cam.read () img = cv2.převrátit (obrázek, -1) # převrátit obraz videa svisle šedá = CV2.cvtColor (obrázek, cv2.COLOR_BGR2GRAY) obličeje = detektor obličeje.detectMultiScale (šedá, 1.3, 5) pro (x, y, w, h) ve tvářích: cv2.obdélník (img, (x, y), (x + w, y + h), (255,0,0), 2) počet + = 1 # Uložte pořízený obrázek do složky datových sad cv2.imwrite ("datová sada / uživatel."+ str (face_id) + '.'+ str (počet) + ".jpg ", šedá [y: y + h, x: x + w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Stiskněte klávesu ESC pro ukončení videa, pokud k == 27: počet přestávek elif> = 10: # Vezměte 10 vzorků tváře a zastavte přestávku videa # Proveďte trochu vyčištění tisku ("\ n [INFO] Ukončení programu a čištění ") cam.release () cv2.destruAllWindows ()

Všimněte si, že každý ze zachycených snímků uložíme jako soubor do podadresáře „dataset“:

cv2.imwrite ("datová sada / uživatel."+ str (face_id) + '.'+ str (počet) + ".jpg ", šedá [y: y + h, x: x + w])

Poté musíte importovat knihovnu „os“, abyste uložili výše uvedený soubor. Název souborů bude vypadat takto:

Uživatel.face_id.počet.jpg, / pre>

Výše uvedený kód zachytí pouze 10 obrázků pro každé ID. Určitě to můžete změnit, pokud chcete.
Nyní zkuste spustit program a zachytit některá ID. Nezapomeňte spustit kód při každé změně uživatele nebo stávající fotografie.

Krok 10: Trenér


V tomto kroku budete muset pomocí funkce OpenCV trénovat rozpoznávač OpenCV s daty z vaší datové sady. Začněte vytvořením podadresáře pro uložení trénovaných dat.

trenér mkdir

Potom spusťte následující kód:

import cv2 import numpy jako np z PIL import Image import os # Cesta pro cestu k databázi obrazu obličeje = 'datová sada' rozpoznávač = cv2.tvář.Detektor LBPHFaceRecognizer_create () = cv2.CascadeClassifier ("haarcascade_frontalface_default.".xml "); # funkce k získání obrázků a označení dat def getImagesAndLabels (cesta): imagePaths = [os.cesta.join (cesta, f) pro f v os.listdir (cesta)] faceSamples = [] ids = [] pro imagePath v imagePaths: PIL_img = obrázek.otevřít (imagePath).convert ('L') # převést na stupně šedi img_numpy = np.array (PIL_img, 'uint8') id = int (os.cesta.split (imagePath) [- 1].rozdělit(".") [1]) tváře = 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] Tréninkové tváře. Bude to trvat několik sekund. Počkejte ... ") tváře, ids = getImagesAndLabels (cesta) rozpoznávač.vlak (tváře, np.array (ids)) # Uložte model do trenéra / trenéra.rozpoznávač yml.write ('trenér / trenér.yml ') # rozpoznávač.save () fungovalo na Macu, ale ne na Pi # Tisk počtu trénovaných obličejů a ukončení tisku programu ("\ n [INFO] 0 trénované obličeje. Ukončení programu ".formát (len (np.unique (ids))))

Ujistěte se, že jste na svůj Raspberry Pi nainstalovali knihovnu PIL. Pokud to nemáte, spusťte následující příkaz:

pip nainstalovat polštář

Tady používám rozpoznávač tváře LBPH, který je součástí balíčku OpenCV. Postupujte podle tohoto řádku:

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

Všechny vaše fotografie budou přeneseny do adresáře „datové sady“ pomocí funkce „getImagesAndLabels“. Vrátí 2 pole s názvem „ID“ a „tváře“. Nyní je čas trénovat rozpoznávač.

rozpoznávač.vlak (tváře, ID)

Nyní uvidíte „trenéra.yml ”pojmenovaný soubor uložený v adresáři trenéra.

Krok 11: Rozpoznávání tváře


Je čas na závěrečnou akci. Po tomto kroku může váš rozpoznávač odhadnout vracející se ID, pokud byla tvář zachycena dříve. Pojďme tedy napsat náš finální kód:

import cv2 import numpy jako np import os rozpoznávač = cv2.tvář.Rozpoznávač LBPHFaceRecognizer_create ().číst („trenér / trenér.yml ') cascadePath = "haarcascade_frontalface_default.xml "faceCascade = cv2.CascadeClassifier (cascadePath); font = cv2.FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # jména související s ids: example ==> Marcelo: id = 1 atd. Names = ['None', 'Markian', 'Bell', 'Grace', 'A', 'Z '] # Inicializujte a spusťte nahrávání videa v reálném čase cam = cv2.Videokamera VideoCapture (0).set (3, 640) # set video widht cam.set (4, 480) # set video height # Definujte minimální velikost okna, která bude rozpoznána jako tvář minW = 0.1 * vačka.získejte (3) minH = 0.1 * vačka.get (4) while True: ret, img = cam.read () img = cv2.flip (img, -1) # Flip vertikálně šedá = cv2.cvtColor (obrázek, cv2.COLOR_BGR2GRAY) tváře = faceCascade.detectMultiScale (šedá, scaleFactor = 1.2, minNe Neighbors = 5, minSize = (int (minW), int (minH)),) pro (x, y, w, h) ve tvářích: cv2.obdélník (img, (x, y), (x + w, y + h), (0,255,0), 2) id, spolehlivost = rozpoznávač.predikce (šedá [y: y + h, x: x + w]) # Zkontrolujte, zda je spolehlivost menší než 100 ==> „0“ se dokonale shoduje, pokud (spolehlivost < 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 jako rozpoznávač. funkce predikce () vezme různé části zachyceného obličeje jako různé parametry a vrátí se uloženému vlastníkovi při zobrazení ID.
Pokud nerozpozná obličej, zobrazí se na obrázku „neznámý“.

Tak, Voila!

Nakonec Insights


Takto tedy rozpoznáváte Raspberry Pi. Chcete-li dosáhnout nejlepších výsledků, postupujte podle pokynů v tomto článku krok za krokem! Kromě tohoto klasifikátoru rozpoznávání tváře nyní můžete také provádět rozpoznávání očí nebo rozpoznávání úsměvu pomocí různých klasifikátorů a funkcí. Prozkoumal jsem všechny související články na internetu a přišel s tímto. Opravdu tedy doufám, že vám tento průvodce pomohl s projekty. A doufám, že je to pro vás úspěšné. Nezapomeňte uvést své myšlenky v sekci komentářů!

Ovládejte a spravujte pohyb myši mezi více monitory ve Windows 10
Správce myší se dvěma displeji umožňuje ovládat a konfigurovat pohyb myši mezi více monitory zpomalením jeho pohybů poblíž hranice. Windows 10/8 vám u...
WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...
V systému Windows 10 nefunguje levé tlačítko myši
Pokud používáte speciální myš s notebookem nebo stolním počítačem, ale levé tlačítko myši nefunguje ve Windows 10/8/7 z nějakého důvodu uvádíme několi...