- Nepieciešamās sastāvdaļas
- OpenCV instalēšana Raspberry Pi
- Kā noteikt sejas daļas, izmantojot dlib
- Aveņu Pi programmēšana sejas orientieru noteikšanai
- Sejas daļas atpazīšanas ierīces pārbaude
Sejas orientieru noteikšana ir dažādu sejas daļu noteikšana, piemēram, uzacis, acis, deguns, mute un žoklis. Ir daudz lietojumprogrammu, kurās tiek izmantotas sejas orientieru noteikšanas metodes.
Iepriekš mēs veidojām sejas atpazīšanas sistēmu, izmantojot OpenCV, šodien sejas orientieru noteikšanai izmantosim to pašu OpenCV ar Raspberry Pi. Iepriekš apmācīts sejas orientieru detektora modulis no dlib bibliotēkas tiks izmantots, lai noteiktu galveno sejas struktūru atrašanās vietu uz sejas, un python OpenCV tiks izmantots, lai vizualizētu atklātās sejas daļas.
Nepieciešamās sastāvdaļas
Aparatūras komponenti
- Aveņu Pi 3
- Pi kameras modulis
Programmatūra un tiešsaistes pakalpojumi
- OpenCV
- Dlib
- Python3
Pirms turpināt šo Raspberry Pi 3 sejas orientieru noteikšanu , vispirms mums jāinstalē OpenCV, imutils, dlib, Numpy un dažas citas atkarības no šī projekta. Digitālo attēlu apstrādei šeit tiek izmantots OpenCV. Visizplatītākās digitālās attēlu apstrādes programmas ir objektu noteikšana, sejas atpazīšana un cilvēku skaitītājs.
Lai uzzinātu vairāk par to, kā sazināties ar Pi kameru ar Raspberry Pi, izpildiet mūsu iepriekšējās apmācības.
OpenCV instalēšana Raspberry Pi
Šeit OpenCV bibliotēka tiks izmantota Raspberry Pi QR skenerim. Lai instalētu OpenCV, vispirms atjauniniet Raspberry Pi.
sudo apt-get atjauninājums
Pēc tam instalējiet nepieciešamās atkarības OpenCV instalēšanai savā 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 install libqt4-test –y
Pēc tam instalējiet OpenCV Raspberry Pi, izmantojot zemāk esošo komandu.
pip3 instalēt opencv-contrib-python == 4.1.0.25
Iepriekš mēs izmantojām OpenCV ar Raspberry pi un izveidojām tajā daudz apmācību.
- OpenCV instalēšana Raspberry Pi, izmantojot CMake
- Reāllaika sejas atpazīšana ar Raspberry Pi un OpenCV
- Valsts numura pazīšana, izmantojot Raspberry Pi un OpenCV
- Pūļa lieluma novērtēšana, izmantojot OpenCV un Raspberry Pi
Mēs esam izveidojuši arī virkni OpenCV apmācību, sākot no iesācēju līmeņa.
Imutils instalēšana: imutils tiek izmantots, lai izpildītu dažas nepieciešamās attēlu apstrādes funkcijas, piemēram, tulkošanu, pagriešanu, izmēru maiņu, skeletonizāciju un Matplotlib attēlu parādīšanu vieglāk, izmantojot OpenCV. Tāpēc instalējiet imutils, izmantojot komandu zemāk:
instalējiet imutils
Dlib: dlib instalēšana ir mūsdienīgs rīkkopa, kas satur mašīnmācīšanās algoritmus un rīkus reālu problēmu risināšanai. Izmantojiet zemāk esošo komandu, lai instalētu dlib.
pip3 instalēt dlib
NumPy instalēšana: NumPy ir zinātniskās skaitļošanas pamatbibliotēka, kas satur jaudīgu n-dimensiju masīva objektu, nodrošina rīkus C, C ++ integrēšanai utt.
Pip3 instalēšanas numpy
Kā noteikt sejas daļas, izmantojot dlib
Mēs izmantosim dlib bibliotēkas iepriekš apmācītu sejas orientieru detektoru, lai noteiktu 68 (x, y) -koordinātu atrašanās vietu, kas atbilst sejas sejas struktūrām. dlib sejas orientieris pareģotājs tiek apmācīts iBUG 300-W datu kopā. Attēls ar 68 koordinātu rādītājiem ir norādīts zemāk:
Aveņu Pi programmēšana sejas orientieru noteikšanai
Pilnīgs sejas daļu atpazīšanas pitona kods ar dlib iepriekš apmācītu sejas orientieru detektoru ir norādīts lapas beigās. Šeit mēs izskaidrojam dažas svarīgas koda daļas labākai izpratnei.
Tātad, kā parasti, sāciet kodu, iekļaujot visas nepieciešamās bibliotēkas.
no imutils importa face_utils importa numpy kā np imports argparse imports imutils importēt dlib import cv2 no picamera.array imports PiRGBArray no picamera importēt PiCamera
Pēc tam inicializējiet kameras objektu un iestatiet izšķirtspēju uz (640, 480) un kadru ātrumu uz 30 kadriem / s
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Tagad nākamajās rindās izmantojiet argumentu parsētāju, lai sniegtu ceļu uz sejas orientieru prognozētāju.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-prediktors", obligāts = True, help = "sejas orientiera prognozētāja ceļš") args = vars (ap.parse_args ())
Nākamajās rindās inicializējiet HL balstīto dlib iepriekš apmācīto sejas detektoru un ielādējiet iepriekš apmācīto sejas orientieri.
detektors = dlib.get_frontal_face_detector () pareģotājs = dlib.shape_predictor (args)
Pēc tam izmantojiet funkciju capture_continuous, lai sāktu kadru uzņemšanu no Raspberry Pi kameras.
kadram kamerā.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", attēls) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Izmantojiet tastatūras taustiņu “S”, lai tvertu konkrētu rāmi. Pēc tam mainiet uzņemtā attēla izmēru un pārveidojiet to pelēktoņos.
ja atslēga == ord ("s"): attēls = imutils.resize (attēls, platums = 400) pelēks = cv2.cvtColor (attēls, cv2.COLOR_BGR2GRAY)
Izmantojiet dlib bibliotēkas detektora funkciju, lai atrastu sejas uzņemtajā attēlā.
rekti = detektors (pelēks, 1)
Uzņemiet attēlu, kurā tika veikta sejas noteikšana, nosakiet sejas orientierus un pārveidojiet 68 punktus par NumPy masīvu. Cilpa pāri katram sejas reģionam atsevišķi.
priekš (i, taisni) uzskaitījumā (rekti): forma = pareģotājs (pelēks, taisns) forma = seja_lietas.forma_to_np (forma)
Tad paņemiet oriģināla attēla kopiju un izmantojiet to cilpa, lai uz attēla uzzīmētu sejas daļas nosaukumu. Teksta krāsa būs sarkana, to var mainīt uz citu krāsu, mainot RGB vērtības.
vietnei (nosaukums, (i, j)) face_utils.FACIAL_LANDMARKS_IDXS.elements (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Tagad mēs pievērsīsimies konstatētajām sejas daļām un izmantosim OpenCV zīmēšanas funkciju, lai zīmētu apļus uz šīm sejas daļām. Lai iegūtu papildinformāciju par funkcijām Zīmēšana, varat sekot šim OpenCV dokumentam
(x, y) formai: cv2 aplis (klons, (x, y), 1, (0, 0, 255), -1)
Tagad nākamajās rindās katra sejas daļa tiks izvilkta kā atsevišķs attēls, aprēķinot konkrētās sejas daļas koordinātu ierobežojošo lodziņu. Izvilktā attēla lielums tiks mainīts līdz 250 pikseļiem.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = attēls roi = imutils.resize (roi, platums = 250, inter = cv2.INTER_CUBIC)
Tagad pēdējās koda rindās parādiet sejas daļas ar to nosaukumiem un atsevišķu šīs daļas attēlu. Izmantojiet taustiņu ESC, lai mainītu sejas reģionu.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", klons) cv2.waitKey (0)
Sejas daļas atpazīšanas ierīces pārbaude
Lai pārbaudītu projektu, izveidojiet direktoriju un dodieties uz to, izmantojot tālāk norādītās komandas.
mkdir sejas daļas detektors cd sejas daļas detektors
Tagad no šīs saites lejupielādējiet shape_predictor_68_face_landmarks.dat failu un pēc tam šajā bibliotēkā izvelciet un nokopējiet failu shape_predictor_68_face_landmarks.dat un pēc tam atveriet jaunu failu ar nosaukumu detect.py un ielīmējiet zemāk norādīto kodu.
Tagad palaidiet pitona kodu, izmantojot šādu komandu:
python3 detektēt.py --shape-prediktors shape_predictor_68_face_landmarks.dat
Tiks parādīts logs, kurā būs redzams tiešraides skats no jūsu kameras. Pēc tam nospiediet taustiņu S, lai no tiešraides izvēlētos rāmi. Mutes zonā redzēsiet sarkanus punktus. Izmantojiet taustiņu ESC, lai redzētu citas sejas daļas.
Pilns pitona kods un demonstrācijas video ir sniegti zemāk.