Mundarija:

Yuzni aniqlash+tanib olish: 8 qadam (rasmlar bilan)
Yuzni aniqlash+tanib olish: 8 qadam (rasmlar bilan)

Video: Yuzni aniqlash+tanib olish: 8 qadam (rasmlar bilan)

Video: Yuzni aniqlash+tanib olish: 8 qadam (rasmlar bilan)
Video: Sizni 200 % yoqimtoyroq ko’rsatuvchi 10 ta hiyla | TANA TILI 2 2024, Dekabr
Anonim
Image
Image
Yuzni aniqlash+tanib olish
Yuzni aniqlash+tanib olish

Bu kameradan OpenCV yordamida yuzni aniqlash va tanib olishning oddiy namunasidir. QAYD: SENSOR KONKURSI UCHUN LOYIHA QILDIM VA TANISH YUZLARINI SENSOR QILGAN KAMERADAN SHUNDAN MAKSADIMIZ, Bu sessiyada 1. Anaconda -ni o'rnating 2. Ochiq rezyumelar paketini yuklab oling 3. Atrof -muhit o'zgaruvchilarini o'rnating 4. 5 -ni tasdiqlash uchun test. Yuzni aniqlash uchun kod yarating 6. Ma'lumotlar to'plamini yaratish uchun kod yarating 7. Tanishlarni o'rgatish uchun kod yarating 8. Yuzlarni tanib olish uchun kod yarating & Natija.

1 -qadam: Anaconda -ni o'rnating

Anaconda -ni o'rnating
Anaconda -ni o'rnating

Anaconda, aslida, NumPy, Pandas, IPython daftarchasi va boshqalar kabi foydali paketlar bilan ta'minlangan, yaxshi qadoqlangan Python IDE. Ilmiy jamoaning hamma joylarida tavsiya qilingan ko'rinadi. O'rnatish uchun Anaconda -ni tekshiring.

2 -qadam: ochiq rezyumelar paketini yuklab oling

Open CV paketini yuklab oling
Open CV paketini yuklab oling

Birinchidan, to'liq OpenCV paketini yuklab olish uchun OpenCV rasmiy saytiga o'ting. O'zingizga yoqqan versiyani tanlang (2.x yoki 3.x). Men Python 2.x va OpenCV 2.x -da bo'laman - asosan OpenCV -Python darsliklari shu asosda tuzilgani uchun.

Menimcha, men paketni (asosan papkani) to'g'ridan -to'g'ri F diskimga chiqarib oldim. (F: / opencv).

3 -qadam: Atrof -muhit o'zgaruvchilarini o'rnating

Atrof -muhit o'zgaruvchilarini o'rnating
Atrof -muhit o'zgaruvchilarini o'rnating

Cv2.pyd faylini nusxalash va joylashtirish

Anaconda sayt-paketlar katalogida (masalan, F: / Program Files / Anaconda2 / Lib / site-packages) siz import qilishingiz mumkin bo'lgan Python paketlari mavjud. Bizning maqsadimiz cv2.pyd faylini ushbu katalogga nusxalash va joylashtirish (shuning uchun biz cv2 importini Python kodlarimizda ishlatishimiz mumkin).

Buning uchun cv2.pyd faylini nusxalash …

Ushbu OpenCV katalogidan (kompyuterning bosh qismi biroz boshqacha bo'lishi mumkin):

# Python 2.7 va 64-bitli mashina: F: / opencv / build / python / 2.7 / x64# Python 2.7 va 32-bitli mashina: F: / opencv / build / python / 2.7 / x84

Bu Anaconda katalogiga (bosh qismi kompyuteringizda biroz boshqacha bo'lishi mumkin):

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

Ushbu qadamni bajargandan so'ng, endi Python kodida import cv2 dan foydalanishimiz mumkin bo'ladi. Ammo, biz hali ham FFMPEG (video kodek) ni ishga tushirish uchun biroz ko'proq ish qilishimiz kerak (bizga videolarni qayta ishlash kabi ishlarni bajarish uchun).

"Mening kompyuterim" (yoki Windows 8.1 da "Bu kompyuter")-sichqonchaning o'ng tugmasi bilan bosing-Xususiyatlar-> "Kengaytirilgan" yorlig'ini-> "Atrof-muhit o'zgaruvchilari …" tugmachasini bosing. Yangi foydalanuvchi o'zgaruvchisini qo'shing. OpenCV-ga ishora qilish uchun (32-bitli tizim uchun x86 yoki 64-bitli tizim uchun x64.) Men hozirda 64-bitli mashinadaman.

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

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

%OPENCV_DIR %\ bin ni foydalanuvchi o'zgaruvchi PATH ga qo'shing.

Masalan, mening PATH foydalanuvchi o'zgaruvchisi shunday ko'rinadi …

Oldin:

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

Keyin:

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

Mana, biz tugatdik! FFMPEG foydalanishga tayyor!

4 -qadam: Tasdiqlash uchun test

Tasdiqlash uchun test
Tasdiqlash uchun test
Tasdiqlash uchun test
Tasdiqlash uchun test

Biz buni Anaconda (Spyder IDE orqali) qila olamizmi yoki yo'qligini tekshirishimiz kerak:

  • OpenCV paketini import qiling
  • FFMPEG yordam dasturidan foydalaning (videolarni o'qish/yozish/qayta ishlash uchun)

1 -sinov: OpenCV -ni import qila olamizmi?

Anaconda endi OpenCV-Python paketini (cv2) import qila olishiga ishonch hosil qilish uchun, IPython konsolida ularni chiqaring:

cv2 import qilish

cv2._ versiyasini chop eting

Agar cv2 to'plami xatosiz ok import qilinsa va cv2 versiyasi chop etilsa, biz hammamiz yaxshi!

2 -sinov: FFMPEG kodekidan foydalanishimiz mumkinmi?

Namuna joylashtiring

kirish_video.mp4

katalogdagi video fayl. Biz qila olamizmi yoki yo'qligini tekshirmoqchimiz:

  • bu.mp4 video faylini o'qing va
  • yangi videofayl yozing (.avi yoki.mp4 bo'lishi mumkin)

Buning uchun bizda test python kodi bo'lishi kerak, uni test.py deb nomlang. Namuna bilan bir xil katalogga joylashtiring

kirish_video.mp4

fayl

Bu nima

test.py

o'xshash bo'lishi mumkin (Izoh: sharhlar sohasidagi Pit va Uorrenning takliflari uchun katta rahmat - men o'zimning asl test kodimni uning o'rniga qo'ydim - iltimos, buni o'zingiz sinab ko'ring va bu yaxshiroq ishlayaptimi, bizga xabar bering):

cv2 import qilish

cap = cv2. VideoCapture ("input_video.mp4") cap.isOpened () # True = videoni muvaffaqiyatli o'qing. Yolg'on - videoni o'qimaslik. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print.isOpened () # True = videoni muvaffaqiyatli yozish. Yolg'on - videoni yozib bo'lmaydi. cap.release () out.release ()

Bu test juda muhim. Agar siz video fayllarni qayta ishlashni xohlasangiz, Anaconda / Spyder IDE FFMPEG (video kodek) dan foydalanishiga ishonch hosil qilishingiz kerak. Uni ishga tushirishim uchun bir necha kun kerak bo'ldi. Ammo umid qilamanki, sizga kamroq vaqt kerak bo'ladi!:) Eslatma: Anaconda Spyder IDE -dan foydalanganda yana bir muhim maslahat. Joriy ishchi katalogini (CWD) tekshirganingizga ishonch hosil qiling !!!

5 -qadam: Yuzni aniqlash uchun kod yarating

Yuzni aniqlash uchun kod yarating
Yuzni aniqlash uchun kod yarating
Yuzni aniqlash uchun kod yarating
Yuzni aniqlash uchun kod yarating

Maqsad

Bu sessiyada,

  • Haar xususiyatlariga asoslangan kaskad tasniflagichlari yordamida yuzni aniqlash asoslarini ko'ramiz
  • Biz buni ko'zni aniqlash va boshqalar uchun uzaytiramiz

OpenCV-da Haar-kaskadni aniqlash

Bu erda biz aniqlash bilan shug'ullanamiz. OpenCV allaqachon yuz, ko'z, tabassum va boshqalar uchun oldindan tayyorlangan ko'plab tasniflagichlarni o'z ichiga oladi. Bu xml fayllari opencv/data/haarcascades/papkasida saqlanadi. Keling, OpenCV yordamida yuz va ko'z detektorini yarataylik, avval kerakli XML tasniflagichlarini yuklashimiz kerak. Keyin biz kiritgan tasvirni (yoki videoni) kulrang rejimda yuklang YOKI biz kameradan foydalanishimiz mumkin (real vaqtda yuzni aniqlash uchun)

numpy ni np sifatida import qilish

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/ha/ha/.xml ') cap = cv2. VideoCapture (0) 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlari = face_cascade.detectMultiScale (kulrang, 1,5, 5) uchun x, y, w, h) yuzlarida: cv2. to'rtburchak (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = kul [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] ko'zlar = eye_cascade.detectMultiScale (roi_gray) uchun roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) "topilgan" +str (len (yuzlar)) +"yuz (lar)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

6 -qadam: Ma'lumotlar to'plamini yaratish uchun kod yarating

Ma'lumotlar to'plamini yaratish uchun kod yarating
Ma'lumotlar to'plamini yaratish uchun kod yarating
Ma'lumotlar to'plamini yaratish uchun kod yarating
Ma'lumotlar to'plamini yaratish uchun kod yarating

Biz yuzni taniymiz, shuning uchun sizga yuz tasvirlari kerak bo'ladi! Siz o'z ma'lumotlar bazangizni yaratishingiz yoki mavjud ma'lumotlar bazalaridan birini boshlashingiz mumkin, https://face-rec.org/databases/ sizga zamonaviy ko'rinishni beradi. Uchta qiziqarli ma'lumotlar bazasi (tavsif qismlari https://face-rec.org saytidan olingan):

  • AT&T ma'lumotlar bazasi
  • Yel yuzaki ma'lumotlar bazasi A.
  • Yel kengaytirilgan ma'lumotlar bazasi B.

BU YERDA men o'z ma'lumotlar bazamdan foydalanmoqdaman …. Kod yordamida.

numpy ni np sifatida import qilish

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('foydalanuvchi identifikatorini kiriting') sampleN = 0; while 1: ret, img = cap.read () kulrang = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlar = face_cascade.detectMultiScale (kulrang, 1.3, 5) yuzlarida (x, y, w, h): sampleN = namuna N+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", kulrang [y: y+h, x: x+w]) cv2. to'rtburchak (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img'), img) cv2.waitKey (1), agar sampleN> 20: cap.release () cv2.destroyAllWindows ()

7 -qadam: Recognizer -ni o'rgatish uchun kod yarating

Tanib oluvchini o'rgatish uchun kod yarating
Tanib oluvchini o'rgatish uchun kod yarating

O'quv majmuasini tayyorlash funktsiyasini yarating

Endi biz funktsiyani aniqlaymiz

getImagesWithID (yo'l)

bu tasvir ma'lumotlar bazasiga mutlaq yo'lni kirish argumenti sifatida oladi va 2 ta ro'yxatni qaytaradi, bittasida aniqlangan yuzlar, ikkinchisida bu yuz uchun tegishli yorliq bor. Misol uchun, agar yuzlar ro'yxatidagi ith indeksi ma'lumotlar bazasidagi 5 -shaxsni ifodalasa, teglar ro'yxatidagi mos keladigan joy 5 ga teng.

Endi ma'lumotlar to'plamining yuzlarini (6 -qadamda yaratilgan) quyida berilgan kod yordamida.yml faylga aylantiring:

import qilish os

PIL importidan cv2 ni np import sifatida import qilish Image # Yuzni tanib olish uchun biz LBPH yuzni tanib oluvchi = 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) yuzlari = ID = =] imagePath -dagi ImagePaths uchun: # Rasmni o'qing va kulrang yuzlarga aylantiringImg = Image.open (imagePath).convert ('L') faceNP = np.array (yuzlarImg, 'uint8') # Rasm ID yorlig'ini oling = int (os.path.split (imagePath) [-1]. Split (".") [1]) # Rasmdagi yuzni aniqlang. Yuzlar (ID) cv2.imshow ("Ta'lim uchun yuzlar qo'shish", faceNP) cv2.waitKey (10) np.array (identifikatorlar) ni qaytaradi, idlar, yuzlar = getImagesWithID (yo'l) tanib oluvchi.train (yuzlar, idlar) tanib oluvchi.save ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

bu kod yordamida barcha yuz ma'lumotlar to'plami bitta.yml faylga aylantirilgan ….. yo'lning joylashuvi ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

8 -qadam: Yuz va natijani tanib olish uchun kod yarating

Guyzz - bu sizning veb -kamerangiz yordamida yuzlarni taniy oladigan kodni yaratishimiz mumkin bo'lgan oxirgi qadam. BU QADAMDA IJROLANGAN IKKI FAOLIYAT bor …. 1. videoni kameradan olish 2. uni.yml faylingiz bilan solishtiring

npimport cv2 face_cascade = cv2 sifatida import qilish. rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 shrift = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4) 1 da: ret, img = cap.read () kulrang = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlar = face_cascade.detectMultiScale (kulrang, 1,5, 5) yuzlarida (x, y, w, h): cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (kulrang [y: y+h, x: x+w]) agar (id == 2): id == 1 bo'lsa id = "alok": id == 3 bo'lsa id = "alok": id == 4 bo'lsa id = "anjali": id = "Gaurav" agar id = bo'lsa = 5: id = 'rahul' agar id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), shrift, 255) cv2.imshow ('img', img) agar cv2.waitKey (1) == ord ('q'): cap.release ()

cv2.destroyAllWindows ()

Va nihoyat natija sizning ko'zingiz oldida bo'ladi ……. siz zip -faylni havolaning ostidan ham yuklab olishingiz mumkin: Kodlarni yuklab olish uchun shu erni bosing Shunday qilib, biz bu ko'rsatmada OpenCV yordamida yuzni aniqlash+tanib olish vazifasini bajardik. Bu o'rgatuvchi kabi ….. plzzz menga obuna bo'ling va menga ovoz bering …. rahmat do'stlar:)

Tavsiya: