Агуулгын хүснэгт:

Бодит цагийн нүүр таних: Төгсгөлийн төсөл: 8 алхам (зурагтай)
Бодит цагийн нүүр таних: Төгсгөлийн төсөл: 8 алхам (зурагтай)

Видео: Бодит цагийн нүүр таних: Төгсгөлийн төсөл: 8 алхам (зурагтай)

Видео: Бодит цагийн нүүр таних: Төгсгөлийн төсөл: 8 алхам (зурагтай)
Видео: 🎶 ДИМАШ "ОПЕРА 2". История выступления и анализ успеха | Dimash "Opera 2" 2024, Арванхоёрдугаар сар
Anonim
Бодит цагийн царай таних: Эцэс төгсгөлгүй төсөл
Бодит цагийн царай таних: Эцэс төгсгөлгүй төсөл

OpenCV -ийг судлах сүүлчийн хичээл дээр бид АВТОМАТ алсын хараатай обьектийн мөрдөхийг сурсан. Одоо бид PiCam-ийг ашиглан нүүр царайг бодит цаг хугацаанд таних болно.

Зураг
Зураг

Энэхүү төслийг OpenCV хэмээх гайхалтай "Нээлттэй эхийн компьютерийн харааны номын сан" -аар хийсэн. Энэ заавар дээр бид Raspberry Pi (OS гэж Raspbian) болон Python дээр анхаарлаа хандуулах болно, гэхдээ би кодыг Mac дээрээ туршиж үзсэн бөгөөд энэ нь бас сайн ажилладаг. OpenCV нь тооцооллын үр ашигт зориулагдсан бөгөөд бодит цагийн хэрэглээнд ихээхэн анхаарал хандуулдаг. Тиймээс энэ нь камер ашиглан нүүр царайг бодит цаг хугацаанд танихад тохиромжтой юм.

Нүүр таних талаар иж бүрэн төсөл бий болгохын тулд бид маш тодорхой 3 үе шаттай ажиллах ёстой.

  1. Нүүр илрүүлэх, мэдээлэл цуглуулах
  2. Танигчийг сургах
  3. Нүүр таних

Доорх блок диаграм нь эдгээр үе шатуудыг үргэлжлүүлнэ.

Зураг
Зураг

Алхам 1: Монголбанк - Билл материал

Үндсэн хэсгүүд:

  1. Raspberry Pi V3 - 32.00 доллар
  2. 5 мегапиксел 1080p мэдрэгч OV5647 мини камер видео модуль - 13.00 доллар

Алхам 2: OpenCV 3 багцыг суулгах

OpenCV 3 багцыг суулгаж байна
OpenCV 3 багцыг суулгаж байна

Би Raspberry Pi V3 -ийг Raspbian (Stretch) -ийн хамгийн сүүлийн хувилбар болгон шинэчилж байгаа тул OpenCV -ийг суулгах хамгийн сайн арга бол Adrian Rosebrock -ийн боловсруулсан маш сайн зааврыг дагаж мөрдөх явдал юм: Raspbian Stretch: OpenCV 3 + Python -ийг Raspberry Pi дээрээ суулгаарай..

Би Pi дээр OpenCV суулгахын тулд хэд хэдэн өөр гарын авлага туршиж үзсэн. Адрианы заавар бол хамгийн шилдэг нь юм. Түүний зааврыг алхам алхамаар дагаж мөрдөхийг танд зөвлөж байна.

Адрианы хичээлийг дуусгасны дараа та Pi дээр бидний туршилтыг явуулахад бэлэн OpenCV виртуал орчинтой байх ёстой.

Виртуал орчин руугаа ороод OpenCV 3 -ийг зөв суулгасан болохыг баталгаажуулцгаая.

Адриан системийн хувьсагчдыг зөв тохируулахын тулд шинэ терминал нээх бүртээ "эх сурвалж" гэсэн командыг ажиллуулахыг зөвлөж байна.

эх сурвалж ~/.профайл

Дараа нь виртуал орчинд орцгооё.

workon cv

Хэрэв та хүсэлтийн өмнөх текстийг (cv) харвал та cv виртуал орчинд байна.

(cv) pi@бөөрөлзгөнө: ~ $Адриан cv Python виртуал орчин нь бие даасан бөгөөд Raspbian Stretch -ийг татаж авахад оруулсан Python -ийн анхдагч хувилбараас хамгаалагдсан болохыг анхаарна уу. Тиймээс дэлхийн сайтын багц директор дахь Python багцууд нь cv виртуал орчинд байхгүй болно. Үүний нэгэн адил cv-ийн сайтын багцад суулгасан Python багцыг Python-ийн дэлхийн суулгацад ашиглах боломжгүй болно.

Одоо Python хэлмэрчээ оруулна уу:

питон

мөн 3.5 (эсвэл түүнээс дээш) хувилбарыг ажиллуулж байгаагаа баталгаажуулна уу

Орчуулагч дотор (">>>" гарч ирнэ) OpenCV номын санг импортлох:

cv2 импортлох

Хэрэв ямар ч алдааны мэдэгдэл гарахгүй бол OpenCV -ийг PYTHON VIRTUAL ORVIOR дээр зөв суулгасан болно.

Та мөн суулгасан OpenCV хувилбарыг шалгаж болно.

cv2._ хувилбар_

3.3.0 гарч ирэх ёстой (эсвэл ирээдүйд гаргах дээд зэргийн хувилбар). Дээрх Terminal PrintScreen нь өмнөх алхмуудыг харуулдаг.

Алхам 3: Камераа туршиж үзээрэй

Камераа шалгаж байна
Камераа шалгаж байна

OpenCV -ийг RPi -д суулгасны дараа таны камер зөв ажиллаж байгаа эсэхийг шалгахын тулд тест хийцгээе.

Таны Raspberry Pi дээр аль хэдийн PiCam суулгасан гэж би бодож байна.

Дараах Python кодыг IDE дээрээ оруулна уу.

np гэж numpy импортлох

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. flip (frame, -1) # Камерыг босоо байдлаар эргүүлэх саарал = cv2.cvtColor (frame, cv2. COLOR_BGR2GRAY) cv2.imshow ('frame', frame) cv2.imshow ('саарал', саарал) k = cv2.waitKey (30) & 0xff if k == 27: # break cap -аас гарахын тулд 'ESC' товчийг дарна уу. Release () cv2.destroyAllWindows ()

Дээрх код нь таны PiCam -ээс үүсгэсэн видео урсгалыг авах бөгөөд хоёуланг нь BGR өнгө, Саарал горимд харуулна.

Би камераа угсрах замаар босоо байдлаар эргүүлснийг анхаарна уу. Хэрэв энэ нь тийм биш бол "эргүүлэх" командын мөрийг тайлбарлаж эсвэл устгана уу.

Та кодыг миний GitHub -аас татаж авах боломжтой: simpleCamTest.py

Гүйцэтгэхийн тулд тушаалыг оруулна уу:

python simpleCamTest.py

Хөтөлбөрийг дуусгахын тулд та гар дээрх [ESC] товчлуурыг дарах ёстой.

[ESC] товчлуурыг дарахаас өмнө видео цонхонд хулганаа дарна уу.

Дээрх зураг нь үр дүнг харуулж байна.

Зарим үйлдвэрлэгчид камерыг нээхийг оролдоход асуудал гарсан ("Баталгаажуулалт амжилтгүй болсон" алдааны мессеж). Хэрэв OpenCv суулгах явцад камер идэвхжээгүй байсан бол камерын драйверуудыг зөв суулгаагүй тохиолдолд ийм зүйл тохиолдож магадгүй юм. Үүнийг засахын тулд дараах тушаалыг ашиглана уу.

sudo modprobe bcm2835-v4l2

Та bcm2835-v4l2 файлыг /etc /modules файлын сүүлчийн мөрөнд нэмж оруулах боломжтой бөгөөд ингэснээр драйвер ачаалах үед ачаалагдах болно.

OpenCV-ийн талаар илүү ихийг мэдэхийн тулд та зааврыг дагаж болно: loading -video-python-opencv-tutorial

Алхам 4: Нүүр илрүүлэх

Нүүр илрүүлэх
Нүүр илрүүлэх
Нүүр илрүүлэх
Нүүр илрүүлэх

Нүүр таних хамгийн үндсэн ажил бол мэдээж "Нүүр илрүүлэх" юм. Аливаа зүйлийн өмнө та нүүрээ танихын тулд "барих" ёстой (1 -р үе шат), ирээдүйд авах шинэ нүүртэй (3 -р үе) харьцуулахад.

Нүүр царай (эсвэл аливаа объектыг) илрүүлэх хамгийн түгээмэл арга бол "Haar Cascade ангилагч" -ыг ашиглах явдал юм.

Haar функцэд суурилсан каскад ангилагч ашиглан обьект илрүүлэх нь 2001 онд Пол Виола, Майкл Жонс нарын санал болгосон "Энгийн шинж чанаруудыг сайжруулсан каскад ашиглан объектыг хурдан илрүүлэх" санал болгосон үр дүнтэй объект илрүүлэх арга юм. каскадын функцийг олон эерэг ба сөрөг зургуудаас сургадаг. Дараа нь бусад зурган дээрх объектуудыг илрүүлэхэд ашигладаг.

Энд бид нүүр таних төхөөрөмжтэй ажиллах болно. Анхандаа алгоритмд ангилагчийг сургахын тулд маш олон эерэг зураг (нүүрний зураг) болон сөрөг зураг (нүүргүй зураг) хэрэгтэй. Дараа нь бид үүнээс онцлог шинж чанарыг олж авах хэрэгтэй. Сайн мэдээ бол OpenCV нь сургагч, детектортой хамт ирдэг. Хэрэв та машин, онгоц гэх мэт аливаа объектод өөрийн ангилагчийг сургахыг хүсч байвал OpenCV ашиглан үүнийг үүсгэж болно. Түүний бүрэн мэдээллийг энд өгөв: Каскад ангилагчийн сургалт.

Хэрэв та өөрийн ангилагч үүсгэхийг хүсэхгүй байгаа бол OpenCV нь нүүр, нүд, инээмсэглэл гэх мэт урьдчилан бэлтгэгдсэн олон ангилагчийг агуулдаг бөгөөд эдгээр XML файлуудыг haarcascades директороос татаж авах боломжтой.

Хангалттай онол, OpenCV -тэй нүүр илрүүлэгч бүтээцгээе!

Миний GitHub дээрээс faceDetection.py файлыг татаж аваарай.

np гэж numpy импортлох

cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set High байхад True: ret, img = cap.read () img = cv2.flip (img, -1) саарал = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) 20, 20)) (x, y, w, h) нүүрний хувьд: cv2. Тэгш өнцөгт (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = саарал [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w] cv2.imshow ('видео', img) k = cv2.waitKey (30) & 0xff if k == 27: # break cap -аас гарахын тулд 'ESC' дарна уу. Release () cv2.destroyAllWindows ()

Дээр дурдсан кодын мөрүүд нь Python болон OpenCV -ийг ашиглан нүүрээ тодорхойлоход л хангалттай гэдэгт итгээрэй.

Камерыг туршихад ашигласан сүүлийн кодтой харьцуулж үзэхэд цөөн хэдэн хэсэг нэмэгдсэн болохыг ойлгох болно. Доорх мөрийг анхаарна уу.

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

Энэ бол "ангилагч" -ыг ачаалж буй мөр юм (энэ нь таны төслийн лавлах дор "Cascades/" нэртэй директорт байх ёстой).

Дараа нь бид камераа байрлуулж, давталтын дотор оролтын видеогоо саарал өнгөний горимд ачаална (өмнө нь харж байсан шиг).

Одоо бид ангилагчийн функцийг дуудаж, масштабын хүчин зүйл, хөршүүдийн тоо, илрүүлсэн нүүрний хамгийн бага хэмжээ гэх мэт маш чухал параметрүүдийг дамжуулах ёстой.

нүүр = faceCascade.detectMultiScale (саарал, масштаб Хүчин зүйл = 1.2, минХөршүүд = 5, мин Хэмжээ = (20, 20))

Хаана,

  • саарал бол оролтын саарал өнгийн дүрс юм.
  • scaleFactor нь зургийн масштаб бүрт зургийн хэмжээ хэр их хэмжээгээр буурч байгааг тодорхойлдог параметр юм. Үүнийг масштабтай пирамид үүсгэхэд ашигладаг.
  • minNeighbors бол нэр дэвшигч тэгш өнцөгтийг хадгалахын тулд хэдэн хөрштэй байх ёстойг тодорхойлох параметр юм. Илүү их тоо нь хуурамч эерэг үр дүнг өгдөг.
  • minSize бол нүүр царай гэж тооцогдох тэгш өнцөгтийн хамгийн бага хэмжээ юм.

Функц нь зураг дээрх нүүр царайг илрүүлэх болно. Дараа нь бид зурган дээрх нүүрийг жишээлбэл цэнхэр тэгш өнцөгт ашиглан "тэмдэглэх" ёстой. Үүнийг кодын энэ хэсэгт хийж гүйцэтгэнэ:

(x, y, w, h) нүүрний хувьд:

cv2. тэгш өнцөгт (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = саарал [y: y+h, x: x+w] roi_color = img [y: y+h, x: x+w]

Хэрэв царай олдвол илэрсэн нүүрний байрлалыг зүүн дээд булан (x, y), өргөн нь "w", өндөр нь "h" байх = => (x, y, w, h). Дээрх зургийг үзнэ үү.

Эдгээр байршлыг олж авсны дараа бид нүүрэнд "ROI" (тэгш өнцөгт зурсан) үүсгэж, үр дүнг imshow () функцээр танилцуулж болно.

Дээрх python скриптийг өөрийн python орчинд Rpi терминал ашиглан ажиллуулна уу.

python faceDetection.py

Үр дүн:

Зураг
Зураг

Та мөн "нүд илрүүлэх" эсвэл бүр "инээмсэглэл илрүүлэх" ангилагчийг оруулж болно. Ийм тохиолдолд та нүүрний хүрд дотор ангилагчийн функц, тэгш өнцөгт зурах үйлдлийг оруулах болно, учир нь нүүрний гаднах нүд, инээмсэглэлийг илрүүлэх нь утгагүй болно.

Pi дээр хэд хэдэн ангилагчийг нэг кодтой байлгах нь энэхүү удаашруулах аргыг (HaarCascades) маш их тооцоолох хүч ашигладаг бол боловсруулалтыг удаашруулна гэдгийг анхаарна уу. Ширээний компьютер дээр үүнийг ажиллуулах нь илүү хялбар байдаг.

Миний GitHub дээрээс та бусад жишээг олох болно.

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

Дээрх зурган дээр та үр дүнг харж болно.

Та мөн нүүрний илрүүлэлтийг илүү сайн ойлгохын тулд доорх зааврыг дагаж болно.

Haar Cascade объект илрүүлэх нүүр ба нүд OpenCV Python заавар

Алхам 5: Мэдээлэл цуглуулах

Мэдээлэл цуглуулах
Мэдээлэл цуглуулах
Мэдээлэл цуглуулах
Мэдээлэл цуглуулах

Юуны өмнө би Рамиз Ражад зурган дээрх нүүр таних чиглэлээр хийсэн гайхалтай ажилд нь талархах ёстой.

OPENCV, PYTHON ашиглан нүүр царайгаа таних нь: эхлэгчдийн гарын авлага

мөн Анирбан Кар, видео ашиглан маш дэлгэрэнгүй заавар боловсруулсан болно.

Нүүр царай таних - 3 хэсэг

Хоёр хичээлийг хоёуланг нь үзэхийг танд зөвлөж байна.

Үүнийг хэлээд төслийнхөө эхний үе шатыг эхлүүлье. Энд хийх зүйл бол сүүлчийн алхамаас эхэлж байна (Нүүр илрүүлэх), бид зүгээр л мэдээллийн бааз үүсгэх болно, тэнд бид id тус бүрт, саарал өнгийн гэрэл зургийн бүлгийг нүүр танихад ашигладаг хэсгийг хадгалах болно.

Нэгдүгээрт, төслөө боловсруулж буй лавлах үүсгэ, жишээлбэл FacialRecognitionProject:

mkdir FacialRecognitionProject

Энэ лавлахад манай төсөлд зориулж бүтээх 3 питон скриптээс гадна бид нүүрний ангилагчийг хадгалсан байх ёстой. Та үүнийг миний GitHub дээрээс татаж авах боломжтой: haarcascade_frontalface_default.xml

Дараа нь бид нүүрний дээжээ хадгалах дэд директор үүсгэж, үүнийг "мэдээллийн сан" гэж нэрлэнэ үү.

mkdir мэдээллийн сан

Мөн кодыг миний GitHub -аас татаж аваарай: 01_face_dataset.py

cv2 импортлох

import os cam = cv2. VideoCapture (0) cam.set (3, 640) # set video width cam.set (4, 480) # set video height face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Хүн бүрт, нэг тоон нүүрний id оруулна уу face_id = оролт ('\ n хэрэглэгчийн id төгсгөлийг дарна уу ==>') хэвлэх ("\ n [INFO] Нүүрний зураг авах ажиллагааг эхлүүлж байна. Камерыг хараад хүлээнэ үү …") # Хувь хүний түүвэрлэлтийн тоог тоолох тоог эхлүүлнэ. = 0 байхад (Үнэн): ret, img = cam.read () img = cv2.flip (img, -1) # видео дүрсийг босоо байдлаар эргүүлэх саарал = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) царай = face_detector.detectMultiScale (саарал, 1.3, 5) (x, y, w, h) нүүрний хувьд: cv2. тэгш өнцөгт (img, (x, y), (x+w, y+h), (255, 0, 0), 2) count + = 1 # Барьсан зургийг cv2.imwrite өгөгдлийн багц хавтсанд хадгална уу ("мэдээллийн сан/Хэрэглэгч." + str (face_id) + '.' + str (тоо) + ".jpg", саарал [y: y + h, x: x+w]) cv2.imshow ('image', img) k = cv2.waitKey (100) & 0xff # k == 27: break elif count> = 30: 'ESC' товчийг дарж видеогоос гарна уу. # 30 нүүрний дээж аваад видео завсарлагаа зогсоо # Do ab Энэ нь цэвэрлэгээний хэвлэх ("\ n [INFO] Хөтөлбөрөөс гарч, цэвэрлэх зүйлс") cam.release () cv2.destroyAllWindows ()

Код нь бидний нүүр царай таних кодтой маш төстэй юм. Бидний нэмсэн зүйл бол хэрэглэгчийн id -ийг авах "оруулах тушаал" байсан бөгөөд энэ нь бүхэл тоо байх ёстой (1, 2, 3 гэх мэт).

face_id = оролт ('\ n хэрэглэгчийн id оруулна уу ==>> дарна уу)

Баригдсан хүрээ тус бүрийн хувьд бид үүнийг "мэдээллийн сан" лавлахад файл хэлбэрээр хадгалах ёстой.

cv2.imwrite ("мэдээллийн сан/Хэрэглэгч." + str (face_id) + '.' + str (тоо) + ".jpg", саарал [y: y + h, x: x + w])

Дээрх файлыг хадгалахын тулд та "os" номын санг импортолсон байх ёстой гэдгийг анхаарна уу. Файл бүрийн нэр бүтцийг дагах болно.

Хэрэглэгч.face_id.count.jpg

Жишээлбэл, face_id = 1 -тэй хэрэглэгчийн хувьд өгөгдлийн сан/ лавлах дээрх 4 -р жишээ файл дараах байдалтай байх болно.

Хэрэглэгч.1.4.jpg

миний Pi дээрх дээрх зураг дээр үзүүлсэн шиг. Миний код дээр id бүрээс 30 дээж авч байна. Та үүнийг сүүлчийн "элиф" дээр өөрчилж болно. Дээжийн тоог нүүрний дээж авах гогцоог таслахад ашигладаг.

Python скриптийг ажиллуулаад цөөн хэдэн Ids -ийг аваарай. Та шинэ хэрэглэгчийг нэгтгэх (эсвэл аль хэдийн байгаа зургуудыг өөрчлөх) хүсэх болгондоо скриптийг ажиллуулах ёстой.

Алхам 6: Дасгалжуулагч

Дасгалжуулагч
Дасгалжуулагч

Энэ хоёр дахь үе шатанд бид мэдээллийн сангаасаа бүх хэрэглэгчийн өгөгдлийг авах ёстой бөгөөд OpenCV танигчийг "сургагч" болгох ёстой. Үүнийг OpenCV -ийн тодорхой функцээр шууд хийдэг. Үр дүн нь "trainer/" директор дээр хадгалагдах болно.yml файл болно.

Тиймээс, бэлтгэгдсэн өгөгдлийг хадгалах дэд директор үүсгэж эхэлье.

mkdir дасгалжуулагч

Миний GitHub -аас хоёр дахь питон скриптийг татаж авах: 02_face_training.py

cv2 импортлох

PIL -ээс np гэж импортлох Зураг импортлох os # Path of path image database path = 'dataset' танигч = cv2.face. LBPHFaceRecognizer_create () detector = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); getImagesAndLabels (зам): зураг, шошго авахын тулд # функц: PIL_img = Image.open (imagePath).convert ('L') # үүнийг саарал өнгөтэй болгон хувиргах img_numpy = np.array (PIL_img, 'uint8') id = int (os.path.split (imagePath) [-1]. хуваах (".") [1]) нүүр = detector.detectMultiScale (img_numpy) (x, y, w, h) нүүрний хувьд: faceSamples.append (img_numpy [y: y+h, x: x+w]) ids.append (id) return faceSamples, ids хэвлэх ("\ n [INFO] Сургалтын нүүр царай. Хэдэн секунд болно. Хүлээгээрэй …") нүүр, ids = getImagesAndLabels (зам) танигч.трэйн (нүүр, np.array (ids)) # Загварыг сургагч/дасгалжуулагч болгон хадгалах. iml танигч ("\ n [INFO] {0} бэлтгэгдсэн нүүр царай. Хөтөлбөрөөс гарч байна". формат (len (np.unique (ids)))))

Та Rpi дээр PIL номын сан суулгасан эсэхээ баталгаажуулна уу. Үгүй бол доорх тушаалыг Терминал дээр ажиллуулна уу.

pip дэр суулгах

Бид OpenCV багцад багтсан LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) нүүр танигчийг танигч болгон ашиглах болно. Бид үүнийг дараах мөрөнд хийдэг.

танигч = cv2.face. LBPHFaceRecognizer_create ()

"GetImagesAndLabels (зам)" функц нь "багц/" лавлах дээрх бүх зургийг авах бөгөөд "Ids" ба "царай" гэсэн 2 массивыг буцаана. Эдгээр массивыг оролт болгон бид "танигчдаа сургах" болно:

таних. галт тэрэг (нүүр, таних тэмдэг)

Үүний үр дүнд "trainer.yml" нэртэй файл бидний өмнө үүсгэсэн сургагч багшийн санд хадгалагдах болно.

Ингээд л боллоо! Баталгаажуулахын тулд харуулсан хамгийн сүүлийн хэвлэлийн мэдэгдлийг бид бэлтгэсэн Хэрэглэгчийн нүүрний тоог оруулав.

Та 1 -р үе шатыг хийх болгондоо 2 -р үе шатыг ажиллуулах ёстой

Алхам 7: Танигч

Танигч
Танигч
Танигч
Танигч

Одоо бид төслийнхөө эцсийн шатанд орлоо. Энд бид камер дээрээ шинэхэн царай авах болно, хэрэв энэ хүн өмнө нь нүүрээ барьж, сургаж байсан бол танигч нь таних тэмдгийг энэ тоглолтонд хэр итгэлтэй байгааг харуулсан "урьдчилсан таамаглал" хийх болно.

Гурав дахь шатны python скриптийг миний GitHub: 03_face_recognition.py дээрээс татаж авцгаая.

cv2 импортлох

np импортлох os танигч = cv2.face. LBPHFaceRecognizer_create () tanınir.read ('сургагч багш/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath) байдлаар импортлох. font = cv2. FONT_HERSHEY_SIMPLEX # idici id id = 0 # ids -тэй холбоотой нэрс: жишээ ==> Marcelo: id = 1, etc names = ['None', 'Marcelo', 'Paula', 'Ilza', 'Z ',' W '] # Бодит цагийн видео бичлэг хийх камерыг эхлүүлэх ба эхлүүлэх = cv2. нүүр царай гэж хүлээн зөвшөөрөгдөх minW = 0.1*cam.get (3) minH = 0.1*cam.get (4) байхад True: ret, img = cam.read () img = cv2.flip (img, -1) # (X, y), w, h) нүүрэн дээр: cv2.rectangle (img, (x, y), (x+w, y+h), (0, 255, 0), 2) id, өөртөө итгэх итгэл = танигч. y: y+h, x: x+w]) # Итгэл үнэмшил нь түүнээс бага байгаа эсэхийг шалгаарай 100 ==> "0" нь төгс тохирох эсэхийг (итгэлтэй байдал <100): id = names [id] итгэлтэй = "{0}% ".format (дугуй (100 - итгэл)) өөр: id =" үл мэдэгдэх "итгэл =" {0}%". формат (дугуй (100 - conf idence)) cv2.putText (img, str (id), (x+5, y-5), фонт, 1, (255, 255, 255), 2) cv2.putText (img, str (итгэлтэй), (x+5, y+h-5), фонт, 1, (255, 255, 0), 1) cv2.imshow ('камер', img) k = cv2.waitKey (10) & 0xff # 'ESC' товчийг дарна уу. k == 27 байвал видеогоос гарахын тулд: break # Бага зэрэг цэвэрлэгээ хий ("\ n [INFO] Exiting Program and cleanup stuff") cam.release () cv2.destroyAllWindows ()

Бид энд шинэ массив оруулж байгаа тул дугаарлагдсан id -ийн оронд "нэр" -ийг харуулах болно.

нэр = ['Байхгүй', 'Марсело', 'Паула', 'Илза', 'Z', 'W']

Тиймээс, жишээ нь: Марсело id = 1 -тэй хэрэглэгч байх болно; Паула: id = 2 гэх мэт.

Дараа нь бид haasCascade ангилагчаар өмнө нь хийж байсан нүүрээ илрүүлэх болно. Илэрсэн царайтай бол бид дээрх кодын хамгийн чухал функцийг дуудаж болно.

id, өөртөө итгэх итгэл = танигч. таамаглах (нүүрний саарал хэсэг)

Танигч.predict () нь нүүрний авсан хэсгийг шинжилж параметр болгон авч, түүний эзэмшигчийг буцааж өгөх бөгөөд энэ нь танигч энэ тоглолтонд хэр итгэлтэй байгааг харуулна.

Итгэлцлийн индексийг төгс тохирох гэж үзвэл "тэг" болно

Эцэст нь хэрэв танигч нүүр царайг урьдчилан таамаглаж чадвал бид дүрсэн дээр магадлалтай id бүхий текстийг тавьдаг бөгөөд "магадлал" нь хичнээн хувь нь таарч байгаа вэ ("магадлал" = 100 - итгэлийн индекс). Үгүй бол нүүрэндээ "мэдэхгүй" гэсэн шошго тавьдаг.

Үр дүн бүхий-g.webp

Зураг
Зураг

Дээрх зурган дээр би энэ төсөл дээр хийсэн зарим туршилтуудыг харуулсан бөгөөд танигч ажиллаж байгаа эсэхийг шалгахын тулд гэрэл зургийг ашигласан болно.

Алхам 8: Дүгнэлт

Дүгнэлт
Дүгнэлт

Урьдын адил энэ төсөл нь бусад хүмүүст электроникийн ертөнцөд аялахад нь тусална гэж найдаж байна!

Дэлгэрэнгүй мэдээлэл, эцсийн кодыг авахын тулд миний GitHub хадгалагч руу очно уу: OpenCV-Face-Recognition

Бусад төслүүдийн талаар MJRoBot.org миний блогоос үзнэ үү

"Нүүр царай автоматаар илрүүлэх болон нүүр таних бусад аргуудыг" судлах ирээдүйн зааварчилгааны доор.

Зураг
Зураг

Дэлхийн өмнөд хэсгээс мэндчилгээ дэвшүүлье!

Дараагийн зааварчилгаагаараа уулзацгаая!

Баярлалаа, Марсело

Зөвлөмж болгож буй: