- Požadované komponenty
- Instalace OpenCV na Raspberry Pi
- Jak detekovat části obličeje pomocí dlib
- Programování Raspberry Pi pro detekci mezníků obličeje
- Testování Face Recognizer
Detekce obličejových orientačních bodů je proces detekce různých částí obličeje, jako jsou obočí, oči, nos, ústa a čelist. Existuje mnoho aplikací, které používají detekční techniky orientačního bodu obličeje.
Dříve jsme stavěli systém rozpoznávání tváře pomocí OpenCV, dnes použijeme stejný OpenCV s Raspberry Pi pro detekci orientačních bodů obličeje. K detekci umístění klíčových struktur obličeje na obličeji bude použit předem vyškolený modul detektoru obličejových orientačních bodů z knihovny dlib a k vizualizaci detekovaných částí obličeje bude použit python OpenCV.
Požadované komponenty
Hardwarové komponenty
- Raspberry Pi 3
- Modul kamery Pi
Software a online služby
- OpenCV
- Dlib
- Python3
Před pokračováním v této Raspberry Pi 3 Facial Detection Landmark , nejprve musíme nainstalovat OpenCV, imutils, DLib, NumPy, a některé jiné závislostí na tomto projektu. OpenCV se zde používá pro digitální zpracování obrazu. Nejběžnějšími aplikacemi digitálního zpracování obrazu jsou detekce objektů, rozpoznávání tváře a počítadlo osob.
Pokud se chcete dozvědět více o tom, jak propojit kameru Pi s Raspberry Pi, postupujte podle našich předchozích kurzů.
Instalace OpenCV na Raspberry Pi
Zde bude knihovna OpenCV použita pro skener QR Raspberry Pi. Chcete-li nainstalovat OpenCV, nejprve aktualizujte Raspberry Pi.
sudo apt-get aktualizace
Poté nainstalujte na Raspberry Pi požadované závislosti pro instalaci OpenCV.
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 nainstalovat libqt4-test –y
Poté nainstalujte OpenCV do Raspberry Pi pomocí níže uvedeného příkazu.
pip3 nainstalujte opencv-contrib-python == 4.1.0.25
Dříve jsme OpenCV používali s Raspberry pi a vytvořili jsme k nim spoustu návodů.
- Instalace OpenCV na Raspberry Pi pomocí CMake
- Rozpoznávání tváře v reálném čase s Raspberry Pi a OpenCV
- Rozpoznávání SPZ pomocí Raspberry Pi a OpenCV
- Odhad velikosti davu pomocí OpenCV a Raspberry Pi
Také jsme vytvořili řadu výukových programů OpenCV od úrovně pro začátečníky.
Instalace imutils : imutils se používá k provádění několika nezbytných funkcí zpracování obrazu, jako je překlad, rotace, změna velikosti, skeletonizace a snadnější zobrazení obrázků Matplotlib pomocí OpenCV. Nainstalujte imutils pomocí následujícího příkazu:
pip3 nainstalujte imutils
Instalace dlib: dlib je moderní sada nástrojů, která obsahuje algoritmy strojového učení a nástroje pro řešení problémů v reálném světě. Pomocí níže uvedeného příkazu nainstalujte dlib.
pip3 nainstalujte dlib
Instalace NumPy : NumPy je základní knihovna pro vědecké výpočty, která obsahuje výkonný objekt n-dimenzionálního pole, poskytuje nástroje pro integraci C, C ++ atd.
Pip3 nainstalovat numpy
Jak detekovat části obličeje pomocí dlib
Použijeme předem vyškolený detektor mezníků obličeje knihovny dlib k detekci polohy 68 (x, y) -souřadnic, které mapují struktury obličeje na obličeji. Prediktor mezníku obličeje dlib je trénován na datové sadě iBUG 300-W. Obrázek obsahující indexy 68 souřadnic je uveden níže:
Programování Raspberry Pi pro detekci mezníků obličeje
Kompletní kód pythonu pro rozpoznávání částí obličeje s předem vyškoleným detektorem orientačních bodů obličeje je uveden na konci stránky. Zde vysvětlujeme některé důležité části kódu pro lepší pochopení.
Jako obvykle tedy spusťte kód zahrnutím všech požadovaných knihoven.
z imutils import face_utils import numpy jako np import argparse import imutils import dlib import cv2 z picamera.array import PiRGBArray z picamera import PiCamera
Poté inicializujte objekt kamery a nastavte rozlišení na (640, 480) a snímkovou frekvenci na 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Nyní v dalších řádcích použijte analyzátor argumentů k poskytnutí cesty k prediktoru orientačního bodu obličeje.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-prediktor", required = True, help = "cesta předpovědi orientačního bodu obličeje") args = vars (ap.parse_args ())
V dalších řádcích inicializujte předem vyškolený detektor obličeje dlib založený na HOG a načtěte předem vyškolený prediktor obličejového orientačního bodu.
detektor = dlib.get_frontal_face_detector () prediktor = dlib.shape_predictor (args)
Poté pomocí funkce capture_continuous začněte snímat snímky z kamery Raspberry Pi.
pro snímek v camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Pomocí klávesy „S“ pořiďte konkrétní snímek. Poté změňte velikost zachyceného obrázku a převeďte jej na stupně šedi.
if key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
K detekci tváří v zachyceném obrazu použijte funkci detektoru knihovny dlib.
recty = detektor (šedý, 1)
Pořiďte snímek, na kterém byla provedena detekce obličeje, určete orientační body obličeje a převeďte 68 bodů do pole NumPy. Obtočte jednotlivě každou z oblastí obličeje.
for (i, rect) in enumerate (rects): tvar = prediktor (šedá, přímá) tvar = face_utils.shape_to_np (tvar)
Potom se kopii původního snímku a použít ji pro smyčce k tomu názvu obličejové části na obraze. Barva textu bude červená, můžete ji změnit na jinou barvu změnou hodnot RGB.
for (name, (i, j)) in face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0,7, (0, 0), 255), 2)
Nyní provedeme smyčku přes detekované části obličeje a pomocí funkce kreslení OpenCV nakreslíme kruhy na tyto části obličeje. V tomto dokumentu OpenCV najdete další informace o funkcích kreslení
pro (x, y) ve tvaru: cv2.circle (klon, (x, y), 1, (0, 0, 255), -1)
Nyní v dalších řádcích extrahujeme každou část obličeje jako samostatný obrázek výpočtem ohraničujícího rámečku souřadnic konkrétní části obličeje. Velikost extrahovaného obrázku bude změněna na 250 pixelů.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = obrázek roi = imutils.resize (roi, šířka = 250, inter = cv2.INTER_CUBIC)
Nyní v posledních řádcích kódu zobrazte části obličeje s jejich názvy a samostatný obrázek této části. Pomocí klávesy ESC změňte oblast obličeje.
cv2.imshow ("ROI", roi) cv2.imshow ("Obrázek", klon) cv2.waitKey (0)
Testování Face Recognizer
Chcete-li projekt otestovat, vytvořte adresář a přejděte do něj pomocí následujících příkazů:
mkdir detektor obličeje a obličeje cd detektor obličeje a obličeje
Nyní z tohoto odkazu stáhněte soubor shape_predictor_68_face_landmarks.dat a poté v této knihovně extrahujte a zkopírujte soubor shape_predictor_68_face_landmarks.dat a poté otevřete nový soubor s názvem detect.py a vložte níže uvedený kód.
Nyní spusťte kód pythonu pomocí následujícího příkazu:
python3 detect.py --shape-prediktor shape_predictor_68_face_landmarks.dat
Uvidíte okno zobrazující živý pohled z kamery. Poté stiskněte klávesu „S“ a vyberte snímek z přímého přenosu. Na oblasti úst uvidíte červené tečky. Pomocí klávesy ESC zobrazíte další části obličeje.
Kompletní kód pythonu a ukázkové video jsou uvedeny níže.