Turinys:

Veido aptikimas+atpažinimas: 8 žingsniai (su nuotraukomis)
Veido aptikimas+atpažinimas: 8 žingsniai (su nuotraukomis)

Video: Veido aptikimas+atpažinimas: 8 žingsniai (su nuotraukomis)

Video: Veido aptikimas+atpažinimas: 8 žingsniai (su nuotraukomis)
Video: Дневник хранящий жуткие тайны. Переход. Джеральд Даррелл. Мистика. Ужасы 2024, Liepa
Anonim
Image
Image
Veido aptikimas+atpažinimas
Veido aptikimas+atpažinimas

Tai paprastas veidų aptikimo ir atpažinimo pavyzdys naudojant „OpenCV“iš fotoaparato. PASTABA: aš sukūriau šį projektą jutiklių konkursui ir naudoju fotoaparatą kaip jutiklį, skirtą sekti ir atpažinti veidus. Taigi, mūsų tikslas Šioje sesijoje 1. Įdiekite „Anaconda“2. Atsisiųskite atvirą CV paketą 3. Nustatykite aplinkos kintamuosius Sukurkite veido aptikimo kodą 6. Sukurkite kodą, kad sukurtumėte duomenų rinkinį 7. Sukurkite kodą, kad išmokytumėte atpažinimo įrenginį 8. Sukurkite veidų atpažinimo kodą ir rezultatą.

1 žingsnis: įdiekite „Anaconda“

Įdiekite „Anaconda“
Įdiekite „Anaconda“

„Anaconda“iš esmės yra gražiai supakuotas „Python IDE“, tiekiamas su daugybe naudingų paketų, tokių kaip „NumPy“, „Pandas“, „IPython Notebook“ir tt. Atrodo, kad tai rekomenduojama visur mokslo bendruomenėje. Patikrinkite „Anaconda“, kad ją įdiegtumėte.

2 veiksmas: atsisiųskite atvirą CV paketą

Atsisiųskite atvirą CV paketą
Atsisiųskite atvirą CV paketą

Pirmiausia eikite į oficialią „OpenCV“svetainę ir atsisiųskite visą „OpenCV“paketą. Pasirinkite jums patinkančią versiją (2.x arba 3.x). Aš naudoju „Python 2.x“ir „OpenCV 2.x“- daugiausia todėl, kad „OpenCV -Python“vadovėliai yra nustatyti/pagrįsti.

Mano atveju aš ištraukiau paketą (iš esmės aplanką) tiesiai į savo F diską. (F: / opencv).

3 žingsnis: nustatykite aplinkos kintamuosius

Nustatykite aplinkos kintamuosius
Nustatykite aplinkos kintamuosius

Nukopijuokite ir įklijuokite failą cv2.pyd

„Anaconda“svetainių paketų kataloge (pvz., F: / Program Files / Anaconda2 / Lib / site-paketai mano atveju) yra „Python“paketai, kuriuos galite importuoti. Mūsų tikslas yra nukopijuoti ir įklijuoti cv2.pyd failą į šį katalogą (kad galėtume naudoti importuojamą cv2 savo Python koduose.).

Norėdami tai padaryti, nukopijuokite failą cv2.pyd …

Iš šio „OpenCV“katalogo (pradinė dalis jūsų kompiuteryje gali šiek tiek skirtis):

# „Python 2.7“ir 64 bitų mašina: F: / opencv / build / python / 2.7 / x64# Python 2.7 ir 32 bitų mašina: F: / opencv / build / python / 2.7 / x84

Į šį „Anaconda“katalogą (pradinė dalis jūsų kompiuteryje gali šiek tiek skirtis):

F: / Program Files / Anaconda2 / Lib / site-package

Atlikę šį veiksmą, dabar galėsime naudoti importo cv2 „Python“kode. BET, mums dar reikia šiek tiek padirbėti, kad FFMPEG (vaizdo kodekas) veiktų (kad galėtume atlikti tokius veiksmus kaip vaizdo įrašų apdorojimas.)

Dešiniuoju pelės mygtuku spustelėkite „Mano kompiuteris“(arba „Šis kompiuteris“, jei naudojate „Windows 8.1“)-> kairiuoju pelės mygtuku spustelėkite „Ypatybės“-> kairiuoju pelės mygtuku spustelėkite skirtuką „Išplėstinė“-> spustelėkite kairįjį pelės klavišą „Aplinkos kintamieji …“. Pridėkite naują vartotojo kintamąjį norėdamas parodyti „OpenCV“(arba x86 32 bitų sistemai, arba x64 64 bitų sistemai.) Šiuo metu esu 64 bitų kompiuteryje.

32 bitų OPENCV_DIRC: / opencv / build / x86 / vc12

64 bitų OPENCV_DIRC: / opencv / build / x64 / vc12

Pridėti %OPENCV_DIR %\ bin prie naudotojo kintamojo PATH.

Pavyzdžiui, mano PATH vartotojo kintamasis atrodo taip …

Prieš:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts

Po:

F: / Users / Johnny / Anaconda; C: / Users / Johnny / Anaconda / Scripts;%OPENCV_DIR%\ bin

Tai mes baigėme! FFMPEG yra paruoštas naudoti!

4 žingsnis: išbandykite, kad patvirtintumėte

Patikrinkite, kad patvirtintumėte
Patikrinkite, kad patvirtintumėte
Patikrinkite, kad patvirtintumėte
Patikrinkite, kad patvirtintumėte

Turime išbandyti, ar dabar galime tai padaryti „Anaconda“(per „Spyder IDE“):

  • Importuoti „OpenCV“paketą
  • Naudokite FFMPEG įrankį (vaizdo įrašams skaityti/rašyti/apdoroti)

1 testas: ar galime importuoti „OpenCV“?

Kad įsitikintumėte, jog „Anaconda“dabar gali importuoti „OpenCV-Python“paketą (būtent, cv2), išleiskite tai „IPython“konsolėje:

importuoti cv2

spausdinti cv2._ versija_

Jei paketas cv2 yra importuotas gerai ir be klaidų, o cv2 versija išspausdinta, tada mums viskas gerai!

2 testas: ar galime naudoti FFMPEG kodeką?

Įdėkite pavyzdį

input_video.mp4

vaizdo failą kataloge. Norime išbandyti, ar galime:

  • perskaitykite šį.mp4 vaizdo failą ir
  • parašykite naują vaizdo failą (gali būti.avi arba.mp4 ir tt)

Norėdami tai padaryti, turime turėti bandomąjį python kodą, pavadinkite jį test.py. Įdėkite jį į tą patį katalogą kaip pavyzdys

input_video.mp4

failą.

Štai kas

test.py

gali atrodyti taip (Pastaba: labai ačiū Pete'o ir Warreno pasiūlymams komentarų laukelyje - aš pakeičiau savo pradinį bandymo kodą į jo - išbandykite patys ir praneškite mums, ar tai veikia geriau):

importuoti cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = sėkmingai perskaitytas vaizdo įrašas. Netiesa - nepavyksta perskaityti vaizdo įrašo. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = sėkmingai išrašyti vaizdo įrašą. Netiesa - nepavyksta išrašyti vaizdo įrašo. cap.release () out.release ()

Šis testas LABAI SVARBUS. Jei norite apdoroti vaizdo failus, turite įsitikinti, kad „Anaconda“/ „Spyder IDE“gali naudoti FFMPEG (vaizdo kodeką). Prireikė dienų, kol pradėjau veikti. Bet tikiuosi, kad tai užtruks daug mažiau laiko!:) Pastaba: dar vienas labai svarbus patarimas naudojant „Anaconda Spyder IDE“. Būtinai patikrinkite dabartinį darbo katalogą (CWD) !!!

5 veiksmas: sukurkite veido aptikimo kodą

Sukurkite veido aptikimo kodą
Sukurkite veido aptikimo kodą
Sukurkite veido aptikimo kodą
Sukurkite veido aptikimo kodą

Įvartis

Šioje sesijoje,

  • Pamatysime veido aptikimo pagrindus, naudojant „Haar“funkcija pagrįstus kaskadinius klasifikatorius
  • Tą patį pratęsime ir akių aptikimui ir kt

Haar-kaskados aptikimas „OpenCV“

Čia mes susidursime su aptikimu. „OpenCV“jau yra daug iš anksto apmokytų veido, akių, šypsenos ir tt klasifikatorių. Tie XML failai saugomi aplanke opencv/data/haarcascades/. Sukurkime veido ir akių detektorių naudodami „OpenCV“. Pirmiausia turime įkelti reikiamus XML klasifikatorius. Tada įkelkite įvesties vaizdą (arba vaizdo įrašą) pilkų atspalvių režimu ARBA galime naudoti fotoaparatą (veido aptikimui realiuoju laiku)

importuoti numpy kaip np

importuoti cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascade.xml ') cap = cv2. VideoCapture (0), o 1: ret, img = cap.read () pilka = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) veidai = face_cascade.detectMultiScale (pilka, 1,5, 5), skirta [x, y, w, h) veiduose: cv2. stačiakampis (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = pilka [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray), skirta (pvz., akis, ew, eh) akims: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (veidai)) +"veidas (-ai)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, jei k == 27: break cap.release () cv2.destroyAllWindows ()

6 veiksmas: sukurkite kodą duomenų rinkiniui sukurti

Sukurkite kodą duomenų rinkiniui sukurti
Sukurkite kodą duomenų rinkiniui sukurti
Sukurkite kodą duomenų rinkiniui sukurti
Sukurkite kodą duomenų rinkiniui sukurti

Mes atliekame veido atpažinimą, todėl jums reikės kai kurių veido vaizdų! Galite sukurti savo duomenų rinkinį arba pradėti nuo vienos iš galimų veidų duomenų bazių, https://face-rec.org/databases/ pateikiama naujausia apžvalga. Yra trys įdomios duomenų bazės (aprašymo dalys cituojamos iš

  • „AT&T Facedatabase“
  • Jeilio veido duomenų bazė A
  • Išplėstinė „Yale“duomenų bazė B

ČIA aš naudoju savo duomenų rinkinį …. su toliau pateikto kodo pagalba:

importuoti numpy kaip np

importuoti cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user ID') sampleN = 0; o 1: ret, img = cap.read () pilka = cv2.cvt Spalva (img, cv2. COLOR_BGR2GRAY) veidai = face_cascade.detectMultiScale (pilka, 1,3, 5), skirta (x, y, w, h) veidams: pavyzdysN = mėginysN+1; cv2.imwrite ("F:/Programos failai/projektai/face_rec/faceData/User."+str (id)+"."+str (sampleN)+".jpg", pilka [y: y+h, x: x+w]) cv2. stačiakampis (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1), jei mėginysN> 20: break cap.release () cv2.destroyAllWindows ()

7 veiksmas: sukurkite kodą, kad išmokytumėte atpažinimo įrenginį

Sukurkite kodą, kad išmokytumėte atpažinimo įrenginį
Sukurkite kodą, kad išmokytumėte atpažinimo įrenginį

Sukurkite treniruočių rinkinio paruošimo funkciją

Dabar mes nustatysime funkciją

getImagesWithID (kelias)

kuris kaip įvesties argumentas eina absoliučiu keliu į vaizdų duomenų bazę ir grąžina 2 sąrašo rinkinį, viename - aptikti veidai, kitame - atitinkama to veido etiketė. Pvz., Jei veidų sąrašo i -asis indeksas yra penktasis duomenų bazės asmuo, tada atitinkama etiketės sąrašo i -oji vieta yra lygi 5.

Dabar konvertuokite duomenų rinkinio veidus (sukurtą 6 veiksme) į.yml failą naudodami toliau pateiktą kodą:

importuoti

importuoti numpy kaip np importuoti cv2 iš PIL importo paveikslėlio # Veido atpažinimui naudosime LBPH veido atpažinimo įrenginį = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projektai/face_rec/faceData" def getImagesWithID (kelias): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (path) face = IDs = „imagePath“programoje „imagePaths“: # Perskaitykite vaizdą ir konvertuokite į pilkos spalvos veidusImg = Image.open (imagePath).convert ('L') faceNP = np.array (faceImg, 'uint8') # Gaukite vaizdo etiketę ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Aptikite veidą paveikslėlyje face.append (faceNP) ID.append (ID) cv2.imshow („Veidų pridėjimas, skirtas tranavimui“, faceNP) cv2.waitKey (10) grąžina np.array (ID), veidų ID, veidai = getImagesWithID (kelias) atpažinimo priemonė.traukinys (veidai, ID) atpažinimo priemonė.save ("F:/Programos failai/projektai/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

naudojant šį kodą visas veido duomenų rinkinys paverstas vienu.yml failu ….. kelio vieta yra ("F:/Program Files/projektai/face_rec/faceREC/trainingdata.yml")

8 veiksmas: sukurkite kodą veidams ir rezultatui atpažinti

Guyzz, tai yra paskutinis žingsnis, kurio metu mes galime sukurti kodą, kuris atpažintų veidus jūsų internetinės kameros pagalba. ŠIS ŽINGSNIS DU VEIKIA, KURIOS VYKDOMOS…. 1. vaizdo įrašymas iš kameros 2. palyginkite jį su savo.yml failu

importuoti numpy kaip npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRec; rec.load ("F:/Program Files/projektai/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4), o 1: ret, img = cap.read () pilka = cv2.cvt Spalva (img, cv2. COLOR_BGR2GRAY) veidai = face_cascade.detectMultiScale (pilka, 1,5, 5), skirta (x, y, w, h) veidams: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (pilka [y: y+h, x: x+w]) if (id == 2): id = "alok", jei id == 1: id = "alok", jei id == 3: id = "anjali", jei id == 4: id = "Gaurav", jei id = = 5: id = 'rahul', jei id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), šriftas, 255)) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

ir galiausiai rezultatas pasirodys prieš jūsų akis ……. taip pat galite atsisiųsti ZIP failą iš žemiau esančios nuorodos: spustelėkite čia, kad atsisiųstumėte kodus. Taigi, šioje instrukcijoje mes atlikome veido aptikimo ir atpažinimo užduotį naudodami „OpenCV“….. kaip tai pamokoma …. plzzz užsiprenumeruok mane ir balsuok už mane ….. ačiū draugai:)

Rekomenduojamas: