Mundarija:

Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha: 8 qadam (rasmlar bilan)
Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha: 8 qadam (rasmlar bilan)

Video: Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha: 8 qadam (rasmlar bilan)

Video: Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha: 8 qadam (rasmlar bilan)
Video: Номозни масхара килган шайтон жазосини олди 🙀 2024, Iyul
Anonim
Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha
Haqiqiy vaqtda yuzni aniqlash: oxirigacha loyiha

OpenCV -ni o'rganish bo'yicha oxirgi darsimda biz Vizyonni avtomatik kuzatishni o'rgandik. Endi biz PiCam-dan foydalanib, yuzlarni real vaqtda taniymiz, quyida ko'rib turganingizdek:

Rasm
Rasm

Bu loyiha "Open Source Computer Vision Library" ning fantastik "OpenCV" dasturi yordamida amalga oshirildi. Ushbu qo'llanmada biz Raspberry Pi (OS sifatida Raspbian) va Pythonga e'tibor qaratamiz, lekin men o'z Mac -da kodni sinab ko'rdim va u ham yaxshi ishlaydi. OpenCV hisoblash samaradorligi uchun mo'ljallangan va real vaqtda ilovalarga katta e'tibor qaratgan. Shunday qilib, bu kamera yordamida yuzni real vaqtda aniqlash uchun juda mos keladi.

Yuzni aniqlash bo'yicha to'liq loyihani yaratish uchun biz 3 ta aniq bosqichda ishlashimiz kerak:

  1. Yuzni aniqlash va ma'lumotlarni yig'ish
  2. Tanituvchini o'rgating
  3. Yuzni aniqlash

Quyidagi blok -diagramma ushbu bosqichlarni davom ettiradi:

Rasm
Rasm

1 -qadam: BoM - Materiallar hisobi

Asosiy qismlar:

  1. Raspberry Pi V3 - 32,00 AQSh dollari
  2. 5 megapikselli 1080p sensorli OV5647 mini kamera video moduli - 13,00 AQSh dollari

2 -qadam: OpenCV 3 paketini o'rnatish

OpenCV 3 paketini o'rnatish
OpenCV 3 paketini o'rnatish

Men Raspbian (Stretch) ning oxirgi versiyasiga yangilangan Raspberry Pi V3 -dan foydalanayapman, shuning uchun OpenCV -ni o'rnatishning eng yaxshi usuli - Adrian Rosebrock tomonidan ishlab chiqilgan ajoyib qo'llanmani bajarish: Raspbian Stretch: OpenCV 3 + Python -ni Raspberry Pi -ga o'rnating..

Men PiC -ga OpenCV -ni o'rnatish uchun turli xil qo'llanmalarni sinab ko'rdim. Adrianning darsligi eng zo'r. Men sizga asta-sekin uning ko'rsatmalariga amal qilib, xuddi shunday qilishni maslahat beraman.

Adrian darsini tugatganingizdan so'ng, siz Pi -da tajribalarimizni bajarishga tayyor OpenCV virtual muhitiga ega bo'lishingiz kerak.

Keling, virtual muhitimizga o'tamiz va OpenCV 3 to'g'ri o'rnatilganligini tasdiqlaymiz.

Adrian har safar yangi terminalni ochganingizda tizim o'zgaruvchilarining to'g'ri sozlanganligiga ishonch hosil qilish uchun "manba" buyrug'ini bajarishni tavsiya qiladi.

manba ~/.profil

Keyin virtual muhitimizga kiramiz:

workon cv

Agar siz so'rov oldidan matnni (cv) ko'rsangiz, siz cv virtual muhitidasiz:

(cv) pi@malina: ~ $Adrian, Python virtual muhiti mutlaqo mustaqil va Raspbian Stretch -ning yuklanishiga kiritilgan standart Python versiyasidan ajratilganligiga e'tiborni qaratadi. Shunday qilib, global sayt-paketlar katalogidagi Python paketlari cv virtual muhitida mavjud bo'lmaydi. Xuddi shunday, cv sayt paketlariga o'rnatilgan Python paketlari global Python o'rnatilishi uchun mavjud bo'lmaydi.

Endi Python tarjimoningizni kiriting:

piton

va 3.5 (yoki undan yuqori) versiyasida ishlayotganingizni tasdiqlang

Tarjimon ichida (">>>" paydo bo'ladi) OpenCV kutubxonasini import qiling:

cv2 import qilish

Hech qanday xato xabari ko'rinmasa, OpenCV sizning PYTHON VIRTUAL MUHITingizga to'g'ri o'rnatilgan.

O'rnatilgan OpenCV versiyasini ham tekshirishingiz mumkin:

cv2._ versiya_

3.3.0 paydo bo'lishi kerak (yoki kelajakda chiqarilishi mumkin bo'lgan ustun versiya). Yuqoridagi Terminal PrintScreen oldingi qadamlarni ko'rsatadi.

3 -qadam: Kamerani sinovdan o'tkazish

Kamerangizni sinovdan o'tkazish
Kamerangizni sinovdan o'tkazish

RPi -da OpenCV -ni o'rnatganingizdan so'ng, kamerangiz to'g'ri ishlayotganini tekshirish uchun sinov o'tkazamiz.

Menimcha, sizda Raspberry Pi -da PiCam o'rnatilgan.

Quyidagi Python kodini IDE -ga kiriting:

numpy ni np sifatida import qilish

cv2 cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Height while (True): ret, frame = cap.read () frame = cv2. aylantirish (ramka, -1) # Kamerani vertikal ravishda kulrang = cv2.cvtColor (ramka, cv2. COLOR_BGR2GRAY) cv2.imshow ("ramka", ramka) cv2.imshow ("kulrang", kulrang) k = cv2. kutish tugmasi (30)) & 0xff if k == 27: # break capdan chiqish uchun "ESC" tugmasini bosing. Release () cv2.destroyAllWindows ()

Yuqoridagi kod sizning PiCam tomonidan ishlab chiqariladigan, BGR rang va kulrang rejimda ko'rsatiladigan video oqimini oladi.

E'tibor bering, men kameramni yig'ish uslubi tufayli vertikal aylantirdim. Agar bunday bo'lmasa, "aylantirish" buyruq satrini sharhlang yoki o'chiring.

Siz kodni GitHub -dan yuklab olishingiz mumkin: simpleCamTest.py

Amalga oshirish uchun buyruqni kiriting:

python simpleCamTest.py

Dasturni tugatish uchun klaviaturadagi [ESC] tugmachasini bosish kerak.

[ESC] tugmasini bosishdan oldin, video oynasida sichqonchani bosing.

Yuqoridagi rasm natijani ko'rsatadi.

Ba'zi ishlab chiqaruvchilar kamerani ochishda muammolarga duch kelishdi ("Tasdiqlanmadi" xato xabarlari). Bu, agar OpenCv -ni o'rnatishda kamera yoqilmagan bo'lsa va shuning uchun kamera drayverlari to'g'ri o'rnatilmagan bo'lsa sodir bo'lishi mumkin. Tuzatish uchun buyruqni ishlating:

sudo modprobe bcm2835-v4l2

Bcm2835-v4l2 ni /etc /modules faylining oxirgi qatoriga qo'shishingiz mumkin, shunda haydovchi yuklashda yuklanadi.

OpenCV haqida ko'proq ma'lumot olish uchun siz qo'llanmaga amal qilishingiz mumkin: loading -video-python-opencv-tutorial

4 -qadam: yuzni aniqlash

Yuzni aniqlash
Yuzni aniqlash
Yuzni aniqlash
Yuzni aniqlash

Yuzni aniqlashning eng asosiy vazifasi, albatta, "Yuzni aniqlash". Har qanday narsadan oldin, kelajakda olingan yangi yuz bilan solishtirganda, uni tanib olish uchun (1 -bosqich) yuzni "suratga olish" kerak (3 -bosqich).

Yuzni (yoki boshqa narsalarni) aniqlashning eng keng tarqalgan usuli "Haar Cascade tasniflagichi" dan foydalanishdir.

Haar xususiyatli kaskad tasniflagichlari yordamida ob'ektlarni aniqlash-bu 2001 yilda Pol Viola va Maykl Jons taklif qilgan "Oddiy xususiyatlar kaskadidan foydalangan holda ob'ektlarni tez aniqlash" taklif qilgan ob'ektni aniqlashning samarali usuli. Bu mashinani o'rganishga asoslangan yondashuv. kaskad funktsiyasi ko'plab ijobiy va salbiy tasvirlardan o'rgatilgan. Keyin u boshqa tasvirlardagi narsalarni aniqlash uchun ishlatiladi.

Bu erda biz yuzni aniqlash bilan ishlaymiz. Dastlab, tasniflagichni o'rgatish uchun algoritmga ko'plab ijobiy tasvirlar (yuzlar tasviri) va salbiy tasvirlar (yuzsiz tasvirlar) kerak bo'ladi. Keyin biz undan xususiyatlarni chiqarib olishimiz kerak. Yaxshi xabar shundaki, OpenCV murabbiy va detektor bilan birga keladi. Agar siz o'z tasniflagichingizni mashina, samolyot va boshqalar kabi har qanday ob'ektga o'rgatmoqchi bo'lsangiz, uni yaratish uchun OpenCV -dan foydalanishingiz mumkin. Uning to'liq tafsilotlari bu erda berilgan: Kaskad tasniflagichi treningi.

Agar siz o'z klassifikatoringizni yaratishni xohlamasangiz, OpenCV allaqachon yuz, ko'z, tabassum va boshqalar uchun oldindan tayyorlangan ko'plab tasniflagichlarni o'z ichiga oladi. Bu XML fayllarini haarcascades katalogidan yuklab olish mumkin.

Yetarli nazariya, keling, OpenCV yordamida yuz detektori yarataylik!

GitHub -dan faceDetection.py faylini yuklab oling.

numpy ni np sifatida import qilish

cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set balandligi rost: ret, img = cap.read () img = cv2.flip (img, -1) kulrang = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlar = faceCascade.detectMultiScale (kulrang, scaleFactor = 1.2, minNeighbors = 5, minSize = (20, 20)) (x, y, w, h) yuzlarida: cv2. to'rtburchak (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = kulrang [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w] cv2.imshow ('video', img) k = cv2.waitKey (30) & 0xff if k == 27: # break cap -ni o'chirish uchun 'ESC' tugmasini bosing.release () cv2.destroyAllWindows ()

Ishoning yoki ishonmang, Python va OpenCV -dan foydalanib, yuzni aniqlash uchun yuqoridagi bir nechta kod satrlari kifoya.

Kamerani sinab ko'rish uchun ishlatilgan oxirgi kod bilan taqqoslaganda, unga ozgina qismlar qo'shilganligini tushunasiz. Quyidagi qatorga e'tibor bering:

faceCascade = cv2. CascadeClassifier ('Kaskadlar/haarcascade_frontalface_default.xml')

Bu "tasniflagichni" yuklaydigan chiziq (u loyiha katalogingiz ostidagi "Kaskadlar/" katalogida bo'lishi kerak).

Keyin, biz kamerani o'rnatamiz va pastadir ichiga kiruvchi videomizni kul rang rejimida yuklaymiz (biz ilgari ko'rganimizdek).

Endi biz tasniflagich funktsiyasini chaqirishimiz kerak, unga juda muhim parametrlar, masalan, shkala omili, qo'shnilar soni va aniqlangan yuzning minimal hajmi.

yuzlar = faceCascade.detectMultiScale (kulrang, miqyosiFactor = 1.2, minNeighbors = 5, minSize = (20, 20))

Qaerda,

  • kulrang - kulrang rangli tasvir.
  • scaleFactor - har bir tasvir shkalasida tasvir hajmi qancha kamayishini ko'rsatuvchi parametr. Bu miqyosli piramidani yaratish uchun ishlatiladi.
  • minNeighbors - har bir nomzod to'rtburchakda qancha qo'shni bo'lishi kerakligini ko'rsatuvchi parametr. Yuqori raqam pastroq noto'g'ri pozitivlarni beradi.
  • minSize - bu yuz deb hisoblanadigan to'rtburchaklar minimal o'lchami.

Funktsiya tasvirdagi yuzlarni aniqlaydi. Keyinchalik, biz rasmdagi yuzlarni "belgilashimiz" kerak, masalan, ko'k to'rtburchak. Bu kodning ushbu qismi bilan amalga oshiriladi:

yuzlarida (x, y, w, h) uchun:

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]

Agar yuzlar topilsa, u chap burchagi (x, y) va kengligi "w", balandligi "h" bo'lgan to'rtburchaklar shaklida aniqlangan yuzlarning holatini qaytaradi ==> (x, y, w, h). Iltimos, yuqoridagi rasmga qarang.

Bu joylarni olganimizdan so'ng, biz yuz uchun "ROI" (chizilgan to'rtburchak) yaratishimiz va natijani imshow () funktsiyasi bilan taqdim etishimiz mumkin.

Yuqoridagi python skriptini python muhitida Rpi terminalidan foydalanib ishga tushiring:

python faceDetection.py

Natija:

Rasm
Rasm

Siz "ko'zni aniqlash" yoki hatto "tabassumni aniqlash" uchun tasniflagichlarni ham qo'shishingiz mumkin. Bunday holatlarda siz tasniflagich funktsiyasini va to'rtburchaklar chizig'ini o'z ichiga olasiz, chunki yuzdan tashqarida ko'zni yoki tabassumni aniqlash mantiqsiz bo'ladi.

E'tibor bering, bir xil kodda bir nechta tasniflagichlar bo'lsa, bu aniqlash usuli (HaarCascades) katta miqdordagi hisoblash quvvatidan foydalanganda, ishlov berish sekinlashadi. Ish stolida uni ishlatish osonroq.

Mening GitHub -da siz boshqa misollarni topasiz:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

Va yuqoridagi rasmda siz natijani ko'rishingiz mumkin.

Yuzni aniqlashni yaxshiroq tushunish uchun siz quyidagi qo'llanmani bajarishingiz mumkin.

Haar Cascade ob'ektlarini aniqlash yuz va ko'z OpenCV Python qo'llanmasi

5 -qadam: Ma'lumot yig'ish

Ma'lumot yig'ish
Ma'lumot yig'ish
Ma'lumot yig'ish
Ma'lumot yig'ish

Avvalo, Ramiz Rajaga fotosuratlardagi yuzni aniqlash bo'yicha ajoyib ishi uchun minnatdorchilik bildirishim kerak:

OPENCV VA PITONDAN FOYDALANGAN YUZNI TANISH: BOSHLANGICI YO'LLASHI

va Anirban Kar, shuningdek, videodan foydalanib juda keng qamrovli qo'llanma ishlab chiqdi:

YUZNI TANISH - 3 qism

Men sizga har ikkala darslikni ham ko'rib chiqishni maslahat beraman.

Buni aytib, loyihamizning birinchi bosqichini boshlaylik. Biz bu erda nima qilamiz, oxirgi bosqichdan boshlab (Yuzni aniqlash), biz har bir identifikator uchun yuzni aniqlash uchun ishlatilgan qismi kul rangdagi fotosuratlar guruhini saqlaydigan ma'lumotlar to'plamini yaratamiz.

Birinchidan, loyihangizni ishlab chiqadigan katalog yarating, masalan, FacialRecognitionProject:

mkdir FacialRecognitionProject

Ushbu katalogda, biz loyihamiz uchun yaratadigan 3 ta python skriptidan tashqari, bizda yuz tasniflagichi saqlangan bo'lishi kerak. Siz uni GitHub -dan yuklab olishingiz mumkin: haarcascade_frontalface_default.xml

Keyin, biz o'z namunalarimizni saqlaydigan va "ma'lumotlar bazasi" deb nomlanadigan pastki katalog yarating:

mkdir ma'lumotlar bazasi

Va kodni GitHub -dan yuklab oling: 01_face_dataset.py

cv2 import qilish

import os cam = cv2. VideoCapture (0) cam.set (3, 640) # video kengligi cam.set (4, 480) # video balandligi sozlangan, bitta raqamli yuz identifikatorini kiriting face_id = kiritish ('\ n foydalanuvchi identifikatorining oxirigacha kiriting ==>') chop etish ("\ n [INFO] yuzni suratga olish boshlanmoqda. Kameraga qarang va kutib turing …") # Shaxsiy namuna olish yuzini sanashni boshlang = 0 while (True): ret, img = cam.read () img = cv2.flip (img, -1) # video tasvirni vertikal ravishda kulrang = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) yuzlar = face_detector.detectMultiScale (kulrang, 1.3, 5) (x, y, w, h) yuzlarida: cv2. to'rtburchak (img, (x, y), (x+w, y+h), (255, 0, 0), 2) hisoblash + = 1 # Olingan tasvirni cv2.imwrite ma'lumotlar to'plami papkasida saqlang ("ma'lumotlar to'plami/Foydalanuvchi." + str (face_id) + '.' + str (hisoblash) + ".jpg", kulrang [y: y + h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # Agar k == 27: break elif count> = 30: videodan chiqish uchun "ESC" tugmasini bosing. # 30 ta yuz namunasini oling va video tanaffusini to'xtating # Do ab bu tozalash chop etish ("\ n [INFO] Dasturdan chiqish va tozalash ishlari") cam.release () cv2.destroyAllWindows ()

Kod biz ko'rgan yuzni aniqlash uchun juda o'xshash. Biz qo'shganimiz, foydalanuvchi identifikatorini olish uchun "kirish buyrug'i" edi, bu butun son bo'lishi kerak (1, 2, 3 va boshqalar).

face_id = kirish ('\ n foydalanuvchi identifikatorini kiriting, oxirigacha ==>' ni bosing)

Va olingan har bir ramka uchun biz uni "ma'lumotlar bazasi" katalogida fayl sifatida saqlashimiz kerak:

cv2.imwrite ("ma'lumotlar bazasi/Foydalanuvchi." + str (face_id) + '.' + str (hisoblash) + ".jpg", kulrang [y: y + h, x: x + w])

E'tibor bering, yuqoridagi faylni saqlash uchun siz "os" kutubxonasini import qilgan bo'lishingiz kerak. Har bir fayl nomi tuzilishga mos keladi:

User.face_id.count.jpg

Masalan, face_id = 1 bo'lgan foydalanuvchi uchun ma'lumotlar to'plami/ katalogidagi 4 -namunali fayl shunday bo'ladi:

Foydalanuvchi.1.4.jpg

mening Pi dan yuqoridagi rasmda ko'rsatilgandek. Mening kodimda har bir identifikatordan 30 ta namuna olaman. Siz uni oxirgi "elif" da o'zgartirishingiz mumkin. Namunalar soni yuz namunalari olingan pastadirni sindirish uchun ishlatiladi.

Python skriptini ishga tushiring va bir nechta idlarni yozib oling. Siz har safar yangi foydalanuvchini yig'ishni xohlaganingizda (yoki rasmlarni allaqachon mavjud bo'lganiga o'zgartirishingiz kerak) skriptni ishga tushirishingiz kerak.

6 -qadam: murabbiy

Murabbiy
Murabbiy

Ushbu ikkinchi bosqichda biz ma'lumotlar bazamizdan va OpenCV Recognizer -dan "murabbiy" dan barcha foydalanuvchi ma'lumotlarini olishimiz kerak. Bu to'g'ridan -to'g'ri ma'lum OpenCV funktsiyasi orqali amalga oshiriladi. Natijada "trainer/" katalogida saqlanadigan.yml fayli bo'ladi.

Shunday qilib, o'qitilgan ma'lumotlarni saqlaydigan kichik katalog yaratishni boshlaylik:

mkdir murabbiy

GitHub -dan ikkinchi python skriptini yuklab oling: 02_face_training.py

cv2 import qilish

PIL -dan np sifatida raqamni import qilish Rasmni import qilish os # Path uchun ma'lumotlar bazasi yo'li = 'ma'lumotlar bazasi' tanuvchisi = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); getImagesAndLabels (yo'l) tasvirlari va yorliq ma'lumotlarini olish uchun # funktsiyasi: imagePaths = [os.path.join (yo'l, f) uchun f uchun os.listdir (yo'l)] faceSamples = idP = image [ImagePaths uchun imagePath uchun]: PIL_img = Image.open (imagePath).convert ('L') # uni kul rangga aylantirish img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. split (".") [1]) yuz = detector.detectMultiScale (img_numpy) (x, y, w, h) yuzlar uchun: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids print ("\ n [INFO] Mashg'ulot yuzlari. Bir necha soniya davom etadi. Kutib turing …") yuzlar, ids = getImagesAndLabels (yo'l) tanib oluvchi.train (yuzlar, np.array (ids)) # Modelni murabbiy/trener.yml tanib oluvchisiga saqlang.write ('trainer/trainer.yml') # tanınuvchi.save () Macda ishlagan, lekin Pi da emas # O'qitilgan yuzlar sonini chop eting va dasturni tugatishni tugating. ("\ n [INFO] {0} yuzlar o'rgatilgan. Dasturdan chiqmoqda". format (len (np.unique (ids)))))

Rpi -da PIL kutubxonasi o'rnatilganligini tasdiqlang. Agar shunday bo'lmasa, terminalda quyidagi buyruqni bajaring:

yostiq o'rnatish

Biz tanuvchi sifatida OpenCV paketiga kiritilgan LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) yuz tanib oluvchisidan foydalanamiz. Biz buni quyidagi qatorda qilamiz:

tanuvchi = cv2.face. LBPHFaceRecognizer_create ()

"GetImagesAndLabels (yo'l)" funktsiyasi katalogdagi barcha rasmlarni oladi: "ma'lumotlar bazasi/", ikkita qatorni qaytaradi: "idlar" va "yuzlar". Ushbu massivlarni kiritish sifatida biz "taniydiganimizni o'rgatamiz":

identifikator.train (yuzlar, identifikatorlar)

Natijada, "trainer.yml" nomli fayl avval biz yaratgan murabbiylar katalogida saqlanadi.

Bo'ldi shu! Men tasdiqlash uchun ko'rsatgan oxirgi bosma bayonotni, biz o'rgatgan Foydalanuvchining yuzlari sonini qo'shdim.

Har safar 1 -bosqichni bajarganingizda, 2 -bosqich ham bajarilishi kerak

7 -qadam: tanib oluvchi

Tanib oluvchi
Tanib oluvchi
Tanib oluvchi
Tanib oluvchi

Endi biz loyihamizning oxirgi bosqichiga keldik. Bu erda biz kameramizga yangi yuzni suratga olamiz va agar bu odamning yuzini ilgari suratga olgan va o'rgatgan bo'lsa, bizning tanuvchimiz identifikator va indeksni qaytaradigan "bashorat" qiladi, bu tanib oluvchi bu o'yinda qanchalik ishonchli ekanligini ko'rsatadi.

Keling, GitHub -dan 3 -bosqich python skriptini yuklab olaylik: 03_face_recognition.py.

cv2 import qilish

numpy ni np import sifatida tanib oluvchi = cv2.face. LBPHFaceRecognizer_create () tanınuvchi.read ('trainer/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath); shrift = cv2. FONT_HERSHEY_SIMPLEX # id hisoblagichini id = 0 # idifikatsiyalari bilan bog'liq nomlar: misol ==> Marselo: id = 1 va hokazo nomlar = ['Yo'q', 'Marselo', 'Paula', 'Ilza', 'Z ',' W '] # # Videokamerani real vaqtda yozib olishni boshlang va ishga tushiring = cv2. yuz sifatida tan olinishi minW = 0.1*cam.get (3) minH = 0.1*cam.get (4) while true: ret, img = cam.read () img = cv2.flip (img, -1) # (X, y), w, h) yuzlarida: cv2. to'rtburchaklar (img, (x, y), (x+w, y+h), (0, 255, 0), 2) id, ishonch = tanib oluvchi. bashorat qilish (kulrang [y: y+h, x: x+w]) # Ishonch kamligini tekshiring 100 ==> "0" mukammal mos kelsa (ishonch <100): id = ismlar [id] ishonch = "{0}% ".format (dumaloq (100 - ishonch)) boshqa: id =" noma'lum "ishonch =" {0}%". format (davra (100 - konf. idence)) cv2.putText (img, str (id), (x+5, y-5), shrift, 1, (255, 255, 255), 2) cv2.putText (img, str (ishonch), (x+5, y+h-5), shrift, 1, (255, 255, 0), 1) cv2.imshow ('kamera', img) k = cv2.waitKey (10) & 0xff # "ESC" tugmasini bosing agar k == 27 bo'lsa, videodan chiqish uchun: break # Bir oz tozalang

Biz bu erda yangi qatorni qo'shamiz, shuning uchun raqamli identifikatorlar o'rniga "ismlar" ko'rsatiladi:

ismlar = ['Yo'q', 'Marselo', 'Paula', 'Ilza', 'Z', 'V']

Shunday qilib, masalan: Marselo id = 1 bilan foydalanuvchi bo'ladi; Paula: id = 2 va boshqalar.

Keyinchalik, biz haasCascade tasniflagichi bilan ilgari qilgan yuzni aniqlaymiz. Aniqlangan yuzga ega bo'lib, biz yuqoridagi koddagi eng muhim funktsiyani chaqira olamiz:

id, ishonch = tanib oluvchi. bashorat qilish (yuzning kulrang qismi)

Tanuvchi.predict (), tahlil qilinadigan yuzning olingan qismini parametr sifatida qabul qiladi va uning egasini qaytaradi, bu uning identifikatori va tanib oluvchining bu o'yinga qanchalik ishonishini ko'rsatadi.

E'tibor bering, ishonch indeksi "nol" ga qaytadi, agar u mukammal mos keladigan bo'lsa

Va nihoyat, agar tanuvchi yuzni bashorat qila oladigan bo'lsa, biz rasmning ustiga taxminiy identifikator bilan matn qo'yamiz va "ehtimollik" qanchalik to'g'ri kelishi " %" ("ehtimollik" = 100 - ishonch indeksi). Aks holda, yuzga "noma'lum" belgisi qo'yiladi.

Quyida natijasi bo'lgan gif:

Rasm
Rasm

Yuqoridagi rasmda men ushbu loyiha bo'yicha o'tkazilgan ba'zi testlarni ko'rsataman, bu erda men tanib oluvchining ishlashini tekshirish uchun fotosuratlardan foydalanganman.

8 -qadam: Xulosa

Xulosa
Xulosa

Har doimgidek, men umid qilamanki, bu loyiha boshqalarga ajoyib elektronika olamiga yo'l topishga yordam beradi!

Tafsilotlar va yakuniy kod uchun GitHub depozitariyamga tashrif buyuring: OpenCV-Face-Recognition

Boshqa loyihalar uchun mening blogimga tashrif buyuring: MJRoBot.org

Quyida biz "yuzni avtomatik aniqlash va yuzni aniqlashning boshqa usullarini" o'rganadigan bo'lajak o'quv qo'llanmasining qisqacha ko'rinishi:

Rasm
Rasm

Dunyoning janubidan salomlar!

Keyingi ko'rsatuvlarimda ko'rishguncha!

Rahmat, Marselo

Tavsiya: