- Szükséges alkatrészek
- Az OpenCV telepítése a Raspberry Pi programba
- Hogyan lehet felismerni az arcrészeket a dlib használatával
- A Raspberry Pi programozása az arcpontok észleléséhez
- Az arcrész-felismerő tesztelése
Az arc tereptárgyainak detektálása az arc különböző részeinek, például a szemöldök, a szem, az orr, a száj és az állkapocs észlelésének folyamata. Számos olyan alkalmazás használja az Arc Landmark felismerési technikákat.
Korábban egy Arcfelismerő rendszert építettünk OpenCV használatával, ma ugyanazt az OpenCV-t fogjuk használni a Raspberry Pi-vel az arcpontok felismerésére. A dlib könyvtárból egy előre betanított arc mérföldkő detektor modult használnak a fő arcszerkezetek arcon való elhelyezkedésének detektálására, a python OpenCV-t pedig az észlelt arcrészek megjelenítésére használják.
Szükséges alkatrészek
Hardver alkatrészek
- Málna Pi 3
- Pi kamera modul
Szoftver és online szolgáltatások
- OpenCV
- Dlib
- Python3
Mielőtt folytatnánk ezt a Raspberry Pi 3 Facial Landmark Detection programot , először telepítenünk kell az OpenCV-t, az imutils, a dlib, a Numpy és néhány más függőséget ebben a projektben. Az OpenCV-t itt használják digitális képfeldolgozásra. A digitális képfeldolgozás leggyakoribb alkalmazásai az objektumfelismerés, az arcfelismerés és az emberek számlálója.
Ha többet szeretne megtudni a Pi kamera és a Raspberry Pi összekapcsolásáról, kövesse korábbi oktatóanyagainkat.
Az OpenCV telepítése a Raspberry Pi programba
Itt az OpenCV könyvtárat fogják használni a Raspberry Pi QR-leolvasóhoz. Az OpenCV telepítéséhez először frissítse a Raspberry Pi programot.
sudo apt-get frissítés
Ezután telepítse az OpenCV telepítéséhez szükséges függőségeket a Raspberry Pi készülékére.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 -y sudo apt-get install libqt4-teszt -y
Ezt követően telepítse az OpenCV-t a Raspberry Pi programba az alábbi paranccsal.
pip3 install opencv-contrib-python == 4.1.0.25
Korábban az OpenCV-t használtuk a Raspberry pi-vel, és rengeteg oktatóanyagot készítettünk rajta.
- Az OpenCV telepítése a Raspberry Pi-re a CMake segítségével
- Valós idejű arcfelismerés Raspberry Pi-vel és OpenCV-vel
- Rendszámfelismerés Raspberry Pi és OpenCV használatával
- A tömeg méretének becslése OpenCV és Raspberry Pi használatával
Létrehoztunk egy sor OpenCV oktatóanyagot a kezdő szinttől kezdve.
Az imutilok telepítése: Az imutilokat néhány szükséges képfeldolgozási funkció végrehajtására használják, például fordítás, forgatás, átméretezés, csontvázosítás és a Matplotlib képek egyszerűbb megjelenítése OpenCV-vel. Tehát telepítse az imutils parancsot az alábbi paranccsal:
pip3 telepítse az imutilokat
A dlib: dlib telepítése a modern eszköztár, amely a Machine Learning algoritmusokat és a valós problémák megoldására szolgáló eszközöket tartalmazza. Az alábbi paranccsal telepítse a dlib fájlt.
pip3 install dlib
A NumPy telepítése: A NumPy a tudományos számítástechnika alapkönyvtára, amely egy erőteljes n-dimenziós tömbobjektumot tartalmaz, eszközöket biztosít a C, C ++ stb. Integrálásához.
Pip3 telepítési szám
Hogyan lehet felismerni az arcrészeket a dlib használatával
A dlib könyvtár előre kiképzett arc-detektorával 68 (x, y) -koordinátát találunk, amelyek az arc arcszerkezeteihez kapcsolódnak. A dlib arc mérföldkő előrejelzője az iBUG 300-W adatkészleten van kiképezve. Az alábbiakban a 68 koordináta indexét tartalmazó kép található:
A Raspberry Pi programozása az arcpontok észleléséhez
Az arcrész- felismeréshez szükséges teljes python-kód a dlib előre kiképzett arc-detektorával az oldal végén található. A jobb megértés érdekében itt elmagyarázzuk a kód néhány fontos részét.
Tehát a szokásoknak megfelelően indítsa el a kódot az összes szükséges könyvtár beillesztésével.
from imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Ezután inicializálja a kameraobjektumot, és állítsa a felbontást (640, 480) értékre és a képkockasebességet 30 kép / mp értékre
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Most a következő sorokban használja az argumentum elemzőt az arc mérföldkő előrejelzőjének elérési útjának megadásához.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-prediktor", szükséges = True, help = "arc tereptárgy előrejelző útja") args = vars (ap.parse_args ())
A következő sorokban inicializálja a HOG-alapú dlib előre kiképzett arcérzékelőjét, és töltse be az előre kiképzett arc mérőszám előrejelzőjét.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Ezután a capture_continuous funkció segítségével kezdje el rögzíteni a képkockákat a Raspberry Pi kameráról.
képkocka keretéhez.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) kulcs = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Az „S” billentyűzet segítségével rögzíthet egy adott keretet. Ezután méretezze át a rögzített kép méretét, és alakítsa szürkeárnyalattá.
ha kulcs == ord ("s"): image = imutils.resize (kép, szélesség = 400) szürke = cv2.cvtColor (kép, cv2.COLOR_BGR2GRAY)
Használja a dlib könyvtár detektor funkcióját a rögzített kép arcainak felismerésére.
rects = detektor (szürke, 1)
Készítse el azt a képet, amelyen az arcfelismerést végezték, határozza meg az arc tereptárgyait, és alakítsa a 68 pontot NumPy tömbgé. Hurkoljon mindegyik arcrészen külön-külön.
for (i, rect) felsorolásban (rects): alak = prediktor (szürke, egyenes) shape = face_utils.shape_to_np (alak)
Ezután készítsen másolatot az eredeti képről, és használja azt a hurokhoz, hogy felhívja a képre az arc rész nevét. A szöveg színe piros lesz, az RGB értékek megváltoztatásával megváltoztathatja másik színre.
for (név, (i, j)) a face_utils.FACIAL_LANDMARKS_IDXS.tételek (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0), 255), 2)
Most végignézzük az észlelt arcrészeket, és az OpenCV rajzfunkció segítségével köröket rajzolunk ezekre az arcrészekre. Kövesse ezt az OpenCV dokumentumot a Rajz funkciókról
az (x, y) alakra: cv2.kör (klón, (x, y), 1, (0, 0, 255), -1)
Most a következő sorokban minden arcrészt külön képként fogunk kibontani egy adott arc rész koordinátáinak határoló mezőjének kiszámításával. A kivont kép átméretezésre kerül 250 képpontra.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = kép roi = imutils.resize (roi, szélesség = 250, inter = cv2.INTER_CUBIC)
Most a kód utolsó soraiban jelenítse meg az arcrészeket a nevükkel és egy külön képpel együtt. Az ESC gombbal módosíthatja az arc régióját.
cv2.imshow ("ROI", roi) cv2.imshow ("Kép", klón) cv2.waitKey (0)
Az arcrész-felismerő tesztelése
A projekt teszteléséhez hozzon létre egy könyvtárat, és keresse meg azt az alábbi parancsokkal:
mkdir arc-detektor cd arc-detektor
Most töltse le a shape_predictor_68_face_landmarks.dat fájlt erről a hivatkozásról, majd bontsa ki és másolja a shape_predictor_68_face_landmarks.dat fájlt a könyvtárba, majd nyisson meg egy új fájlt Detect.py néven, és illessze be az alább megadott kódot.
Most indítsa el a python kódot az alábbi paranccsal:
python3 Detect.py --shape-predoror shape_predictor_68_face_landmarks.dat
Megjelenik egy ablak, amely a kamera élőképét mutatja. Ezután nyomja meg az 'S' gombot, hogy kiválasszon egy keretet az élő közvetítésből. Piros pontokat fog látni a szája területén. Az ESC gombbal megtekintheti a többi arcrészt.
A teljes python kód és a bemutató videó az alábbiakban található.