- Súčasti sú povinné
- Inštalácia OpenCV na Raspberry Pi
- Ako detekovať časti tváre pomocou dlib
- Programovanie Raspberry Pi na detekciu medzníkov tváre
- Testovanie rozpoznávača častí tváre
Detekcia orientačných bodov tváre je proces detekcie rôznych častí tváre, ako sú obočie, oči, nos, ústa a čeľusť. Existuje veľa aplikácií, ktoré používajú detekčné techniky orientačného bodu tváre.
Predtým sme stavali systém rozpoznávania tváre pomocou OpenCV, dnes budeme na detekciu orientačných bodov tváre používať rovnaký OpenCV s Raspberry Pi. Na detekciu polohy kľúčových štruktúr tváre na tvári sa použije vopred vyškolený modul detektora tvárových orientačných bodov z knižnice dlib a na vizualizáciu detekovaných častí tváre sa použije python OpenCV.
Súčasti sú povinné
Hardvérové komponenty
- Raspberry Pi 3
- Modul kamery Pi
Softvér a online služby
- OpenCV
- Dlib
- Python3
Pred pokračovaním v tejto Raspberry Pi 3 Facial Detection Landmark , najprv musíme nainštalovať OpenCV, imutils, DLib, NumPy, a niektoré iné závislosťou na tomto projekte. OpenCV sa tu používa na digitálne spracovanie obrazu. Najbežnejšie aplikácie digitálneho spracovania obrazu sú detekcia objektov, rozpoznávanie tváre a počítanie osôb.
Ak sa chcete dozvedieť viac informácií o tom, ako prepojiť kameru Pi s Raspberry Pi, postupujte podľa našich predchádzajúcich návodov.
Inštalácia OpenCV na Raspberry Pi
Tu sa použije knižnica OpenCV pre skener QR Raspberry Pi. Ak chcete nainštalovať OpenCV, najskôr aktualizujte Raspberry Pi.
sudo apt-get aktualizácia
Potom nainštalujte požadované závislosti pre inštaláciu OpenCV na vašom Raspberry Pi.
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 nainštalovať libqt4-test –y
Potom nainštalujte OpenCV na Raspberry Pi pomocou nižšie uvedeného príkazu.
pip3 nainštaluj opencv-contrib-python == 4.1.0.25
Predtým sme používali program OpenCV s programom Raspberry pi a vytvorili sme k nemu množstvo návodov.
- Inštalácia OpenCV na Raspberry Pi pomocou CMake
- Rozpoznávanie tváre v reálnom čase s Raspberry Pi a OpenCV
- Rozpoznávanie ŠPZ pomocou Raspberry Pi a OpenCV
- Odhad veľkosti davu pomocou OpenCV a Raspberry Pi
Tiež sme vytvorili sériu tutoriálov OpenCV začínajúcich od úrovne začiatočníkov.
Inštalácia imutils : imutils sa používa na vykonávanie niekoľkých potrebných funkcií spracovania obrazu, ako je preklad, rotácia, zmena veľkosti, skeletonizácia a jednoduchšie zobrazovanie obrázkov Matplotlib pomocou OpenCV. Nainštalujte teda imutils pomocou príkazu dole:
pip3 nainštalovať imutils
Inštalácia dlib: dlib je moderná sada nástrojov, ktorá obsahuje algoritmy strojového učenia a nástroje na riešenie problémov v reálnom svete. Pomocou nižšie uvedeného príkazu nainštalujte dlib.
pip3 nainštalovať dlib
Inštalácia NumPy : NumPy je hlavná knižnica pre vedecké výpočty, ktorá obsahuje výkonný objekt n-dimenzionálneho poľa, poskytuje nástroje na integráciu C, C ++ atď.
Pip3 nainštalovať numpy
Ako detekovať časti tváre pomocou dlib
Použijeme preškolený detektor tvárových orientačných prvkov knižnice dlib na detekciu polohy 68 (x, y) súradníc, ktoré sa mapujú na tvárové štruktúry na tvári. Prediktor orientačného bodu tváre dlib je trénovaný na datasete iBUG 300-W. Obrázok obsahujúci indexy 68 súradníc je uvedený nižšie:
Programovanie Raspberry Pi na detekciu medzníkov tváre
Kompletný kód v jazyku Python pre rozpoznávanie častí tváre s vopred vyškoleným detektorom orientačných bodov tváre dlib je uvedený na konci stránky. Tu vysvetľujeme niektoré dôležité časti kódu pre lepšie pochopenie.
Ako obvykle teda začnite kód zahrnutím všetkých požadovaných knižníc.
z imutils import face_utils import numpy ako np import argparse import imutils import dlib import cv2 z picamera.array import PiRGBArray z picamera import PiCamera
Potom inicializujte objekt fotoaparátu a nastavte rozlíšenie na (640, 480) a snímkovú frekvenciu na 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Teraz v ďalších riadkoch použite syntaktický analyzátor argumentov na poskytnutie cesty k prediktoru orientačného bodu tváre.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", required = True, help = "cesta prediktora orientačného bodu tváre") args = vars (ap.parse_args ())
V ďalších riadkoch inicializujte vopred vyškolený detektor tváre dlib založený na HOG a načítajte vopred vyškolený prediktor medzníka tváre.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Potom pomocou funkcie capture_continuous začnite snímať snímky z kamery Raspberry Pi.
pre rám v camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", obrázok) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Pomocou klávesu „S“ nasnímajte konkrétny snímok. Potom zmeňte veľkosť nasnímaného obrázka a preveďte ho na stupne šedej.
if key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Na detekciu tvárí na zachytenom obrázku použite funkciu detektora knižnice dlib.
recty = detektor (sivý, 1)
Nasnímajte obrázok, na ktorom sa vykonala detekcia tváre, určte orientačné body tváre a preveďte 68 bodov do poľa NumPy. Obtočte každú z oblastí tváre jednotlivo.
pre (i, rect) v enumerate (rects): tvar = prediktor (sivý, priamy) tvar = face_utils.shape_to_np (tvar)
Potom vezmite kópiu pôvodného obrázka a pomocou neho na slučku nakreslite na tvár názov časti tváre. Farba textu bude červená, môžete ju zmeniť na inú farbu zmenou hodnôt RGB.
pre (meno, (i, j)) v face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (klon, meno, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0,7, (0, 0), 255), 2)
Teraz urobíme slučku nad detekovanými časťami tváre a pomocou funkcie kreslenia OpenCV nakreslíme kruhy na tieto časti tváre. V tomto dokumente OpenCV nájdete ďalšie informácie o funkciách kreslenia
pre (x, y) v tvare: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Teraz v ďalších riadkoch extrahujeme každú časť tváre ako samostatný obrázok výpočtom ohraničovacieho poľa súradníc konkrétnej časti tváre. Veľkosť extrahovaného obrázka sa zmení na 250 pixelov.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = obrázok roi = imutils.resize (roi, šírka = 250, inter = cv2.INTER_CUBIC)
Teraz v posledných riadkoch kódu zobrazte časti tváre s ich názvami a samostatný obrázok tejto časti. Pomocou klávesu ESC zmeňte oblasť tváre.
cv2.imshow ("ROI", roi) cv2.imshow ("Obrázok", klon) cv2.waitKey (0)
Testovanie rozpoznávača častí tváre
Ak chcete projekt otestovať, vytvorte adresár a prejdite doň pomocou nasledujúcich príkazov:
detektor tváre-časti mkdir cd detektor časti tváre
Teraz si z tohto odkazu stiahnite súbor shape_predictor_68_face_landmarks.dat, potom v tejto knižnici extrahujte a skopírujte súbor shape_predictor_68_face_landmarks.dat, potom otvorte nový súbor s názvom detect.py a vložte nasledujúci kód.
Teraz spustite kód pythonu pomocou nasledujúceho príkazu:
python3 detect.py --shape-prediktor shape_predictor_68_face_landmarks.dat
Uvidíte okno so živým náhľadom kamery. Potom stlačte kláves „S“ a vyberte rámček z priameho prenosu. Na oblasti úst uvidíte červené bodky. Pomocou klávesu ESC uvidíte ďalšie časti tváre.
Kompletný pythonovský kód a ukážkové video sú uvedené nižšie.