Мазмуну:

Реалдуу убакытта жүздү таануу: аягына чейин долбоор: 8 кадам (сүрөттөр менен)
Реалдуу убакытта жүздү таануу: аягына чейин долбоор: 8 кадам (сүрөттөр менен)
Anonim
Реалдуу убакытта жүздү таануу: аягына чейин долбоор
Реалдуу убакытта жүздү таануу: аягына чейин долбоор

OpenCVди изилдөө боюнча менин акыркы үйрөткүчүмдө, АВТОМАТТЫК КӨРҮНҮШТҮН ОБJЕКТИН КӨЗ салууну үйрөндүк. Эми биз PiCamды жүздөрдү реалдуу убакытта таануу үчүн колдонобуз, төмөндө көрүнүп тургандай:

Сүрөт
Сүрөт

Бул долбоор "Open Source Computer Vision Library" фантастикалык OpenCV менен жасалган. Бул үйрөткүчтө биз Raspberry Pi (OS катары Raspbian) жана Pythonго басым жасайбыз, бирок мен дагы кодду Mac компьютеримде сынап көрдүм жана ал дагы жакшы иштейт. OpenCV эсептөө натыйжалуулугу үчүн иштелип чыккан жана реалдуу убакытта колдонмолорго басым жасоо менен. Ошентип, бул камераны колдонуу менен реалдуу убакытта жүздү таануу үчүн идеалдуу.

Жүздү таануу боюнча толук долбоорду түзүү үчүн, биз 3 так фазада иштешибиз керек:

  1. Жүздү аныктоо жана маалыматтарды чогултуу
  2. Таануучуну үйрөтүңүз
  3. Жүз таануу

Төмөндөгү блок -схема ошол этаптарды улантат:

Сүрөт
Сүрөт

1 -кадам: БМ - Материалдык эсеп

Негизги бөлүктөр:

  1. Raspberry Pi V3 - 32.00 АКШ доллары
  2. 5 мегапиксел 1080p сенсор OV5647 Mini камера видео модулу - 13.00 АКШ доллары

2 -кадам: OpenCV 3 пакетин орнотуу

OpenCV 3 пакетин орнотуу
OpenCV 3 пакетин орнотуу

Мен Raspberry Pi V3 колдонуп жатам Raspbian (Stretch) акыркы версиясына чейин жаңыртылган, андыктан OpenCV орнотуунун эң жакшы жолу - Adrian Rosebrock тарабынан иштелип чыккан мыкты окуу куралын аткаруу: Raspbian Stretch: OpenCV 3 + Pythonду Raspberry Piге орнотуу.

Мен OpenCVди Piге орнотуу үчүн бир нече ар кандай колдонмолорду сынап көрдүм. Адриандын үйрөткүчү эң жакшы. Мен анын көрсөтмөсүн этап-этабы менен аткарып, ошону кылууну кеңеш берем.

Адриандын үйрөтмөсүн бүтүргөндөн кийин, сизде 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 сиздин питон виртуалдык чөйрөсүнө туура орнотулган.

Сиз ошондой эле орнотулган OpenCV версиясын текшере аласыз:

cv2._ версиясы_

3.3.0 көрүнүшү керек (же келечекте чыгарылышы мүмкүн болгон мыкты версия). Жогорудагы Terminal PrintScreen мурунку кадамдарды көрсөтөт.

3 -кадам: Камераңызды текшерүү

Камераңызды сыноо
Камераңызды сыноо

OpenCV сиздин RPiге орнотулгандан кийин, камераңыздын туура иштеп жатканын ырастоо үчүн тесттен өтөлү.

Менимче, сизде Raspberry Piге PiCam орнотулган.

Төмөндөгү IDEге Python кодун киргизиңиз:

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 (кадр, -1) # Камераны тигинен боз = cv2.cvtColor (кадр, cv2. COLOR_BGR2GRAY) cv2.imshow ('кадр', кадр) cv2.imshow ('боз', боз) k = cv2.waitKey (30) & 0xff if k == 27: # break EAPти токтотуу үчүн cap.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 -кадам: Жүздү аныктоо

Жүздү аныктоо
Жүздү аныктоо
Жүздү аныктоо
Жүздү аныктоо

Жүздү таануунун эң негизги милдети, албетте, "Бетти аныктоо". Келечекте тартылган жаңы жүзгө (3 -этап) салыштырмалуу, бир нерсени билүүдөн мурун, аны "кармоо" керек (1 -этап).

Жүздү (же кандайдыр бир нерселерди) аныктоонун эң кеңири таралган жолу "Haar Cascade классификаторун" колдонуу.

Haar өзгөчөлүктөрүнө негизделген каскаддык классификаторлорду колдонуу менен объекттерди аныктоо-бул 2001-жылы Пол Виола жана Майкл Джонс тарабынан сунушталган "Жөнөкөй функциялардын күчөтүлгөн каскадын колдонуу менен объекттерди тез аныктоо" сунуштаган натыйжалуу объект аныктоо ыкмасы. каскад функциясы көптөгөн оң жана терс сүрөттөрдөн үйрөтүлгөн. Андан кийин башка сүрөттөрдөгү объекттерди табуу үчүн колдонулат.

Бул жерде биз жүздү аныктоо менен иштейбиз. Башында алгоритм классификаторду үйрөтүү үчүн көптөгөн оң сүрөттөргө (беттердин сүрөттөрү) жана терс сүрөттөргө (бетсиз сүрөттөр) муктаж. Андан кийин биз андан өзгөчөлүктөрдү алуубуз керек. Жакшы кабар, OpenCV тренер жана детектор менен кошо келет. Эгерде сиз өзүңүздүн классификаторуңузду машине, учак жана башкалар сыяктуу нерселерге үйрөткүңүз келсе, OpenCVди колдонуп, аны түзө аласыз. Анын толук чоо -жайы бул жерде келтирилген: Cascade Classifier Training.

Эгерде сиз өзүңүздүн классификаторуңузду түзгүңүз келбесе, OpenCVде мурунтан эле жүз, көз, жылмаюу жана башкалар үчүн даярдалган көптөгөн классификаторлор бар. Бул XML файлдарын haarcascades каталогунан жүктөп алса болот.

Жеткиликтүү теория, OpenCV менен жүз детекторун түзөлү!

Файлды түшүрүү: faceDetection.py менин GitHubдан.

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 Height while True: ret, img = cap.read () img = cv2.flip (img, -1) grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздөр = faceCascade.detectMultiScale (боз, масштабFactor = 1.2, minNeighbors = 5, minSize = (20, 20)) үчүн (x, y, w, h) жүздөрүндө: cv2.rectangle (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 ('video', img) k = cv2.waitKey (30) & 0xff if k == 27: # break EAPти токтотуу үчүн cap.release () cv2.destroyAllWindows ()

Ишенсеңиз да, ишенбесеңиз да, жогорудагы бир нече код саптары Python жана OpenCVди колдонуу менен жүздү аныктоо үчүн керек.

Камераны текшерүү үчүн колдонулган акыркы код менен салыштырганда, ага бир нече бөлүк кошулганын түшүнөсүз. Төмөндөгү сапка көңүл буруңуз:

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

Бул "классификаторду" жүктөгөн линия (ал "Каскаддар/" деп аталган каталогдо болушу керек, сиздин проект каталогуңуздун астында).

Андан кийин, биз камерабызды орнотуп, циклдин ичине кирип, кирүү видеобузду боз масштабда жүктөйбүз (буга чейин көргөнбүз).

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

жүздөр = faceCascade.detectMultiScale (боз, scaleFactor = 1.2, minNeighbors = 5, minSize = (20, 20))

Кайда,

  • боз - бул боз түстөгү сүрөт.
  • scaleFactor - бул ар бир сүрөт масштабында сүрөттүн өлчөмү канчалык азайганын көрсөтүүчү параметр. Бул масштабдуу пирамида түзүү үчүн колдонулат.
  • minNeighbors - бул ар бир талапкердин тик бурчтугун сактоо үчүн канча кошуна болушу керектигин көрсөтүүчү параметр. Жогорку сан төмөн жалган позитивдерди берет.
  • minSize - бул жүз деп эсептелүүчү тик бурчтуктун минималдуу өлчөмү.

Функция сүрөттөгү беттерди аныктайт. Андан кийин, мисалы, көк төрт бурчтукту колдонуп, сүрөттөгү жүздөрдү "белгилешибиз" керек. Бул коддун бул бөлүгү менен жасалат:

(x, y, w, h) үчүн жүздөрдө:

cv2.rectangle (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, з). Сураныч, жогорудагы сүрөттү караңыз.

Бул жерлерди алгандан кийин, биз жүз үчүн "ROI" (тартылган тик бурчтук) түзө алабыз жана натыйжаны imshow () функциясы менен сунуштайбыз.

Rpi терминалын колдонуп, жогорудагы python скриптин python чөйрөңүздө иштетиңиз:

python faceDetection.py

Жыйынтык:

Сүрөт
Сүрөт

Сиз ошондой эле "көздү аныктоо" же ал тургай "жылмайууну аныктоо" үчүн классификаторлорду кошо аласыз. Мындай учурларда сиз классификатордун функциясын жана тик бурчтукту жүз циклинин ичине кошосуз, анткени жүздүн сыртынан көздү же жылмаюуну аныктоо эч кандай мааниге ээ эмес.

Белгилей кетсек, бир эле коддо бир нече классификаторлор бар болсо, бул аныктоо ыкмасы (HaarCascades) көп эсептөө күчүн колдонгондон кийин, иштетүүнү жайлатат. Иш столунда аны иштетүү оңой.

Менин GitHubдан сиз башка мисалдарды таба аласыз:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

Жана жогорудагы сүрөттө, жыйынтыгын көрө аласыз.

Ошондой эле, жүздү аныктоону жакшыраак түшүнүү үчүн төмөнкү үйрөткүчтү колдонсоңуз болот:

Haar Cascade Object Detection Face & Eye OpenCV Python үйрөткүчү

5 -кадам: Маалымат чогултуу

Маалымат чогултуу
Маалымат чогултуу
Маалымат чогултуу
Маалымат чогултуу

Биринчиден, мен Рамиз Раджага сүрөттөрдөгү жүздү таануу боюнча чоң эмгеги үчүн ыраазычылык билдиришим керек:

OPENCV ЖАНА ПИТОНДУ КОЛДОНГОН ЖҮЗДҮ ТААНУУ: БАШКЫЧЫНЫН ГИДИ

жана ошондой эле видеону колдонуу менен абдан комплекстүү окуу куралын иштеп чыккан Анирбан Кар:

БЕТТИ ТААНУУ - 3 бөлүк

Мен чындыгында эки окуу куралын тең карап көрүүнү сунуштайм.

Муну айтып, долбоорубуздун биринчи этабын баштайлы. Бул жерде эмне кылабыз, акыркы кадамдан башталат (Жүздү аныктоо), биз жөн гана маалымат топтомун түзөбүз, анда биз ар бир идентификаторду, жүздү аныктоо үчүн колдонулган бөлүгү менен боз түстөгү сүрөттөр тобун сактайбыз.

Биринчиден, сиз өзүңүздүн долбооруңузду иштеп чыгуучу каталог түзүңүз, мисалы, FacialRecognitionProject:

mkdir FacialRecognitionProject

Бул каталогдо, биз долбоорубуз үчүн түзө турган 3 python скрипттеринен тышкары, биз анын бет классификаторун сакташыбыз керек. Аны менин 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 кирүү колдонуучунун идентификаторун басуу ==>') басып чыгаруу ("\ n [INFO] Жүз тартууну баштапкы абалга келтирүү. Камераны карап, күтө туруңуз …") # Жекече тандалма жүздүн санын эсептөөнү баштоо = 0 while (True): 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.rectangle (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: # 30 бет үлгүсүн алыңыз жана видео тыныгууну токтотуңуз # Аб бул тазалоо басып чыгаруу ("\ n [INFO] Exiting Program and cleanup stuff") cam.release () cv2.destroyAllWindows ()

Код жүздү аныктоо үчүн көргөн кодго абдан окшош. Биз кошкон нерсе, колдонуучунун идентификаторун алуу үчүн "киргизүү буйругу" болчу, бул бүтүн сан болушу керек (1, 2, 3 ж. Б.)

face_id = киргизүү ('\ n колдонуучунун идентификаторун киргизүү ==>> басуу)

Жана алынган ар бир кадр үчүн, биз аны "маалымат базасы" каталогуна файл катары сакташыбыз керек:

cv2.imwrite ("маалымат топтому/Колдонуучу." + str (face_id) + '.' + str (саны) + ".jpg", боз [y: y + h, x: x + w])

Белгилей кетсек, жогорудагы файлды сактоо үчүн сиз "os" китепканасын импорттогон болушуңуз керек. Ар бир файлдын аталышы структурага ылайык келет:

User.face_id.count.jpg

Мисалы, face_id = 1 болгон колдонуучу үчүн, маалымат топтомундагы/ каталогдогу 4 -үлгү файлы төмөнкүдөй болот:

User.1.4.jpg

менин Пи жогорудагы сүрөттө көрсөтүлгөндөй. Менин кодум боюнча, мен ар бир idдан 30 үлгү алып жатам. Сиз аны акыркы "элифте" өзгөртө аласыз. Үлгүлөрдүн саны жүздүн үлгүлөрү тартылган циклди бузуу үчүн колдонулат.

Python скриптин иштетип, бир нече иддерди басып алыңыз. Сиз жаңы колдонуучуну бириктиргиңиз келген сайын (же мурунтан бар болгон сүрөттөрдү өзгөртүү үчүн) скриптти иштетишиңиз керек.

6 -кадам: Тренер

Тренер
Тренер

Бул экинчи этапта, биз маалымат базабыздагы бардык колдонуучу маалыматтарын жана OpenCV таануучунун "тренерин" алышыбыз керек. Бул түздөн -түз белгилүү бир OpenCV функциясы тарабынан жасалат. Натыйжада "trainer/" каталогуна сактала турган.yml файлы чыгат.

Ошентип, үйрөтүлгөн маалыматтарды сактай турган поддиректор түзүүнү баштайлы:

mkdir тренер

Менин GitHubдан экинчи python скриптин жүктөп алыңыз: 02_face_training.py

cv2 импорттоо

PILден имп номер импорттоо Сүрөт импорттоо os # Path сүрөтүнүн маалымат базасы үчүн жол = 'маалымат базасы' таануучу = cv2.face. LBPHFaceRecognizer_create () детектор = cv2. CascadeClassifier ("haarcascade_frontalface_default.xml"); getImagesAndLabels (жол) сүрөттөрүн алуу жана белгилөө үчүн # функция: imagePaths = [os.path.join (path, f) for f in os.listdir (path)] faceSamples = idP = imagePaths үчүн imagePaths үчүн: 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 print ("\ n [INFO] Окутуу жүздөрү. Бул бир нече секундга созулат. Күтө туруңуз …") жүздөр, ids = getImagesAndLabels (жол) таануучу.тренинг (жүздөр, np.array (ids)) # Моделди машыктыруучуга/тренерге сактаңыз ("\ n [INFO] {0} жүзү үйрөтүлгөн. Программадан чыгууда".формат (len (np.unique (ids)))))

Сиздин Rpiде PIL китепканасы орнотулгандыгын ырастаңыз. Болбосо, Терминалда төмөнкү буйрукту аткарыңыз:

жаздык орнотуу

Биз OpenCV пакетине киргизилген LBPH (LOCAL BINARY PATTERNS HISTOGRAMS) Face Recognizer катары тааныйбыз. Биз муну төмөнкү сапта жасайбыз:

таануучу = cv2.face. LBPHFaceRecognizer_create ()

"GetImagesAndLabels (жол)" функциясы каталогдогу бардык сүрөттөрдү алат: "маалымат топтому/", 2 массивди кайтарат: "Иддер" жана "жүздөр". Ошол массивдерди киргизүү катары биз "таануучубузду үйрөтөбүз":

таануучу.поезд (жүздөр, идентификаторлор)

Натыйжада, "trainer.yml" аттуу файл мурда биз түзгөн машыктыруучу каталогуна сакталат.

Дал ушул! Мен ырастоо үчүн көрсөткөн акыркы басма сөздү киргиздим, биз үйрөткөн Колдонуучунун жүздөрүнүн саны.

1 -этапты аткарган сайын, 2 -этап да иштетилиши керек

7 -кадам: Таануучу

Таануучу
Таануучу
Таануучу
Таануучу

Эми биз долбоорубуздун акыркы этабына жеттик. Бул жерде биз камерага жаңы жүздү түшүрөбүз жана эгерде бул адамдын жүзү мурда тартылган жана машыктырылган болсо, анда биздин таануучубуз идентификаторун жана индексин кайтарып берүүчү "божомолду" жасайт, бул матчка таануучу канчалык ишенимдүү экенин көрсөтөт.

3 -фазадагы python скриптин GitHub: 03_face_recognition.pyден жүктөп алалы.

cv2 импорттоо

np импорттоо катары os импозитору = cv2.face. LBPHFaceRecognizer_create () tanınгичи.read ('trainer/trainer.yml') cascadePath = "haarcascade_frontalface_default.xml" faceCascade = cv2. CascadeClassifier (cascadePath); font = cv2. FONT_HERSHEY_SIMPLEX #iniciate id counter id = 0 # idsге байланыштуу ысымдар: мисал ==> Marcelo: id = 1, etc names = ['None', 'Marcelo', 'Paula', 'Ilza', 'Z ',' W '] # Баштоо жана реалдуу убакытта видео тартуу камерасын баштоо = cv2. VideoCapture (0) cam.set (3, 640) # set video widht cam.set (4, 480) # set video бийиктиги # Min min window size жүз катары таануу үчүн minW = 0.1*cam.get (3) minH = 0.1*cam.get (4) True, ret: img = cam.read () img = cv2.flip (img, -1) # Вертикалдуу түрдө бозгула = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздөр = faceCascade.detectMultiScale (боз, масштабFactor = 1.2, minNeighbors = 5, minSize = (int (minW), int (minH)),) үчүн (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 = аттары [id] ишеним = "{0}% ".format (тегерек (100 - ишеним)) башка: id =" белгисиз "ишеним =" {0}%". формат (тегерек (100 - конф. 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 ('camera', img) k = cv2.waitKey (10) & 0xff # Press 'ESC' эгерде k == 27 болсо, видеону чыгаруу үчүн: break # Бир аз тазалоо басып чыгарыңыз ("\ n [INFO] Exiting Program and cleanup stuff") cam.release () cv2.destroyAllWindows ()

Биз бул жерге жаңы массивди кошуп жатабыз, андыктан номерленген идентификаторлордун ордуна "аттарды" көрсөтөбүз:

ысымдар = ['Жок', 'Марсело', 'Паула', 'Илза', 'Z', 'W']

Ошентип, мисалы: Марсело id = 1 менен колдонуучу болот; Паула: id = 2 ж.

Андан кийин, биз haasCascade классификатору менен мурда кылган жүздү аныктайбыз. Табылган жүзгө ээ болуу менен биз жогорудагы коддогу эң маанилүү функцияны чакыра алабыз:

id, ишеним = таануучу.президент (беттин боз бөлүгү)

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

Көңүл буруңуз, ишеним индекси "нөлгө" кайтып келет, эгерде ал идеалдуу дал келет

Акыры, эгер таануучу жүздү алдын ала билсе, биз сүрөттүн үстүнө ыктымал идентификатор менен текстти коёбуз жана дал келүү туура экенин % менен "ыктымалдык" канча ("ыктымалдык" = 100 - ишеним индекси). Болбосо, бетке "билинбеген" белгиси коюлат.

Натыйжасы бар gifтин астында:

Сүрөт
Сүрөт

Жогорудагы сүрөттө мен бул проектте жасалган кээ бир тесттерди көрсөтөм, мында мен да таануучу иштээрин текшерүү үчүн сүрөттөрдү колдондум.

8 -кадам: Жыйынтык

Жыйынтык
Жыйынтык

Дайыма эле, бул долбоор башкаларга электрониканын кызыктуу дүйнөсүнө жол табууга жардам берет деп ишенем!

Чоо-жайын жана акыркы кодду алуу үчүн GitHub депозитарийиме баш багыңыз: OpenCV-Face-Recognition

Башка долбоорлор үчүн, менин блогума баш багыңыз: MJRoBot.org

Төмөндө келечектеги үйрөткүчкө көз жүгүртүп, анда "жүздү автоматтык түрдө аныктоо жана башка ыкмаларды" изилдейбиз:

Сүрөт
Сүрөт

Дүйнөнүн түштүгүнөн салам!

Кийинки көрсөтмөмдө көрүшкөнчө!

Рахмат, Marcelo

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