- Tarvittavat komponentit
- OpenCV: n asentaminen Raspberry Pi: hen
- Kasvojen osien tunnistaminen dlibillä
- Vadelma Pi: n ohjelmointi kasvomerkkien havaitsemiseen
- Kasvotunnistimen testaaminen
Kasvomaamerkkien havaitseminen on prosessi, jolla havaitaan kasvojen eri osat, kuten kulmakarvat, silmät, nenä, suu ja leuka. Kasvomaamerkkien tunnistustekniikoita käytetään monissa sovelluksissa.
Aiemmin rakensimme kasvojentunnistusjärjestelmän OpenCV: n avulla, tänään käytämme samaa OpenCV: tä Raspberry Pi: n kanssa maamerkkien havaitsemiseen. Dlib-kirjaston esikoulutettua kasvojen maamerkkiilmaisinmoduulia käytetään kasvojen tärkeimpien kasvorakenteiden paikantamiseen ja python OpenCV: tä käytetään havaittujen kasvojen osien visualisointiin.
Tarvittavat komponentit
Laitteiston komponentit
- Vadelma Pi 3
- Pi-kameramoduuli
Ohjelmistot ja verkkopalvelut
- OpenCV
- Dlib
- Python 3
Ennen tämän Raspberry Pi 3 kasvojen Landmark Detection , ensin meidän täytyy asentaa OpenCV, imutils, dlib, Numpy, ja joitakin muita riippuvuuksia tässä projektissa. OpenCV: tä käytetään tässä digitaaliseen kuvankäsittelyyn. Digitaalisen kuvankäsittelyn yleisimmät sovellukset ovat kohteiden tunnistus, kasvojentunnistus ja ihmiset laskevat.
Jos haluat lisätietoja Pi-kameran liittämisestä Raspberry Pi: hen, seuraa edellisiä oppaita.
OpenCV: n asentaminen Raspberry Pi: hen
Täällä OpenCV-kirjastoa käytetään Raspberry Pi QR-skanneriin. Asenna OpenCV päivittämällä ensin Raspberry Pi.
sudo apt-get -päivitys
Asenna sitten tarvittavat riippuvuudet OpenCV: n asentamiseksi Raspberry Pi -laitteeseesi.
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-test –y
Tämän jälkeen asenna OpenCV Raspberry Pi -ohjelmaan alla olevan komennon avulla.
pip3 install opencv-contrib-python == 4.1.0.25
Aiemmin käytimme OpenCV: tä Raspberry pi: n kanssa ja loimme siihen paljon opetusohjelmia.
- OpenCV: n asentaminen Raspberry Pi: lle CMaken avulla
- Reaaliaikainen kasvojentunnistus Raspberry Pi: n ja OpenCV: n avulla
- Rekisterikilven tunnistus Raspberry Pi: n ja OpenCV: n avulla
- Joukon koon arviointi käyttämällä OpenCV: tä ja Vadelma Pi: tä
Olemme myös luoneet sarjan OpenCV-oppaita alkaen aloittelijan tasosta.
Imutiilien asentaminen: imutiileja käytetään muutamien tarvittavien kuvankäsittelytoimintojen suorittamiseen, kuten käännös, kääntö, koon muuttaminen, luuranko ja Matplotlib-kuvien näyttäminen helpommin OpenCV: n avulla. Joten asenna imutils käyttämällä alla olevaa komentoa:
pip3 asenna imutils
Dlib: dlib on moderni työkalupakki, joka sisältää koneoppimisen algoritmeja ja työkaluja reaalimaailman ongelmiin. Asenna dlib alla olevan komennon avulla.
pip3 asenna dlib
NumPy : n asentaminen: NumPy on tieteellisen laskennan ydinkirjasto, joka sisältää tehokkaan n-ulotteisen taulukkoobjektin, tarjoaa työkaluja C: n, C ++: n jne. Integrointiin.
Pip3-asennusnumero
Kasvojen osien tunnistaminen dlibillä
Aiomme käyttää dlib-kirjaston esikoulutettua kasvojen maamerkkiilmaisinta 68 (x, y) -koordinaatin sijainnin havaitsemiseen, jotka kartoittavat kasvojen kasvorakenteita. dlib-kasvomerkkien ennustaja on koulutettu iBUG 300-W -tietojoukossa. Alla on kuva, joka sisältää 68 koordinaatin indeksit:
Vadelma Pi: n ohjelmointi kasvomerkkien havaitsemiseen
Täydellinen python-koodi kasvojen osien tunnistamiseen dlibin esikoulutetulla kasvojen maamerkkiilmaisimella annetaan sivun lopussa. Tässä selitämme joitain tärkeitä koodin osia ymmärtämisen parantamiseksi.
Joten, kuten tavallista, aloita koodi sisällyttämällä kaikki vaaditut kirjastot.
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
Alusta sitten kamerakohde ja aseta resoluutio (640, 480) ja kuvataajuus 30 fps
kamera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Anna seuraavilla riveillä polku kasvomaamerkkien ennustimeen seuraavilla riveillä.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predor", vaaditaan = True, help = "kasvojen maamerkin ennustajapolku") args = vars (ap.parse_args ())
Alusta seuraavilla riveillä HOG-pohjaisen dlibin esikoulutettu kasvotunnistin ja lataa ennalta koulutettu kasvojen maamerkkiennuste.
detector = dlib.get_frontal_face_detector () ennustaja = dlib.shape_predictor (args)
Käytä sitten sieppauksen jatkuvaa -toimintoa aloittaaksesi kehysten kaappaamisen Raspberry Pi -kamerasta.
kameran kehykselle.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Käytä tietyn kehyksen näppäimistön S-näppäintä. Muuta sitten otetun kuvan kokoa ja muunna se harmaasävyksi.
jos avain == ord ("s"): kuva = imutils.resize (kuva, leveys = 400) harmaa = cv2.cvtColor (kuva, cv2.COLOR_BGR2GRAY)
Käytä dlib-kirjaston ilmaisintoimintoa havaitaksesi otetut kuvat kasvot.
rects = ilmaisin (harmaa, 1)
Ota kuva, jolla kasvojentunnistus suoritettiin, määritä kasvojen maamerkit ja muunna 68 pistettä NumPy-ryhmäksi. Silmukka jokaisen kasvoalueen yli erikseen.
for (i, rect) -luettelossa (rects): shape = ennustaja (harmaa, suora) shape = face_utils.shape_to_np (shape)
Ota sitten kopio alkuperäisestä kuvasta ja käytä sitä silmukan avulla piirtämään kasvon osan nimi kuvaan. Tekstin väri on punainen, voit vaihtaa sen toiseen väriin muuttamalla RGB-arvoja.
kohteelle (nimi, (i, j)) face_utils.FACIAL_LANDMARKS_IDXS.tems (): clone = image.copy () cv2.putText (klooni, nimi, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0,7, (0, 0), 255), 2)
Nyt silmukka havaittujen kasvojen osien yli ja piirrämme ympyröitä näille kasvoille OpenCV- piirustustoiminnon avulla. Voit seurata tätä OpenCV-asiakirjaa saadaksesi lisätietoja piirustustoiminnoista
(x, y): lle muodoltaan: cv2. ympyrä (klooni, (x, y), 1, (0, 0, 255), -1)
Seuraavilla riveillä puretaan kukin kasvo-osa erillisenä kuvana laskemalla tietyn kasvo-osan koordinaattien rajoitusruutu. Poimitun kuvan koko muutetaan 250 pikseliksi.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = kuva roi = imutils.resize (roi, leveys = 250, inter = cv2.INTER_CUBIC)
Näytä nyt koodin viimeisillä riveillä kasvojen osat ja niiden nimet sekä erillinen kuva siitä osasta. Käytä ESC-näppäintä vaihtaaksesi kasvojen aluetta.
cv2.imshow ("ROI", roi) cv2.imshow ("Kuva", klooni) cv2.waitKey (0)
Kasvotunnistimen testaaminen
Testaa projekti luomalla hakemisto ja siirtymällä siihen alla olevien komentojen avulla:
mkdir kasvo-osa-ilmaisin cd kasvo-osa-ilmaisin
Lataa nyt shape_predictor_68_face_landmarks.dat-tiedosto tästä linkistä ja pura ja kopioi shape_predictor_68_face_landmarks.dat- tiedosto tähän kirjastoon ja avaa uusi tiedosto nimeltä Detect.py ja liitä alla annettu koodi.
Käynnistä nyt python-koodi alla olevan komennon avulla:
python3 Detect.py --shape-predorator shape_predictor_68_face_landmarks.dat
Näet ikkunan, joka näyttää kameran reaaliaikanäkymän. Paina sitten 'S' -näppäintä valitaksesi kehyksen suoratoistosta. Näet punaisia pisteitä suusi alueella. Käytä ESC-näppäintä nähdäksesi muut kasvojen osat.
Täydellinen python-koodi ja esittelyvideo on annettu alla.