Мазмуну:

Жүздү таануу+таануу: 8 кадам (сүрөттөр менен)
Жүздү таануу+таануу: 8 кадам (сүрөттөр менен)

Video: Жүздү таануу+таануу: 8 кадам (сүрөттөр менен)

Video: Жүздү таануу+таануу: 8 кадам (сүрөттөр менен)
Video: Айгерим Расул кызы тойдо алып баруучу Нурзат Токтосунованын чачынан сүйрөдү 2024, Ноябрь
Anonim
Image
Image
Жүздү таануу+таануу
Жүздү таануу+таануу

Бул камерадан OpenCV менен жүздү таануунун жана таануунун чуркоосунун жөнөкөй мисалы. ЭСКЕРТҮҮ: Мен бул проектти сенсорлордун сынагы үчүн жасадым жана камераны байкоо жана таануу үчүн сенсор катары колдоном. Ошентип, биздин максат Бул сессияда 1. Анаконда орнотуу 2. Ачык резюме топтомун жүктөө 3. экологиялык өзгөрмөлөрдү коюу 4. тестти ырастоо үчүн 5. Жүз таануу үчүн код жаса 6. Маалымат топтомун түзүү үчүн код жаса 7. Таануучуну үйрөтүү үчүн код жаса 8. Жүздөрдү таануу үчүн код жаса & Жыйынтык.

1 -кадам: Anaconda орнотуу

Anaconda орнотуу
Anaconda орнотуу

Анаконда - бул эң сонун пакеттелген Python IDE, ал көптөгөн пайдалуу пакеттер менен жеткирилет, мисалы NumPy, Pandas, IPython Notebook, ж. Аны орнотуу үчүн Анаконданы карап көрүңүз.

2 -кадам: Ачык резюме топтомун түшүрүү

Ачык резюме топтомун жүктөп алыңыз
Ачык резюме топтомун жүктөп алыңыз

Биринчиден, 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

Бул кадамды аткаргандан кийин, биз Python кодунда cv2 импортун колдоно алабыз. БИРОК, FFMPEGти (видео кодекти) иштетүү үчүн дагы бир аз көбүрөөк иш кылышыбыз керек (видеолорду иштетүү сыяктуу нерселерди жасоого мүмкүнчүлүк берүү үчүн.)

"Менин компьютеримди" оң баскыч менен чыкылдатыңыз (же Windows 8.1деги "Бул компьютерди")-> касиеттерди солго чыкылдатыңыз-> "Өркүндөтүлгөн" өтмөктү-> "айлана чөйрөнүн өзгөрмөлөрүн …" сол баскычын басыңыз. Жаңы колдонуучунун өзгөрмөсүн кошуңуз. OpenCVге көрсөтүү үчүн (же 32-бит системасы үчүн x86 же 64-бит системасы үчүн x64.) Мен азыр 64-бит машинадамын.

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

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

%OPENCV_DIR %\ bin'ди Колдонуучунун Өзгөрмө PATHсына кошуңуз.

Мисалы, менин 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 импорттой алабызбы?

Анаконда азыр OpenCV-Python пакетин импорттой алаарына ишенүү үчүн (атап айтканда, cv2), Буларды IPython Consoleдо чыгарыңыз:

cv2 импорттоо

cv2._ версиясын басып чыгаруу

Эгерде cv2 пакети эч катасыз эле импорттолсо жана cv2 версиясы басылып чыкса, анда бизде баары жакшы!

Тест 2: Биз FFMPEG кодегин колдоно алабызбы?

Үлгүнү коюңуз

input_video.mp4

каталогдогу видео файл. Биз кыла аларыбызды текшерип көргүбүз келет:

  • бул.mp4 видео файлын окуу, жана
  • жаңы видео файлды жазыңыз (.avi же.mp4 ж.б. болушу мүмкүн)

Бул үчүн бизде python тестинин коду болушу керек, аны test.py деп атаңыз. Аны үлгү менен бир каталогго коюңуз

input_video.mp4

файл.

Бул эмне

test.py

окшош болушу мүмкүн (Эскертүү: Пит менен Уоррендин комментарий талаасындагы сунуштарына чоң рахмат - мен анын баштапкы тест кодун алмаштырдым - өзүңүз сынап көрүңүз жана бул жакшы иштээрин бизге билдириңиз):

cv2 импорттоо

cap = cv2. VideoCapture ("input_video.mp4") cap.isOpened () # True = видеону ийгиликтүү окуңуз. Жалган - видеону окубай кой. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print.isOpened () # True = видеону ийгиликтүү жазуу. Жалган - видеону жазбай коюңуз. cap.release () out.release ()

Бул тест ӨТӨ МААНИЛҮҮ. Эгерде сиз видео файлдарды иштетүүнү кааласаңыз, анда Anaconda / Spyder IDE FFMPEG (видео кодек) колдоно алаарын камсыз кылууңуз керек. Аны иштетүү үчүн мага бир нече күн керек болду. Бирок бул сизге алда канча аз убакытты талап кылат деп ишенем!:) Эскертүү: Anaconda Spyder IDE колдонууда дагы бир маанилүү кеңеш. Учурдагы жумушчу каталогду (CWD) текшерип турганыңызды текшериңиз !!!

5 -кадам: Бетти аныктоо үчүн код жасаңыз

Жүздү аныктоо үчүн код жасаңыз
Жүздү аныктоо үчүн код жасаңыз
Жүздү аныктоо үчүн код жасаңыз
Жүздү аныктоо үчүн код жасаңыз

Максат

Бул сессияда,

  • Биз Haar Feature негизделген Cascade Classifiers аркылуу жүздү аныктоонун негиздерин көрөбүз
  • Биз ошол эле нерсени көздү аныктоо ж

Хаар-каскадды аныктоо OpenCVде

Бул жерде биз аныктоо менен алектенебиз. OpenCV мурунтан эле жүзү, көзү, жылмаюусу жана башкалар үчүн даярдалган көптөгөн классификаторлорду камтыйт. Бул XML файлдары opencv/data/haarcascades/папкада сакталат. OpenCV менен жүз жана көз детекторун түзөлү. Алгач биз керектүү XML классификаторлорун жүктөшүбүз керек. Андан кийин биздин кириш сүрөтүбүздү (же видеобузду) боз масштабда жүктөңүз ЖЕ камераны колдоно алабыз (Реалдуу убакытта жүздү аныктоо үчүн)

np катары numpy импорттоо

импорттоо 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/ha_casade).xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () grey = 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) roi_gray = grey [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) for eyes: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print "found" +str (len (faces)) +"face (s)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

6 -кадам: Маалымат топтомун түзүү үчүн код жасаңыз

Маалымат топтомун түзүү үчүн код жасаңыз
Маалымат топтомун түзүү үчүн код жасаңыз
Маалымат топтомун түзүү үчүн код жасаңыз
Маалымат топтомун түзүү үчүн код жасаңыз

Биз жүздү таануу менен алектенип жатабыз, андыктан сизге айрым жүз сүрөттөрү керек! Сиз өзүңүздүн маалымат базаңызды түзө аласыз же жеткиликтүү жүз маалымат базаларынын биринен баштасаңыз болот, https://face-rec.org/databases/ сизге заманбап сереп берет. Үч кызыктуу маалымат базасы (сүрөттөмөнүн бөлүктөрү https://face-rec.org сайтынан алынган):

  • AT&T Facedatabase
  • Yale Facedatabase A.
  • Extended Yale Facedatabase B

БУЛ ЖЕРДЕ мен өзүмдүн маалымат базамды колдонуп жатам ….төмөндө берилген коддун жардамы менен:

np катары numpy импорттоо

импорттоо cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('user id') sampleN = 0; while 1: ret, img = cap.read () боз = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздөр = face_cascade.detectMultiScale (боз, 1.3, 5) үчүн (x, y, w, h) жүздөрүндө: sampleN = sampleN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", grey [y: y+h, x: x+w]) cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img'), img) cv2.waitKey (1) if sampleN> 20: break cap.release () cv2.destroyAllWindows ()

7 -кадам: Таануучуну үйрөтүү үчүн код жасаңыз

Таануучуну үйрөтүү үчүн код жасаңыз
Таануучуну үйрөтүү үчүн код жасаңыз

Окутуу комплексин даярдоо үчүн функцияны түзүңүз

Эми биз функцияны аныктайбыз

getImagesWithID (жол)

бул сүрөттүн маалымат базасына абсолюттук жолду киргизүү аргументи катары кабыл алат жана 2 тизменин жыйынтыгын кайтарат, бири табылган жүздөрдү камтыйт, экинчиси ошол бетке тиешелүү энбелгини камтыйт. Мисалы, эгерде жүз тизмесиндеги ith индекси маалымат базасындагы 5 -индивидуалдуу болсо, анда энбелгилер тизмесиндеги тиешелүү ith жайгашуусу 5ке барабар.

Эми маалымат топтомунун беттерин (6 -кадамда түзүлгөн) төмөндө келтирилген коддун жардамы менен.yml файлына айлантыңыз:

импорт os

PIL импорттоо cv2 катары np импорттоо Image # Жүздү таануу үчүн биз LBPH Бет Таануучу = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/facesData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) in f in os.listdir (path)] # print image_path #getImagesWithID (path) жүздөр = ID = =] imagePath ичинде imagePaths үчүн: # Сүрөттү окуп, боз масштабдуу жүздөргө айландыруу # Сүрөттүн энбелгисин алыңыз ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Сүрөттөгү жүздү аныктоо жүздөр.append (faceNP) IDs.append (ID) cv2.imshow ("Окутуу үчүн жүздөрдү кошуу", faceNP) cv2.waitKey (10) np.array (ID) кайтаруу, Ids, жүздөр = getImagesWithID (жол) таануучу.транспорт (жүздөр, Ids) таануучу.куткаруу ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

бул кодду колдонуу менен бардык жүздүн маалымат базасы бир.yml файлына айландырылат …… жолдун жайгашкан жери ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

8 -кадам: Бетти жана натыйжаны таануу үчүн код жасаңыз

Guyzz - бул веб -камераңыздын жардамы менен жүздөрдү таануу үчүн кодду түзө турган акыркы кадам, БУЛ КАДАМДА ИШТЕГЕН ЭКИ ОПЕРАЦИЯ БАР …. 1. камерадан видеону тартуу 2. аны.yml файлыңыз менен салыштыруу

npimport катары numpy импорт cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPizer 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.predict (боз [y: y+h, x: x+w]) if (id == 2): id == 1 if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), font, 255) cv2.imshow ('img', img) cv2.waitKey (1) == ord ('q'): cap cap.release ()

cv2.destroyAllWindows ()

жана акыры натыйжа сиздин көз алдыңызда болот ……. сиз ошондой эле шилтеменин астынан zip файлын жүктөп алсаңыз болот: Коддорду жүктөө үчүн бул жерди басыңыз Ошентип, бул көрсөтмөдө биз OpenCV аркылуу жүздү аныктоо+таануу тапшырмасын аткардык …. ушул сыяктуу ….. plzzz мага жазылып мага добуш бериңиз ….. рахмат достор:)

Сунушталууда: