- Būtini komponentai
- „OpenCV“ diegimas „Raspberry Pi“
- Kaip nustatyti veido dalis naudojant dlib
- „Raspberry Pi“ programavimas veido orientyrams aptikti
- Veido dalies atpažinimo priemonės testavimas
Veido orientyrų nustatymas yra įvairių veido dalių, tokių kaip antakiai, akys, nosis, burna ir žandikaulis, aptikimo procesas. Yra daug programų, naudojančių veido orientyrų aptikimo metodus.
Anksčiau mes kūrėme veido atpažinimo sistemą naudodami „OpenCV“, šiandien veido orientyrams aptikti naudosime tą patį „OpenCV“ su „Raspberry Pi“. Iš anksto apmokytas veido orientyrų detektoriaus modulis iš „dlib“ bibliotekos bus naudojamas pagrindinių veido struktūrų vietai nustatyti ant veido, o „Python OpenCV“ bus naudojamas aptiktoms veido dalims vizualizuoti.
Būtini komponentai
Aparatinės įrangos komponentai
- Aviečių Pi 3
- „Pi“ fotoaparato modulis
Programinė įranga ir internetinės paslaugos
- „OpenCV“
- Dlib
- „Python“
Prieš pradėdami šį „ Raspberry Pi 3“ veido orientyrų aptikimą , pirmiausia turime įdiegti „OpenCV“, „imutils“, „dlib“, „Numpy“ ir kai kurias kitas šio projekto priklausomybes. „OpenCV“ čia naudojamas skaitmeniniam vaizdų apdorojimui. Dažniausios skaitmeninio vaizdo apdorojimo programos yra objektų aptikimas, veido atpažinimas ir žmonių skaitiklis.
Norėdami sužinoti daugiau apie tai, kaip susieti „Pi“ kamerą su „Raspberry Pi“, vadovaukitės ankstesnėmis mūsų pamokomis.
„OpenCV“ diegimas „Raspberry Pi“
Čia „OpenCV“ biblioteka bus naudojama „Raspberry Pi“ QR skaitytuvui. Norėdami įdiegti „OpenCV“, pirmiausia atnaujinkite „Raspberry Pi“.
sudo apt-get atnaujinimas
Tada įdiekite reikalingas „OpenCV“ diegimo „Raspberry Pi“ priklausomybes.
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
Po to įdiekite „OpenCV“ į „Raspberry Pi“ naudodami žemiau esančią komandą.
„pip3 install“ „opencv-contrib-python“ == 4.1.0.25
Anksčiau mes naudojome „OpenCV“ su „Raspberry pi“ ir sukūrėme jame daugybę vadovėlių.
- „OpenCV“ įdiegimas į „Raspberry Pi“ naudojant „CMake“
- Veido atpažinimas realiuoju laiku naudojant „Raspberry Pi“ ir „OpenCV“
- Valstybinio numerio atpažinimas naudojant „Raspberry Pi“ ir „OpenCV“
- Minios dydžio įvertinimas naudojant „OpenCV“ ir „Raspberry Pi“
Mes taip pat sukūrėme keletą „OpenCV“ mokymo programų, pradedant pradedančiųjų lygiu.
„ Imutils“ diegimas: „ imutils“ yra naudojamas kelioms būtinoms vaizdo apdorojimo funkcijoms, tokioms kaip vertimas, pasukimas, dydžio keitimas, skeletų formavimas ir „Matplotlib“ vaizdų pateikimas lengviau naudojant „OpenCV“, vykdyti. Taigi įdiekite „ imutils“ naudodami žemiau esančią komandą:
pip3 įdiekite imutils
„Dlib: dlib“ diegimas yra šiuolaikinis įrankių rinkinys, kuriame yra mašininio mokymosi algoritmai ir įrankiai realioms problemoms spręsti. Norėdami įdiegti dlib, naudokite žemiau esančią komandą.
pip3 įdiekite dlib
„ NumPy“ diegimas: „ NumPy“ yra pagrindinė mokslinio skaičiavimo biblioteka, kurioje yra galingas n matmenų masyvo objektas, pateikiami įrankiai integruoti C, C ++ ir kt.
„Pip3“ diegimo numeris
Kaip nustatyti veido dalis naudojant dlib
Mes naudosime iš anksto apmokytą dlib bibliotekos veido orientyrų detektorių, kad nustatytume 68 (x, y) koordinatių vietą, nurodančią veido struktūras. „dlib“ veido orientyras nuspėja apie iBUG 300-W duomenų rinkinį. Žemiau pateiktas vaizdas, kuriame yra 68 koordinačių indeksai:
„Raspberry Pi“ programavimas veido orientyrams aptikti
Puslapio pabaigoje pateikiamas pilnas veido dalių atpažinimo pitono kodas su iš anksto apmokytu „ dlib“ veido orientyrų detektoriumi. Čia mes paaiškiname keletą svarbių kodo dalių, kad geriau suprastume.
Taigi, kaip įprasta, pradėkite kodą įtraukdami visas reikalingas bibliotekas.
iš imutils importuoti face_utils importuoti numpy kaip np importuoti argparse importuoti imutils importuoti dlib import cv2 iš picamera.array importuoti PiRGBArray iš picamera importuoti PiCamera
Tada inicializuokite fotoaparato objektą ir nustatykite (640, 480) skiriamąją gebą, o kadrų greitį - 30 kadrų per sekundę
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Dabar kitose eilutėse naudokite argumentų analizatorių, kad pateiktumėte kelią į veido orientyrą.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "- Shape-prediktorius", reikalingas = True, help = "veido orientyras prognozavimo kelias") args = vars (ap.parse_args ())
Kitose eilutėse inicializuokite iš anksto apmokytą „DLIB“ pagrindu parengtą dlib veido detektorių ir įkelkite iš anksto apmokytą veido orientyrą.
detektorius = dlib.get_frontal_face_detector () prediktorius = dlib.shape_predictor (argumentai)
Tada naudokite „ capture_continuous“ funkciją, kad pradėtumėte fiksuoti kadrus iš „Raspberry Pi“ kameros.
kadrui kameroje.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", image) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Norėdami užfiksuoti tam tikrą kadrą, naudokite klaviatūros klavišą „S“. Tada pakeiskite užfiksuoto vaizdo dydį ir paverskite jį pilkos spalvos.
if key == ord ("s"): image = imutils.resize (image, width = 400) grey = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Norėdami nustatyti užfiksuoto vaizdo veidus, naudokite „dlib“ bibliotekos detektoriaus funkciją.
stačiakampiai = detektorius (pilkas, 1)
Padarykite nuotrauką, kurioje buvo atliktas veido aptikimas, nustatykite veido orientyrus ir paverskite 68 taškus masyvu „NumPy“. Apsilankykite kiekviename veido regione atskirai.
už (i, rect) suskaičiuoti (stačiakampiai): shape = prediktorius (pilkas, tiesus) shape = face_utils.shape_to_np (shape)
Tada paimkite originalaus atvaizdo kopiją ir naudokite ją kilpai, kad nupieštumėte veido dalies pavadinimą. Teksto spalva bus raudona, pakeisdami RGB reikšmes galite ją pakeisti į kitą.
for (vardas, (i, j)) „face_utils“. FACIAL_LANDMARKS_IDXS.tems (): clone = image.copy () cv2.putText (clone, name, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
Dabar mes peržengsime aptiktas veido dalis ir naudosime „ OpenCV“ piešimo funkciją, norėdami piešti apskritimus ant šių veido dalių. Jei norite gauti daugiau informacijos apie piešimo funkcijas, galite sekti šį „OpenCV“ dokumentą
(x, y) formos: cv2. ratas (klonas, (x, y), 1, (0, 0, 255), -1)
Dabar kitose eilutėse kiekvieną veido dalį išskirsime kaip atskirą vaizdą, apskaičiuodami konkrečios veido dalies koordinačių ribojimo langelį. Ištrauktas vaizdas bus pakeistas į 250 taškų dydį.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = vaizdas roi = imutils.resize (roi, plotis = 250, inter = cv2.INTER_CUBIC)
Dabar paskutinėse kodo eilutėse parodykite veido dalis su jų pavadinimais ir atskirą tos dalies vaizdą. Norėdami pakeisti veido sritį, naudokite klavišą ESC.
cv2.imshow ("ROI", roi) cv2.imshow ("Image", clone) cv2.waitKey (0)
Veido dalies atpažinimo priemonės testavimas
Norėdami išbandyti projektą, sukurkite katalogą ir eikite į jį naudodami šias komandas:
mkdir veido detektorius cd veido detektorius
Dabar atsisiųskite failą shape_predictor_68_face_landmarks.dat iš šios nuorodos, tada ištraukite ir nukopijuokite shape_predictor_68_face_landmarks.dat failą šioje bibliotekoje, tada atidarykite naują failą pavadinimu detect.py ir įklijuokite žemiau pateiktą kodą.
Dabar paleiskite python kodą naudodami žemiau esančią komandą:
python3 aptikti.py - formos prognozavimo forma_predictor_68_face_landmarks.dat
Pamatysite langą, kuriame bus rodomas tiesioginis vaizdas iš jūsų fotoaparato. Tada paspauskite mygtuką „S“, kad pasirinktumėte rėmelį iš tiesioginio srauto. Burnos srityje pamatysite raudonus taškus. Norėdami pamatyti kitas veido dalis, naudokite klavišą ESC.
Pilnas pitono kodas ir parodomasis vaizdo įrašas pateikiami žemiau.