Orodha ya maudhui:

Kugundua Uso + utambuzi: Hatua 8 (na Picha)
Kugundua Uso + utambuzi: Hatua 8 (na Picha)

Video: Kugundua Uso + utambuzi: Hatua 8 (na Picha)

Video: Kugundua Uso + utambuzi: Hatua 8 (na Picha)
Video: Angalia ukuaji wa mtoto akiwa tumboni mwa mama yake hadi kuzaliwa 2024, Julai
Anonim
Image
Image
Utambuzi wa uso + utambuzi
Utambuzi wa uso + utambuzi

Huu ni mfano rahisi wa kugundua uso na utambuzi na OpenCV kutoka kwa kamera. KUMBUKA: NILIFANYA MRADI HUU KWA MASHINDANO YA SENSOR NA NILITUMIA KAMERA KAMA SENSOR KUFUATILIA NA NYUSO ZA UTAMBULISHO. Hivyo, Lengo letuKatika kikao hiki, 1. Sakinisha Anaconda 2. Pakua Fungua Fungu la CV 3. Weka Viwango vya Mazingira 4. Jaribio la kudhibitisha 5 Fanya nambari ya kugundua uso 6. Tengeneza nambari kuunda seti ya data 7. Fanya nambari ya kufundisha kitambulisho 8. Fanya nambari ya kutambua nyuso na Matokeo.

Hatua ya 1: Sakinisha Anaconda

Sakinisha Anaconda
Sakinisha Anaconda

Anaconda kimsingi ni vifurushi vyema vya IDE ambavyo vinasafirishwa na tani za vifurushi muhimu, kama vile NumPy, Pandas, IPbook Notebook, nk Inaonekana inapendekezwa kila mahali katika jamii ya kisayansi. Angalia Anaconda ili kuiweka.

Hatua ya 2: pakua Fungua Fungu la CV

Pakua Fungua CV Package
Pakua Fungua CV Package

Kwanza, nenda kwenye tovuti rasmi ya OpenCV kupakua kifurushi kamili cha OpenCV. Chagua toleo unalopenda (2.x au 3.x). Niko kwenye Python 2.x na OpenCV 2.x - haswa kwa sababu hii ndio jinsi Mafunzo ya OpenCV-Python yanavyowekwa / kulingana na.

Kwa upande wangu, nimeondoa kifurushi (kimsingi folda) moja kwa moja kwa gari langu F. (F: / opencv).

Hatua ya 3: Weka Viwango vya Mazingira

Weka Vigezo vya Mazingira
Weka Vigezo vya Mazingira

Nakili na Bandika faili ya cv2.pyd

Saraka ya vifurushi vya Tovuti ya Anaconda (k.v F: / Program Files / Anaconda2 / Lib / site-package kwa upande wangu) ina vifurushi vya Python ambavyo unaweza kuagiza. Lengo letu ni kunakili na kubandika faili ya cv2.pyd kwenye saraka hii (ili tuweze kutumia kuagiza cv2 katika nambari zetu za Python.).

Ili kufanya hivyo, nakili faili ya cv2.pyd…

Kutoka kwa saraka hii ya OpenCV (sehemu ya mwanzo inaweza kuwa tofauti kidogo kwenye mashine yako):

# Python 2.7 na mashine ya 64-bit: F: / opencv / kujenga / python / 2.7 / x64 # Mashine ya Python 2.7 na 32-bit: F: / opencv / build / python / 2.7 / x84

Kwa saraka hii ya Anaconda (sehemu ya mwanzo inaweza kuwa tofauti kidogo kwenye mashine yako):

F: / Program Files / Anaconda2 / Lib / tovuti-vifurushi

Baada ya kufanya hatua hii sasa tutaweza kutumia kuagiza cv2 katika nambari ya Python. LAKINI, bado tunahitaji kufanya kazi kidogo zaidi ili kupata FFMPEG (video codec) ifanye kazi (kutuwezesha kufanya vitu kama kusindika video.)

Bonyeza kulia kwenye "Kompyuta yangu" (au "PC hii" kwenye Windows 8.1) -> bonyeza kushoto Mali -> bonyeza kushoto "kichupo" -> bonyeza kushoto "kitufe cha Mazingira …" Ongeza Mtumiaji mpya anayebadilika. kuelekeza kwa OpenCV (ama x86 kwa mfumo wa 32-bit au x64 kwa mfumo wa 64-bit.) Hivi sasa niko kwenye mashine ya 64-bit.

32-bitOPENCV_DIRC: / opencv / kujenga / x86 / vc12

64-bitOPENCV_DIRC: / opencv / kujenga / x64 / vc12

Ongeza% OPENCV_DIR% / bin kwa Njia inayobadilika ya Mtumiaji.

Kwa mfano, tofauti yangu ya mtumiaji wa PATH inaonekana kama hii…

Kabla:

F: Watumiaji / Johnny / Anaconda; C: / Watumiaji / Johnny / Anaconda / Maandiko

Baada ya:

F: / Watumiaji / Johnny / Anaconda; C: / Watumiaji / Johnny / Anaconda / Maandiko;% OPENCV_DIR% / bin

Hii ndio tumemaliza! FFMPEG iko tayari kutumika!

Hatua ya 4: Jaribu Kuthibitisha

Jaribu Kuthibitisha
Jaribu Kuthibitisha
Jaribu Kuthibitisha
Jaribu Kuthibitisha

Tunahitaji kujaribu ikiwa sasa tunaweza kufanya haya huko Anaconda (kupitia Spyder IDE):

  • Ingiza kifurushi cha OpenCV
  • Tumia huduma ya FFMPEG (kusoma / kuandika / kuchakata video)

Jaribio 1: Je! Tunaweza kuagiza OpenCV?

Kukubali kwamba Anaconda sasa anaweza kuagiza kifurushi cha OpenCV-Python (yaani, cv2), toa haya kwenye Dashibodi ya IPython:

kuagiza cv2

chapisha cv2._ toleo_

Ikiwa kifurushi cv2 kinaingizwa sawa bila makosa, na toleo la cv2 limechapishwa, basi sisi sote ni wazuri!

Jaribio la 2: Je! Tunaweza Kutumia Fodhi ya FFMPEG?

Weka sampuli

video_ya kuingiza.mp4

faili ya video katika saraka. Tunataka kujaribu ikiwa tunaweza:

  • soma faili ya video ya.mp4, na
  • andika faili mpya ya video (inaweza kuwa.avi au.mp4 nk.)

Ili kufanya hivyo tunahitaji kuwa na nambari ya chatu ya mtihani, iite test.py. Weka kwenye saraka sawa na sampuli

video_ya kuingiza.mp4

faili.

Hii ndio

mtihani.py

inaweza kuonekana kama (Kumbuka: shukrani nyingi kwa maoni ya Pete na Warren katika uwanja wa maoni - nimebadilisha nambari yangu ya jaribio ya asili na yake - tafadhali jaribu mwenyewe na utujulishe ikiwa hii inafanya kazi vizuri):

kuagiza cv2

cap = cv2. VideoCapture ("input_video.mp4") chapa cap. Imefunguliwa () # Kweli = soma video kwa mafanikio. Uongo - shindwa kusoma video. fourcc = cv2. VideoWriter_fourcc (* 'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) chapa. imefunguliwa () # Kweli = andika video kwa mafanikio. Uongo - shindwa kuandika video. cap. tafadhali () nje. tafadhali ()

Jaribio hili ni la MUHIMU SANA. Ikiwa ungependa kusindika faili za video, utahitaji kuhakikisha kuwa Anaconda / Spyder IDE inaweza kutumia FFMPEG (video codec). Ilinichukua siku kuifanya iweze kufanya kazi. Lakini natumai itakuchukua wakati kidogo sana! Kumbuka: ncha moja muhimu zaidi wakati wa kutumia Anaconda Spyder IDE. Hakikisha ukiangalia Saraka ya Kufanya Kazi ya Sasa (CWD) !!!

Hatua ya 5: Fanya Nambari ya Kugundua Uso

Fanya Nambari ya Kugundua Uso
Fanya Nambari ya Kugundua Uso
Fanya Nambari ya Kugundua Uso
Fanya Nambari ya Kugundua Uso

Lengo

Katika kikao hiki,

  • Tutaona misingi ya kugundua uso kwa kutumia Vifunguo vya Cascade vya Haar Feature
  • Tutapanua sawa kwa kugundua jicho nk

Ugunduzi wa Haar-cascade katika OpenCV

Hapa tutashughulikia kugundua. OpenCV tayari ina vitangulizi vingi vya mafunzo ya awali ya uso, macho, tabasamu n.k. Faili hizo za XML zimehifadhiwa kwenye opencv / data / haarcascades / folda. Wacha tuunda kichunguzi cha uso na macho na OpenCV. Kwanza tunahitaji kupakia vitambulisho vinavyohitajika vya XML. Kisha pakia picha yetu ya kuingiza (au video) katika hali ya kijivu AU tunaweza kutumia kamera (kwa utambuzi wa uso wa wakati halisi)

kuagiza numpy kama np

kuagiza cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / vyanzo / data / haarcascades / haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / vyanzo / data / haarcascadee /.xml ') cap = cv2. VideoCapture (0) wakati 1: ret, img = cap.read () kijivu = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) nyuso = face_cascade.detectMultiScale (kijivu, 1.5, 5) kwa (x, y, w, h) katika nyuso: cv2. mstatili (img, (x, y), (x + w, y + h), (255, 0, 0), 2) roi_gray = kijivu [y: y + h, x: x + w] roi_color = img [y: y + h, x: x + w] macho = eye_cascade.detectMultiScale (roi_gray) kwa (ex, ey, ew, eh) machoni: cv2. mstatili (roi_color, (ex, ey), (ex + ew, ey + eh), (0, 255, 0), 2) chapa "kupatikana" + str (len (nyuso)) + "uso (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff ikiwa k == 27: kuvunja cap. tafadhali () cv2.destroyAllWindows ()

Hatua ya 6: Tengeneza Nambari ya Kuunda Kuweka Takwimu

Fanya Nambari ya Kuunda Kuweka Takwimu
Fanya Nambari ya Kuunda Kuweka Takwimu
Fanya Nambari ya Kuunda Kuweka Takwimu
Fanya Nambari ya Kuunda Kuweka Takwimu

Tunafanya utambuzi wa uso, kwa hivyo utahitaji picha za uso! Unaweza kuunda hifadhidata yako mwenyewe au uanze na hifadhidata moja inayopatikana ya uso, https://face-rec.org/databases/ inakupa muhtasari wa kisasa. Hifadhidata tatu za kupendeza ni (sehemu za maelezo zimenukuliwa kutoka

  • Hifadhidata ya AT&T
  • Hifadhidata ya Yale A
  • Iliyohifadhiwa Yale Nyaraka B

HAPA ninatumia hifadhidata yangu mwenyewe….kwa msaada wa nambari ambayo imepewa hapa chini:

kuagiza numpy kama np

kuagiza cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / vyanzo / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('ingiza id ya mtumiaji) sampuliN = 0; wakati 1: ret, img = cap.read () kijivu = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) nyuso = face_cascade.detectMultiScale (kijivu, 1.3, 5) kwa (x, y, w, h) katika nyuso: sampuliN = sampuliN + 1; cv2.imwrite ("F: / Programu za Faili / miradi / uso_rec / nyusoData / Mtumiaji." + str (id) + "." + str (sampuliN) + ".jpg", kijivu [y: y + h, x: x + w]) cv2. mstatili (img, (x, y), (x + w, y + h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) ikiwa sampuliN> 20: kuvunja cap. tafadhali () cv2.destroyAllWindows ()

Hatua ya 7: Fanya Nambari ya Kufundisha Kitambulisho

Fanya Nambari ya Kufundisha Kitambulisho
Fanya Nambari ya Kufundisha Kitambulisho

Unda kazi ili kuandaa seti ya mafunzo

Sasa, tutafafanua kazi

getImagesWithID (njia)

hiyo inachukua njia kamili kwa hifadhidata ya picha kama hoja ya kuingiza na kurudisha Tuple ya orodha 2, moja iliyo na nyuso zilizogunduliwa na nyingine iliyo na lebo inayolingana ya uso huo. Kwa mfano, ikiwa faharisi katika orodha ya nyuso inawakilisha mtu wa 5 kwenye hifadhidata, basi eneo linalolingana katika orodha ya lebo lina thamani sawa na 5.

Sasa badilisha sura za hifadhidata (ambayo imeundwa katika hatua ya 6) kuwa faili ya.yml kwa msaada wa nambari ambayo imepewa hapa chini:

kuagiza os

kuagiza numpy kama np kuagiza cv2 kutoka PIL kuagiza Picha # Kwa utambuzi wa uso sisi kitambulisho cha Kitambulisho cha Uso cha LBPH = cv2.createLBPHFaceRecognizer (); path = "F: / Programu za Faili / miradi / uso_rec / nyusoData" def getImagesWithID (njia): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (njia) nyuso = Vitambulisho = kwa njia ya picha katika Njia za picha: # Soma picha na ubadilishe kuwa nyuso zenye rangi ya kijivu # Pata lebo ya kitambulisho cha picha = int (os.path.split (imagePath) [- 1].split (".") [1]) # Gundua uso katika sura za picha. Tumia vitambulisho vya (usoNP). (ID) cv2.imshow ("Kuongeza nyuso za kukanyaga", usoNP) cv2.waitKey (10) kurudi np.array (vitambulisho), inakabiliwa na vitambulisho, nyuso = getImagesWithID (njia) kitambulisho. Treni (nyuso, vitambulisho) kitambua. ("F: / Programu za Faili / miradi / uso_rec / usoREC / mafunzodata.yml") cv2.destroyAllWindows ()

kwa kutumia msimbo huu seti ya data zote za uso zimebadilishwa kuwa faili moja ya.l.

Hatua ya 8: Fanya Nambari ya Kutambua Nyuso na Matokeo

Guyzz hii ni hatua ya mwisho ambayo tunaweza kuunda nambari ya kutambua nyuso kwa msaada wa webcam yako 1. kunasa video kutoka kwa cam 2. linganisha na faili yako ya.yml

kuagiza numpy kama npimport cv2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / vyanzo / data / haarcascades / haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecognizer pakua tena ("F: / Faili za Programu / miradi / uso_rec / usoREC / mafunzodata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) wakati 1: ret, img = cap.read () kijivu = cv2.cvt Rangi (img, cv2. COLOR_BGR2GRAY) nyuso = uso_cascade.detectMultiScale (kijivu, 1.5, 5) kwa (x, y, w, h) katika nyuso: cv2. img, (x, y), (x + w, y + h), (255, 0, 0), 2) id, conf = rec. tabiri (kijivu [y: y + h, x: x + w] ikiwa (id == 2): id = "alok" ikiwa id == 1: id = "alok" ikiwa id == 3: id = "anjali" ikiwa id == 4: id = "Gaurav" ikiwa id = = 5: id = 'rahul' ikiwa id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y + h), font, 255 cv2.imshow ('img', img) ikiwa cv2.waitKey (1) == ord ('q'): piga cap. tafadhali ()

cv2.destroyAll Windows ()

na mwishowe matokeo yatakuja mbele ya macho yako …… unaweza pia kupakua faili ya zip kutoka chini ya kiunga: Bonyeza hapa kupakua nambari Kwa hivyo, katika mafunzo haya tulifanya jukumu la kugundua uso + utambuzi kwa kutumia OpenCV…..kama wewe kama hii inayoweza kufundishwa….. plzzz nisajili na unipigie kura….. asante marafiki:)

Ilipendekeza: