Բովանդակություն:

Դեմքի հայտնաբերում+ճանաչում. 8 քայլ (նկարներով)
Դեմքի հայտնաբերում+ճանաչում. 8 քայլ (նկարներով)

Video: Դեմքի հայտնաբերում+ճանաչում. 8 քայլ (նկարներով)

Video: Դեմքի հայտնաբերում+ճանաչում. 8 քայլ (նկարներով)
Video: 8 բան, որ տղամարդիկ անում են ՄԻԱՅՆ այն կնոջ հետ, ում սիրում են 2024, Նոյեմբեր
Anonim
Image
Image
Դեմքի հայտնաբերում+ճանաչում
Դեմքի հայտնաբերում+ճանաչում

Սա տեսախցիկից OpenCV- ով դեմքի հայտնաբերման և ճանաչման պարզ օրինակ է: ՈEՇԱԴՐՈԹՅՈՆ. ԱՅՍ JՐԱԳՐՈԹՅՈՆԸ ՍԵՆՍՈՐ ՄՐESTՈՅԹԻ ՀԱՄԱՐ Ե AND ՕԳՏԱԳՈՐԵԼՈ AND ԵՎ RԱՆԱՉՈ F ԴԵՄՔԵՐԻ ՀԱՄԱՐ ԿԱՄԵՐԱՅԻՆ ՕԳՏԱԳՈՐԵԼ: Այսպիսով, մեր նպատակը: Այս նստաշրջանում, 1. Տեղադրեք Anaconda 2. Ներբեռնեք բաց CV փաթեթ 3. Սահմանեք բնապահպանական փոփոխականներ 4. Փորձարկեք 5 -ը հաստատելու համար: Կոդ կազմեք դեմքի հայտնաբերման համար 6. Կոդ ստեղծեք տվյալների հավաքածու ստեղծելու համար 7. Կոդ ստեղծեք ճանաչողին վարժեցնելու համար 8. Կոդ կազմեք դեմքերը ճանաչելու համար & Արդյունք:

Քայլ 1: Տեղադրեք Anaconda- ն

Տեղադրեք Anaconda- ն
Տեղադրեք Anaconda- ն

Anaconda- ն, ըստ էության, գեղեցիկ փաթեթավորված Python IDE է, որն առաքվում է տոննա օգտակար փաթեթներով, ինչպիսիք են NumPy, Pandas, IPython Notebook և այլն: Կարծես թե այն խորհուրդ է տրվում ամենուր գիտական համայնքում: Ստուգեք Anaconda- ն `այն տեղադրելու համար:

Քայլ 2: Ներբեռնեք բաց CV փաթեթ

Ներբեռնեք բաց CV փաթեթ
Ներբեռնեք բաց CV փաթեթ

Նախ, գնացեք պաշտոնական OpenCV կայք ՝ ներբեռնելու համար OpenCV ամբողջական փաթեթը: Ընտրեք ձեր նախընտրած տարբերակը (2.x կամ 3.x): Ես Python 2.x- ում և OpenCV 2.x- ում եմ, հիմնականում այն պատճառով, որ այսպես են հիմնված/հիմնված OpenCV -Python ձեռնարկները:

Իմ դեպքում, ես փաթեթը (ըստ էության թղթապանակ) հանել եմ անմիջապես իմ F սկավառակի վրա: (F: / opencv):

Քայլ 3: Սահմանեք շրջակա միջավայրի փոփոխականներ

Սահմանել շրջակա միջավայրի փոփոխականներ
Սահմանել շրջակա միջավայրի փոփոխականներ

Պատճենեք և տեղադրեք cv2.pyd ֆայլը

Anaconda Site-packages գրացուցակը (օրինակ ՝ F: / Program Files / Anaconda2 / Lib / site-packages in my case) պարունակում է Python փաթեթներ, որոնք կարող եք ներմուծել: Մեր նպատակն է պատճենել և տեղադրել cv2.pyd ֆայլը այս գրացուցակում (այնպես որ մենք կարող ենք ներմուծման cv2- ն օգտագործել մեր Python կոդերում):

Դա անելու համար պատճենեք cv2.pyd ֆայլը…

Այս OpenCV գրացուցակից (սկզբնական մասը կարող է փոքր -ինչ տարբերվել ձեր մեքենայի վրա).

# Python 2.7 և 64-բիթանոց մեքենա ՝ F: / opencv / build / python / 2.7 / x64# Python 2.7 և 32-բիթանոց մեքենա ՝ F: / opencv / build / python / 2.7 / x84

Այս Anaconda գրացուցակին (սկզբնական մասը կարող է փոքր -ինչ տարբերվել ձեր մեքենայի վրա).

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

Այս քայլը կատարելուց հետո մենք այժմ կկարողանանք օգտագործել cv2 ներմուծումը Python ծածկագրում: ԲԱՅ,, մենք դեռ պետք է մի փոքր ավելի շատ աշխատանք կատարենք, որպեսզի FFMPEG- ը (վիդեո կոդեկը) աշխատի (որպեսզի մեզ հնարավորություն տա անել այնպիսի բաներ, ինչպիսիք են տեսանյութերի մշակումը):

Աջ սեղմեք «Իմ համակարգիչը» (կամ «Այս համակարգիչը» Windows 8.1-ում)-> ձախ-կտտացրեք «Հատկություններ»-> ձախ սեղմեք «Ընդլայնված» ներդիրին-> ձախ-կտտացրեք «Շրջակա միջավայրի փոփոխականներ …» կոճակին: Ավելացրեք նոր օգտվողի փոփոխական մատնանշելու համար OpenCV- ն (կամ x86 32-բիթանոց համակարգի համար, կամ x64- ը 64-բիթ համակարգերի համար): Ես այժմ 64-բիթանոց մեքենայի վրա եմ:

32-բիթ OPENCV_DIRC: / opencv / build / x86 / vc12

64-բիթ OPENCV_DIRC: / opencv / build / x64 / vc12

Օգտագործողի փոփոխական ճանապարհին կցեք %OPENCV_DIR %\ աղբարկղ:

Օրինակ, իմ PATH օգտվողի փոփոխականն այս տեսքն ունի…

Նախքան:

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

Հետո:

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

Սա այն է, ինչ մենք ավարտեցինք: FFMPEG- ը պատրաստ է օգտագործման համար:

Քայլ 4: Փորձարկեք հաստատելու համար

Թեստ ՝ հաստատելու համար
Թեստ ՝ հաստատելու համար
Թեստ ՝ հաստատելու համար
Թեստ ՝ հաստատելու համար

Մենք պետք է փորձարկենք, թե արդյոք այժմ կարող ենք դա անել Անակոնդայում (Spyder IDE- ի միջոցով).

  • Ներմուծեք OpenCV փաթեթ
  • Օգտագործեք FFMPEG ծրագիրը (տեսանյութեր կարդալու/գրելու/մշակելու համար)

Թեստ 1. Կարո՞ղ ենք ներմուծել OpenCV:

Համոզվելու համար, որ Anaconda- ն այժմ կարող է ներմուծել OpenCV-Python փաթեթը (մասնավորապես ՝ cv2), թողարկեք դրանք IPython վահանակում.

ներմուծել cv2

տպել cv2._ տարբերակ_

Եթե cv2 փաթեթը ներմուծվում է առանց սխալների, և cv2 տարբերակը տպված է, ապա մենք բոլորս լավն ենք:

Թեստ 2. Կարո՞ղ ենք օգտագործել FFMPEG կոդեկը:

Տեղադրեք նմուշ

input_video.mp4

վիդեո ֆայլ գրացուցակում: Մենք ցանկանում ենք ստուգել, արդյոք մենք կարող ենք.

  • կարդալ այս.mp4 վիդեո ֆայլը, և
  • դուրս գրեք նոր վիդեո ֆայլ (կարող է լինել.avi կամ.mp4 և այլն)

Դա անելու համար մենք պետք է ունենանք փորձնական պիթոնի ծածկագիր, այն անվանենք test.py. Տեղադրեք այն նույն գրացուցակում, ինչպես օրինակ

input_video.mp4

ֆայլը:

Սա այն է, ինչ

test.py

կարող է նման լինել (Ուշադրություն. մեկնաբանությունների դաշտում Փիթի և Ուորենի առաջարկների շնորհիվ. ես փոխարինել եմ իմ սկզբնական թեստի ծածկագիրը նրաով.

ներմուծել cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = հաջողությամբ կարդալ տեսանյութը: Սխալ - տեսանյութը կարդալ չի հաջողվում: fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = հաջողությամբ դուրս գրեք տեսանյութը: Սխալ - տեսանյութը դուրս գրել չի հաջողվում: cap.release () out.release ()

Այս թեստը ՇԱՏ ԿԱՐԵՎՈՐ է: Եթե ցանկանում եք մշակել վիդեո ֆայլեր, ապա պետք է համոզվեք, որ Anaconda / Spyder IDE- ն կարող է օգտագործել FFMPEG- ը (վիդեո կոդեկ): Ինձանից օրեր պահանջվեցին, որպեսզի այն սկսեի աշխատել: Բայց ես հույս ունեմ, որ դա ձեզանից շատ ավելի քիչ ժամանակ կպահանջի::) Նշում. Եվս մեկ շատ կարևոր հուշում Anaconda Spyder IDE- ն օգտագործելիս: Համոզվեք, որ ստուգում եք Ընթացիկ աշխատանքային գրացուցակը (CWD) !!!

Քայլ 5: Կոդ կազմեք դեմքի հայտնաբերման համար

Կատարեք դեմքի հայտնաբերման կոդ
Կատարեք դեմքի հայտնաբերման կոդ
Կատարեք դեմքի հայտնաբերման կոդ
Կատարեք դեմքի հայտնաբերման կոդ

Նպատակը

Այս նիստում,

  • Մենք կտեսնենք Haar Feature- ի վրա հիմնված Կասկադի դասակարգիչների միջոցով դեմքի հայտնաբերման հիմունքները
  • Նույնը մենք կտարածենք աչքերի հայտնաբերման համար և այլն

Haar-cascade Detection in OpenCV

Այստեղ մենք կզբաղվենք հայտնաբերմամբ: OpenCV- ն արդեն պարունակում է բազմաթիվ նախապես պատրաստված դասակարգիչներ `դեմքի, աչքերի, ժպիտի և այլնի համար: Այդ XML ֆայլերը պահվում են opencv/data/haarcascades/թղթապանակում: Եկեք OpenCV- ով ստեղծենք դեմքի և աչքերի դետեկտոր: Սկզբում մենք պետք է բեռնենք անհրաժեշտ XML դասակարգիչները: Այնուհետև ներմուծեք մեր մուտքի պատկերը (կամ տեսանյութը) մոխրագույն մասշտաբի ռեժիմում, կամ կարող ենք օգտագործել տեսախցիկը (իրական ժամանակում դեմքի հայտնաբերման համար)

ներմուծել numpy որպես np

ներմուծել cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascade/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/hacarascade.xml ') cap = cv2. VideoCapture (0) մինչ 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) դեմքեր = face_cascade.detectMultiScale (մոխրագույն, 1.5, 5) համար (x, y, w, h) դեմքերում ՝ cv2. ուղղանկյուն (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = մոխրագույն [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) in eyes: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (face)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, եթե k == 27: break cap.release () cv2.destroyAllWindows ()

Քայլ 6: Կոդ կազմեք ՝ տվյալների հավաքածու ստեղծելու համար

Կոդ ստեղծեք տվյալների հավաքածու ստեղծելու համար
Կոդ ստեղծեք տվյալների հավաքածու ստեղծելու համար
Կոդ ստեղծեք ՝ տվյալների հավաքածու ստեղծելու համար
Կոդ ստեղծեք ՝ տվյալների հավաքածու ստեղծելու համար

Մենք կատարում ենք դեմքի ճանաչում, այնպես որ ձեզ որոշ դեմքի պատկերներ են պետք: Դուք կարող եք կամ ստեղծել ձեր սեփական տվյալների հավաքածուն, կամ սկսել դեմքի առկա տվյալների շտեմարաններից մեկով, https://face-rec.org/databases/- ը ձեզ տալիս է արդի ակնարկ: Երեք հետաքրքիր շտեմարաններ են (նկարագրության մասերը մեջբերված են https://face-rec.org կայքից).

  • AT&T Facedatabase
  • Yale Facedatabase A
  • Ընդլայնված Yale Facedatabase B

ԱՅՍՏԵ using ես օգտագործում եմ իմ սեփական տվյալների հավաքածուն….կոդի օգնությամբ, որը տրված է ստորև.

ներմուծել numpy որպես np

ներմուծել cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user id') sampleN = 0; մինչդեռ 1: ret, img = cap.read () gray = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) դեմքեր = face_cascade.detectMultiScale (մոխրագույն, 1.3, 5) դեմքի համար (x, y, w, h): sampleN = նմուշ N+1; cv2.imwrite ("F:/Fiրագրի ֆայլեր/նախագծեր/face_rec /acesData/User."+str (id)+"."+str (sampleN)+".jpg", մոխրագույն [y: y+h, x: x+w]) cv2. ուղղանկյուն (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.wait Բանալին (1) եթե նմուշը N> 20: ընդմիջում cap.release () cv2.destroyAllWindows ()

Քայլ 7: Կոդ կազմեք ճանաչողին վերապատրաստելու համար

Կոդ կազմեք ճանաչողին վերապատրաստելու համար
Կոդ կազմեք ճանաչողին վերապատրաստելու համար

Ստեղծեք ուսուցման հավաքածուի պատրաստման գործառույթ

Այժմ մենք սահմանում ենք գործառույթ

getImagesWithID (ուղի)

որը որպես մուտքի փաստարկ տանում է պատկերի տվյալների շտեմարանի բացարձակ ուղին և վերադարձնում 2 ցուցակի զույգ, որոնցից մեկը պարունակում է հայտնաբերված դեմքերը, իսկ մյուսը պարունակում է այդ դեմքի համապատասխան պիտակ: Օրինակ, եթե դեմքերի ցանկում ith ինդեքսը ներկայացնում է տվյալների բազայի 5 -րդ անհատը, ապա պիտակների ցանկում համապատասխան ith տեղադրությունը ունի 5 -ի հավասար արժեք:

Այժմ փոխակերպեք տվյալների դեմքերը (որը ստեղծվում է 6 -րդ քայլում).yml ֆայլի մեջ ՝ ստորև բերված կոդի օգնությամբ.

ներմուծել os

ներմուծել numpy որպես np ներմուծել cv2 PIL- ից ներմուծել Image # Դեմքի ճանաչման համար մենք կկատարենք LBPH Face Recognizer ճանաչիչ = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (ուղի) դեմքեր = IDs = imagePath- ում imagePaths- ում. # Կարդացեք պատկերը և փոխարկեք մոխրագույն երանգներ # Ստացեք նկարի ID- ի պիտակը = int (os.path.split (imagePath) [-1].split (".") [1]) # # Հայտնաբերեք պատկերի դեմքերի դեմքը: կցեք (faceNP) IDs.append (ID) cv2.imshow («Տրանզինգի համար դեմքեր ավելացնելը», faceNP) cv2.waitKey (10) վերադարձնել np.array (ID), դեմքեր Ids, դեմքեր = getImagesWithID (path) ճանաչող. Վարժեցում (դեմքեր, Ids) ճանաչիչ.պահել ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

օգտագործելով այս ծածկագիրը ՝ ամբողջ դեմքի տվյալները փոխակերպվում են մեկ.yml ֆայլի….. ճանապարհի գտնվելու վայրը («F:/Program Files/projects/face_rec/faceREC/trainingdata.yml»)

Քայլ 8. Ստեղծեք ծածկագիր ՝ դեմքերը և արդյունքը ճանաչելու համար

Guyzz սա վերջին քայլն է, որով մենք կարող ենք ստեղծել ձեր վեբ -տեսախցիկի օգնությամբ դեմքերը ճանաչելու ծածկագիրը: ԱՅՍ ՔԱՅԼԸ ԿԱ ԵՐԿՈ OP ԳՈՐATIONՈՆԵՈԹՅՈՆԸ, որոնք գնում են կատարման…: 1. տեսանկարահանում տեսախցիկից 2. համեմատեք այն ձեր.yml ֆայլի հետ

ներմուծել numpy որպես npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecizer rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4), իսկ 1: ret, img = cap.read () մոխրագույն = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) դեմքեր = face_cascade.detectMultiScale (մոխրագույն, 1.5, 5) (x, y, w, h) դեմքերի համար ՝ cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec. կանխատեսել (մոխրագույն [y: y+h, x: x+w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' եթե id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), տառատեսակ, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'). ընդմիջում cap.release ()

cv2.destroyAllWindows ()

և վերջապես արդյունքը ձեր աչքի առջև կգա ……. կարող եք նաև ներբեռնել zip ֆայլը ստորև բերված հղումից. Սեղմեք այստեղ ՝ ծածկագրերը ներբեռնելու համար նման ուսանելի….. plzzz բաժանորդագրվեք ինձ և քվեարկեք իմ օգտին…..շնորհակալություն ընկերներ:)

Խորհուրդ ենք տալիս: