Satura rādītājs:

Sejas noteikšana+atpazīšana: 8 soļi (ar attēliem)
Sejas noteikšana+atpazīšana: 8 soļi (ar attēliem)

Video: Sejas noteikšana+atpazīšana: 8 soļi (ar attēliem)

Video: Sejas noteikšana+atpazīšana: 8 soļi (ar attēliem)
Video: Страшные истории. ЗАПЕРТАЯ КОМНАТА. Деревенские страшилки. Ужасы. Мистика. 2024, Jūnijs
Anonim
Image
Image
Sejas noteikšana+atpazīšana
Sejas noteikšana+atpazīšana

Šis ir vienkāršs sejas noteikšanas un atpazīšanas piemērs, izmantojot OpenCV no kameras. PIEZĪME: Es šo projektu izstrādāju sensoru konkursam, un es izmantoju kameru kā sensoru, lai izsekotu un atpazītu sejas. Tātad, mūsu mērķis Šajā sesijā 1. instalējiet Anaconda 2. lejupielādējiet atvērto CV paketi 3. iestatiet vides mainīgos 4. pārbaudiet, lai apstiprinātu 5 Izveidojiet kodu sejas noteikšanai 6. Izveidojiet kodu, lai izveidotu datu kopu 7. Izveidojiet kodu, lai apmācītu atpazīstamību 8. Izveidojiet kodu, lai atpazītu sejas un rezultātu.

1. darbība: instalējiet Anaconda

Instalējiet Anaconda
Instalējiet Anaconda

Anaconda būtībā ir labi iepakots Python IDE, kas tiek piegādāts kopā ar daudzām noderīgām pakotnēm, piemēram, NumPy, Pandas, IPython Notebook uc. Šķiet, ka tas ir ieteicams visur zinātnieku aprindās. Apskatiet Anaconda, lai to instalētu.

2. darbība: lejupielādējiet atvērto CV pakotni

Lejupielādēt atvērto CV paketi
Lejupielādēt atvērto CV paketi

Pirmkārt, dodieties uz oficiālo OpenCV vietni, lai lejupielādētu visu OpenCV pakotni. Izvēlieties versiju, kas jums patīk (2.x vai 3.x). Es izmantoju Python 2.x un OpenCV 2.x - galvenokārt tāpēc, ka šādi tiek iestatītas/balstītas OpenCV -Python apmācības.

Manā gadījumā iepakojumu (būtībā mapi) esmu izvilcis tieši savā F diskā. (F: / opencv).

3. darbība: iestatiet vides mainīgos

Iestatiet vides mainīgos
Iestatiet vides mainīgos

Kopējiet un ielīmējiet cv2.pyd failu

Anaconda vietņu pakotņu direktorijā (piemēram, F: / Program Files / Anaconda2 / Lib / site-package manā gadījumā) ir Python pakotnes, kuras varat importēt. Mūsu mērķis ir nokopēt un ielīmēt cv2.pyd failu šajā direktorijā (lai mēs varētu izmantot importēto cv2 savos Python kodos.).

Lai to izdarītu, kopējiet cv2.pyd failu …

No šī OpenCV direktorija (sākuma daļa jūsu ierīcē var nedaudz atšķirties):

# Python 2.7 un 64 bitu mašīna: F: / opencv / build / python / 2.7 / x64# Python 2.7 un 32 bitu mašīna: F: / opencv / build / python / 2.7 / x84

Šajā Anaconda direktorijā (sākuma daļa jūsu ierīcē var nedaudz atšķirties):

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

Pēc šīs darbības veikšanas mēs tagad varēsim izmantot importa cv2 Python kodā. BET, mums vēl ir jāpaveic nedaudz vairāk, lai FFMPEG (video kodeks) darbotos (lai mēs varētu veikt tādas darbības kā video apstrāde.)

Ar peles labo pogu noklikšķiniet uz "Mans dators" (vai "Šis dators" operētājsistēmā Windows 8.1)-> ar peles kreiso pogu noklikšķiniet uz Rekvizīti-> ar peles kreiso pogu noklikšķiniet uz cilnes "Papildu"-> ar peles kreiso pogu noklikšķiniet uz pogas "Vides mainīgie …". Pievienojiet jaunu lietotāja mainīgo lai norādītu uz OpenCV (vai nu x86 32 bitu sistēmai, vai x64 64 bitu sistēmai.) Pašlaik es izmantoju 64 bitu mašīnu.

32 bitu OPENCV_DIRC: / opencv / build / x86 / vc12

64 bitu OPENCV_DIRC: / opencv / build / x64 / vc12

Pievienot %OPENCV_DIR %\ bin lietotāja mainīgajam ceļam.

Piemēram, mans PATH lietotāja mainīgais izskatās šādi …

Pirms:

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

Pēc:

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

Tas ir tas, ko mēs esam paveikuši! FFMPEG ir gatavs lietošanai!

4. darbība: pārbaudiet, lai apstiprinātu

Pārbaudiet, lai apstiprinātu
Pārbaudiet, lai apstiprinātu
Pārbaudiet, lai apstiprinātu
Pārbaudiet, lai apstiprinātu

Mums ir jāpārbauda, vai tagad varam to darīt Anakondā (izmantojot Spyder IDE):

  • Importēt OpenCV pakotni
  • Izmantojiet FFMPEG utilītu (video lasīšanai/rakstīšanai/apstrādei)

1. tests: vai mēs varam importēt OpenCV?

Lai apstiprinātu, ka Anaconda tagad var importēt OpenCV-Python pakotni (proti, cv2), izsniedziet tos IPython konsolē:

importēt cv2

drukāt cv2._ versiju_

Ja pakotne cv2 ir importēta pareizi bez kļūdām un tiek izdrukāta cv2 versija, tad mums visiem ir labi!

2. tests: vai mēs varam izmantot FFMPEG kodeku?

Novietojiet paraugu

input_video.mp4

video failu direktorijā. Mēs vēlamies pārbaudīt, vai varam:

  • izlasiet šo.mp4 video failu un
  • uzrakstiet jaunu video failu (var būt.avi vai.mp4 utt.)

Lai to izdarītu, mums ir jābūt testa python kodam, ko sauc par test.py. Ievietojiet to tajā pašā direktorijā kā paraugs

input_video.mp4

failu.

Tas ir tas

test.py

var izskatīties šādi:

importēt cv2

cap = cv2. VideoCapture ("input_video.mp4") drukāt cap.isOpened () # True = veiksmīgi izlasīts video. Nepareizi - neizdodas nolasīt video. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = veiksmīgi izrakstīts video. Nepareizi - neizdodas izrakstīt video. cap.release () out.release ()

Šis tests ir ĻOTI SVARĪGS. Ja vēlaties apstrādāt video failus, jums jāpārliecinās, ka Anaconda / Spyder IDE var izmantot FFMPEG (video kodeku). Man vajadzēja vairākas dienas, lai to panāktu. Bet es ceru, ka jums tas prasīs daudz mazāk laika!:) Piezīme: vēl viens ļoti svarīgs padoms, lietojot Anaconda Spyder IDE. Noteikti pārbaudiet pašreizējo darba direktoriju (CWD) !!!

5. darbība: izveidojiet kodu sejas noteikšanai

Izveidojiet kodu sejas noteikšanai
Izveidojiet kodu sejas noteikšanai
Izveidojiet kodu sejas noteikšanai
Izveidojiet kodu sejas noteikšanai

Mērķis

Šajā sesijā

  • Mēs redzēsim sejas noteikšanas pamatus, izmantojot Haar Feature Cascade Classifiers
  • Mēs paplašināsim to pašu attiecībā uz acu noteikšanu utt

Haar-kaskādes noteikšana OpenCV

Šeit mēs risināsim atklāšanu. OpenCV jau satur daudz iepriekš apmācītu sejas, acu, smaida uc klasifikatoru. Šie XML faili tiek saglabāti mapē opencv/data/haarcascades/. Izveidosim sejas un acu detektoru ar OpenCV. Vispirms mums jāielādē nepieciešamie XML klasifikatori. Pēc tam ielādējiet mūsu ievades attēlu (vai video) pelēktoņu režīmā VAI mēs varam izmantot kameru (reālā laika sejas noteikšanai)

importēt numpy kā np

importēt 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), kamēr 1: ret, img = cap.read () pelēks = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) sejas = face_cascade.detectMultiScale (pelēks, 1.5, 5) x, y, w, h) sejās: cv2. taisnstūris (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = pelēks [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) (ex, ey, ew, eh) acīs: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (sejas)) +"seja (-s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, ja k == 27: break cap.release () cv2.destroyAllWindows ()

6. darbība: izveidojiet kodu datu kopas izveidei

Izveidojiet kodu datu kopas izveidei
Izveidojiet kodu datu kopas izveidei
Izveidojiet kodu datu kopas izveidei
Izveidojiet kodu datu kopas izveidei

Mēs veicam sejas atpazīšanu, tāpēc jums būs nepieciešami daži sejas attēli! Jūs varat vai nu izveidot savu datu kopu, vai sākt ar kādu no pieejamajām sejas datu bāzēm, https://face-rec.org/databases/ sniedz jums aktuālu pārskatu. Ir trīs interesantas datu bāzes (apraksta daļas ir citētas no vietnes

  • AT&T Facedatabase
  • Jēlas sejas datu bāze A.
  • Paplašinātā Jēlas sejas datu bāze B

ŠEIT es izmantoju savu datu kopu …. ar zemāk norādītā koda palīdzību:

importēt numpy kā np

importēt cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('ievadiet lietotāja ID') paraugsN = 0; kamēr 1: ret, img = cap.read () pelēks = cv2.cvt Krāsa (img, cv2. COLOR_BGR2GRAY) sejas = face_cascade.detectMultiScale (pelēka, 1.3, 5) (x, y, w, h) sejās: paraugsN = paraugsN+1; cv2.imwrite ("F:/Programmu faili/projekti/face_rec/sejasData/Lietotājs."+str (id)+"."+str (paraugsN)+".jpg", pelēks [y: y+h, x: x+w]) cv2. taisnstūris (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1), ja paraugs N> 20: break cap.release () cv2.destroyAllWindows ()

7. darbība: izveidojiet kodu, lai apmācītu atpazīšanas ierīci

Izveidojiet kodu, lai apmācītu atpazīšanas ierīci
Izveidojiet kodu, lai apmācītu atpazīšanas ierīci

Izveidojiet funkciju apmācības komplekta sagatavošanai

Tagad mēs definēsim funkciju

getImagesWithID (ceļš)

kas izmanto ievades argumentu absolūto ceļu uz attēlu datu bāzi un atgriež 2 saraksta kopu, no kuriem viens satur noteiktās sejas, bet otrs - atbilstošo iezīmi šai sejai. Piemēram, ja sejas saraksta i. Indekss apzīmē piekto indivīdu datu bāzē, tad atbilstošās i. Vietas etiķešu sarakstā vērtība ir 5.

Tagad konvertējiet datu kopas sejas (kas izveidotas 6. darbībā).yml failā, izmantojot zemāk norādīto kodu:

importēt OS

importēt numpy kā np importēt cv2 no PIL importa attēla # Sejas atpazīšanai mēs izmantosim LBPH sejas atpazīšanas atpazīšanas rīku = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/project/face_rec/sejasData" def getImagesWithID (ceļš): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (ceļš) sejas = ID = =] imagePath programmā imagePaths: # Izlasiet attēlu un pārvērtiet to pelēktoņu sejāsImg = Image.open (imagePath).convert ('L') faceNP = np.array (sejasImg, 'uint8') # Iegūstiet attēla ID etiķeti = int (os.path.split (imagePath) [-1].split (".") [1]) # Atklājiet seju attēla sejās. Pievienojiet (faceNP) ID.append (ID) cv2.imshow ("Seju pievienošana tranēšanai", faceNP) cv2.waitKey (10) atgriezt np.array (ID), sejas ID, sejas = getImagesWithID (ceļš) atpazīšanas līdzeklis.train (sejas, ID) atpazīšanas līdzeklis.save ("F:/Program Files/project/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

izmantojot šo kodu, visa sejas datu kopa ir pārvērsta vienā.yml failā ….. ceļa atrašanās vieta ir ("F:/Program Files/project/face_rec/faceREC/trainingdata.yml")

8. darbība: izveidojiet kodu, lai atpazītu sejas un rezultātu

Guyzz, šis ir pēdējais solis, kurā mēs varam izveidot kodu, lai atpazītu sejas ar jūsu tīmekļa kameras palīdzību. ŠAIS SOLIS IR DIVAS DARBĪBAS, KAS TIKS VEIKT … 1. video uzņemšana no kameras 2. salīdziniet to ar savu.yml failu

importēt numpy kā 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/project/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4), kamēr 1: ret, img = cap.read () pelēks = cv2.cvt Krāsa (img, cv2. COLOR_BGR2GRAY) sejas = face_cascade.detectMultiScale (pelēka, 1.5, 5) (x, y, w, h) sejās: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (pelēks [y: y+h, x: x+w]) if (id == 2): id = "alok", ja id == 1: id = "alok", ja id == 3: id = "anjali", ja id == 4: id = "Gaurav", ja id = = 5: id = 'rahul', ja id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), fonts, 255)) cv2.imshow ('img', img) ja cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

un visbeidzot rezultāts parādīsies jūsu acu priekšā …… u var lejupielādēt arī zip failu no saites zemāk: Noklikšķiniet šeit, lai lejupielādētu kodus Tātad, šajā pamācībā mēs veicām sejas noteikšanas+atpazīšanas uzdevumu, izmantojot OpenCV….. ja jūs patīk šis pamācošais….. plzzz abonējiet mani un balsojiet par mani….. paldies draugiem:)

Ieteicams: