Мазмұны:

Нақты уақыттағы бет-әлпетті тану: аяқталатын жоба: 8 қадам (суреттермен)
Нақты уақыттағы бет-әлпетті тану: аяқталатын жоба: 8 қадам (суреттермен)

Бейне: Нақты уақыттағы бет-әлпетті тану: аяқталатын жоба: 8 қадам (суреттермен)

Бейне: Нақты уақыттағы бет-әлпетті тану: аяқталатын жоба: 8 қадам (суреттермен)
Бейне: SENSION СӨЗІ ҚАЛАЙ ОЙЛАДЫ? #сезім (HOW TO PRONOUNCE SENSION? #sension) 2024, Қараша
Anonim
Нақты уақыттағы бет-әлпетті тану: аяқталатын жоба
Нақты уақыттағы бет-әлпетті тану: аяқталатын жоба

OpenCV -ді зерттеуге арналған соңғы оқулықта біз VISION -дің АВТОМАТТЫ ҚАЗАҚТЫ бақылауды үйрендік. Енді біз 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 шағын камера бейне модулі - 13,00 АҚШ доллары

2 -қадам: OpenCV 3 бумасын орнату

OpenCV 3 бумасын орнату
OpenCV 3 бумасын орнату

Мен Raspbian (Stretch) соңғы нұсқасына дейін жаңартылған Raspberry Pi V3 қолданамын, сондықтан OpenCV орнатудың ең жақсы әдісі - Adrian Rosebrock әзірлеген тамаша оқулықты ұстану: Raspbian Stretch: OpenCV 3 + Python -ды Raspberry Pi -ге орнату.

Мен PiC -ге OpenCV орнату үшін бірнеше нұсқаулықтарды қолдандым. Адрианның оқулығы ең жақсы. Мен сізге оның нұсқауларын біртіндеп орындауға кеңес беремін.

Адрианның оқулығын аяқтағаннан кейін сізде Pi -де біздің эксперименттерді жүргізуге дайын OpenCV виртуалды ортасы болуы керек.

Виртуалды ортаға кіріп, OpenCV 3 дұрыс орнатылғанын растайық.

Адриан жүйелік айнымалы мәндердің дұрыс орнатылғанына көз жеткізу үшін жаңа терминал ашылған сайын «көзі» пәрменін орындауды ұсынады.

көзі ~/.профиль

Содан кейін виртуалды ортаға кірейік:

workon cv

Егер сіз сұраудың алдындағы мәтінді (cv) көрсеңіз, онда сіз cv виртуалды ортадасыз:

(cv) pi@таңқурай: ~ $Адриан cv Python виртуалды ортасы толығымен тәуелсіз және Raspbian Stretch жүктеуге қосылған әдепкі Python нұсқасынан алынғанына назар аударады. Сонымен, жаһандық сайттар пакеті каталогындағы кез келген Python пакеттері түйіндеме виртуалды ортаға қол жетімді болмайды. Сол сияқты, түйіндеменің тораптық пакеттерінде орнатылған кез келген Python бумалары Python-дың жаһандық орнатылымында қол жетімді болмайды.

Енді Python аудармашысына кіріңіз:

питон

және 3.5 (немесе одан жоғары) нұсқасын іске қосқаныңызды растаңыз

Аудармашы ішінде («>>>» пайда болады) OpenCV кітапханасын импорттаңыз:

cv2 импорттау

Егер қате туралы хабарламалар шықпаса, OpenCV PYTHON VIRTUAL ORVIOURE -ге дұрыс орнатылған.

Сондай -ақ, орнатылған OpenCV нұсқасын тексеруге болады:

cv2._ нұсқасы_

3.3.0 (немесе болашақта шығарылатын жоғары нұсқасы) пайда болуы керек. Жоғарыдағы Terminal PrintScreen алдыңғы қадамдарды көрсетеді.

3 -қадам: камераны тексеру

Камераны тексеру
Камераны тексеру

RPi -де OpenCV орнатылғаннан кейін камераның дұрыс жұмыс жасайтынын тексеру үшін тест жасайық.

Сізде Raspberry Pi -де PiCam орнатылған деп ойлаймын.

IDE -ге төмендегі Python кодын енгізіңіз:

numpy санын np ретінде импорттаңыз

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. аудару (кадр, -1) # Камераны тігінен сұр түске айналдыру = cv2.cvtColor (кадр, cv2. COLOR_BGR2GRAY) cv2.imshow ('кадр', жақтау) cv2.imshow ('сұр', сұр) k = cv2.waitKey (30) & 0xff if k == 27: # 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 -қадам: Бетті анықтау

Бетті анықтау
Бетті анықтау
Бетті анықтау
Бетті анықтау

Бетті танудың ең негізгі міндеті, әрине, «Бетті анықтау». Болашақта түсірілген жаңа бетпен (3 -кезең) салыстырғанда, кез келген нәрсені тану үшін оны «түсіру» керек (1 кезең).

Бетті (немесе кез келген заттарды) анықтаудың ең кең тараған әдісі - «Haar Cascade классификаторын» қолдану.

Haar мүмкіндіктеріне негізделген каскадтық жіктеуіштерді қолдану арқылы объектілерді анықтау-бұл 2001 жылы Пол Виола мен Майкл Джонс ұсынған «Қарапайым мүмкіндіктердің күшейтілген каскады көмегімен объектілерді жылдам анықтау» ұсынған объектілерді анықтаудың тиімді әдісі. каскадты функция көптеген оң және теріс суреттерден үйретілген. Содан кейін ол басқа суреттердегі объектілерді анықтау үшін қолданылады.

Мұнда біз бетті анықтау әдісімен жұмыс жасаймыз. Бастапқыда алгоритмге жіктеуішті үйрету үшін көптеген оң бейнелер (беттердің суреттері) мен теріс бейнелер (бетсіз суреттер) қажет. Содан кейін біз одан ерекшеліктерді алуымыз керек. Жақсы жаңалық - OpenCV жаттықтырушымен бірге детектормен бірге келеді. Егер сіз автокөлік, ұшақ және т. Оның толық мәліметтері мына жерде келтірілген: Каскад жіктеуішті оқыту.

Егер сіз өз классификаторыңызды жасағыңыз келмесе, OpenCV-де бұрыннан бетке, көзге, күлімсіреуге және т.б. үшін дайындалған көптеген жіктегіштер бар. Бұл XML файлдарын haarcascades каталогынан жүктеуге болады.

Теория жеткілікті, OpenCV көмегімен бет детекторын жасайық!

Менің GitHub -дан faceDetection.py файлын жүктеңіз.

numpy санын np ретінде импорттаңыз

cv2 faceCascade = cv2. CascadeClassifier ('Cascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) cap.set (3, 640) # set Width cap.set (4, 480) # set Биіктігі True: ret, img = cap.read () img = cv2.flip (img, -1) grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздер = faceCascade.detectMultiScale (сұр, масштабты фактор = 1.2, minNeighbors = 5, minSize = (20, 20)) (x, y, w, h) беттерінде: cv 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: # cap қалпынан шығу үшін 'ESC' түймесін басыңыз.release () cv2.destroyAllWindows ()

Сеніңіз немесе сенбеңіз, Python мен OpenCV көмегімен бетті анықтау үшін жоғарыдағы бірнеше код жолдары қажет.

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

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

Бұл «жіктеуішті» жүктейтін жол (ол сіздің жобалар каталогының астындағы «Каскадтар/» деп аталатын каталогта болуы керек).

Содан кейін біз камераны орнатамыз және циклдің ішіне кіретін бейнені сұр түс режимінде жүктейміз (біз бұрын көргендей).

Енді біз жіктеуіш функциясын шақыруымыз керек, оны масштаб коэффициенті, көршілер саны және анықталған тұлғаның минималды өлшемі сияқты өте маңызды параметрлерден өткіземіз.

жүздер = 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, з) Жоғарыдағы суретті қараңыз.

Бұл орындарды алғаннан кейін, біз тұлға үшін «ROI» (сызылған тіктөртбұрыш) жасай аламыз және нәтижені imshow () функциясымен ұсына аламыз.

Жоғарыдағы python сценарийін python ортасында Rpi терминалын қолданып іске қосыңыз:

python faceDetection.py

Нәтиже:

Кескін
Кескін

Сіз сондай -ақ «көзді анықтау» немесе тіпті «күлімсіреуді анықтау» классификаторларын қоса аласыз. Бұл жағдайда сіз жіктеуіш функциясын және бет ілмегінің ішіне тіктөртбұрыш сызуды қосасыз, себебі беттің сыртында көзді немесе күлімсіреуді анықтау мағынасы жоқ.

Бір кодта бірнеше классификаторлар бар Pi -де бұл анықтау әдісі (HaarCascades) есептеу күшінің үлкен мөлшерін қолданғаннан кейін өңдеуді баяулататынын ескеріңіз. Жұмыс үстелінде оны іске қосу оңайырақ.

Менің GitHub -те сіз басқа мысалдарды таба аласыз:

faceEyeDetection.py

faceSmileDetection.py

faceSmileEyeDetection.py

Ал жоғарыдағы суретте сіз нәтижені көре аласыз.

Бетті анықтауды жақсы түсіну үшін төмендегі оқулықты орындауға болады:

Haar Cascade нысандарын анықтау бет пен көз OpenCV Python оқулығы

5 -қадам: Деректерді жинау

Мәліметтер жинау
Мәліметтер жинау
Мәліметтер жинау
Мәліметтер жинау

Ең алдымен, мен Рамиз Раджаға фотосуреттердегі бетті тану бойынша керемет жұмысы үшін алғыс айтуым керек:

OPENCV мен ПИТОНДЫ ҚОЛДАНЫП БЕТТІ ТАНУ: Бастаушы нұсқаулығы

сонымен қатар Анирбан Кар, ол бейнені қолдана отырып, өте толық оқулықты әзірледі:

БЕТТІ ТАНУ - 3 бөлім

Мен сізге екі оқулықты да қарауды ұсынамын.

Осыны айта отырып, жобамыздың бірінші кезеңін бастайық. Біз мұнда не істейтін боламыз, соңғы қадамнан басталады (Бетті анықтау), біз жай ғана деректер жиынтығын жасаймыз, онда біз әр идентификатор үшін суретті топтаманы сақтаймыз, оның бөлігі бетті анықтау үшін пайдаланылған.

Алдымен, жобаңызды дамытатын каталог жасаңыз, мысалы, FacialRecognitionProject:

mkdir FacialRecognitionProject

Бұл каталогта, біз өз жобамыз үшін жасайтын 3 питон сценарийінен басқа, біз бет жіктеуішті сақтаған болуымыз керек. Сіз оны GitHub -дан жүктей аласыз: haarcascade_frontalface_default.xml

Содан кейін, біз бет үлгілерін сақтайтын ішкі каталог құрамыз және оны «деректер жиынтығы» деп атаймыз:

mkdir деректер жиынтығы

Және менің GitHub -дан кодты жүктеңіз: 01_face_dataset.py

cv2 импорттау

импорт os cam = cv2. VideoCapture (0) cam.set (3, 640) # орнатылған бейне ені cam.set (4, 480) # орнатылған бейне биіктігі face_detector = cv2. CascadeClassifier ('haarcascade_frontalface_default.xml') # Әр адамға, бір сандық тұлға идентификаторын енгізіңіз 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.тіктөртбұрыш (img, (x, y), (x+w, y+h), (255, 0, 0), 2) санау + = 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 болса, бейнеден шығу үшін 'ESC' түймесін басыңыз: elif count> = 30: # 30 бет үлгісін алыңыз және бейне үзілісті тоқтатыңыз # Do ab бұл тазалау басылымы («\ n [INFO] Бағдарламадан шығу және тазалау материалдары») 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

менің Pi -ден жоғарыдағы суретте көрсетілгендей. Менің кодымда мен әр идентификатордан 30 үлгіні аламын. Сіз оны соңғы «элифте» өзгерте аласыз. Үлгілер саны бет үлгілері түсірілетін циклды бұзу үшін қолданылады.

Python сценарийін іске қосыңыз және бірнеше ИД түсіріңіз. Сіз жаңа пайдаланушыны біріктіргіңіз келген сайын (немесе бұрыннан бар фотосуреттерді өзгерту үшін) сценарийді іске қосуыңыз керек.

6 -қадам: жаттықтырушы

Жаттықтырушы
Жаттықтырушы

Бұл екінші кезеңде біз барлық деректер жиынтығынан және OpenCV тану құралын «жаттықтырушыдан» алуымыз керек. Бұл тікелей OpenCV функциясымен орындалады. Нәтижесінде «trainer/» каталогында сақталатын.yml файлы болады.

Сонымен, дайындалған деректерді сақтайтын ішкі каталог құруды бастайық:

mkdir жаттықтырушысы

Менің GitHub -тан екінші питон сценарийін жүктеңіз: 02_face_training.py

cv2 импорттау

PIL импорттауынан суретті импорттау os # Path кескін дерекқорының жолы = «деректер жиынының» танушысы = cv2.face. getImagesAndLabels (жол) суреттер мен белгілерді алу үшін # функция: imagePaths = [os.path.join (жол, f) f үшін os.listdir (жол)] faceSamples = idP = imagePath үшін imagePath үшін: 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 face Үлгілер, идентификаторлар басып шығарылады («\ n [INFO] Жаттығу беттері. Бұл бірнеше секундты алады. Күте тұрыңыз …») беттер, ids = getImagesAndLabels (жол) танушы.трейн (беттер, np.array (ids)) # Үлгіні жаттықтырушы/жаттықтырушыға сақтаңыз.yml танушы.жазу ('жаттықтырушы/жаттықтырушы.yml') # танушы.save () Mac жүйесінде жұмыс істеді, бірақ Pi -де емес # Үйретілген беттердің санын басып шығарыңыз және бағдарламаны басып шығаруды аяқтаңыз («\ 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 # идентификатор есептегіші id = 0 # идентификаторларға қатысты атаулар: мысалы ==> Марсело: id = 1, т.б атаулар = ['Ешқайсысы', 'Марсело', 'Паула', 'Илза', 'Z ',' W '] # Нақты уақыттағы бейне түсіру камерасын инициализациялаңыз және бастаңыз = cv2. VideoCapture (0) cam.set (3, 640) # бейне кеңістігінің камерасын орнату (4, 480) # бейне биіктігін орнату # Минималды терезе өлшемін анықтау 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.тіктөртбұрыш (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 - сенімділік)) else: id =» белгісіз «сенім =» {0}%«. формат (дөңгелек (100 - конф. ident)) 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 болса, бейнеден шығу үшін: үзіліс # Тазалауды аздап жасаңыз («\ n [INFO] Бағдарламадан шығуда және заттарды тазалайды») cam.release () cv2.destroyAllWindows ()

Біз мұнда жаңа массив қосамыз, сондықтан нөмірленген идентификаторлардың орнына «атауларды» көрсетеміз:

атаулар = ['Ешқайсысы', 'Марсело', 'Паула', 'Илза', 'Z', 'W']

Мәселен, мысалы: Марсело пайдаланушыға id = 1 болады; Паула: id = 2 және т.

Әрі қарай, біз бұрын haasCascade жіктеуішінде жасағанымызды анықтаймыз. Анықталған бетке ие бола отырып, біз жоғарыдағы кодтағы ең маңызды функцияны атай аламыз:

id, сенімділік = танушы. болжау (беттің сұр бөлігі)

Танушы.predict () талданатын беттің алынған бөлігін параметр ретінде қабылдайды және идентификаторын және танушының осы сәйкестікке қаншалықты сенімді екенін көрсете отырып, оның ықтимал иесін қайтарады.

Назар аударыңыз, сенімділік индексі «нөлге» оралады, егер ол тамаша сәйкестікті анықтаса

Ақырында, егер танушы бетті болжай алатын болса, біз суреттің үстіне ықтимал идентификаторы бар мәтінді қоямыз және сәйкестіктің дұрыстығының % ықтималдығы қанша («ықтималдылық» = 100 - сенімділік индексі). Олай болмаған жағдайда, бетіне «белгісіз» белгісі қойылады.

Нәтижесі бар-g.webp

Кескін
Кескін

Жоғарыдағы суретте мен осы жобаның көмегімен жасалған кейбір сынақтарды көрсетемін, онда мен фотосуреттерді пайдаланып танушының жұмыс істейтінін тексердім.

8 -қадам: Қорытынды

Қорытынды
Қорытынды

Әдеттегідей, бұл жоба басқаларға электрониканың қызықты әлеміне жол табуға көмектеседі деп сенемін!

Мәліметтер мен соңғы кодты алу үшін GitHub депозитарийіме кіріңіз: OpenCV-Face-Recognition

Басқа жобалар үшін менің блогыма кіріңіз: MJRoBot.org

Төменде біз «бетті автоматты түрде іздеу және бетті анықтаудың басқа әдістерін» зерттейтін болашақ оқулықты көре аламыз:

Кескін
Кескін

Әлемнің оңтүстігінен сәлем!

Келесі нұсқаулықта кездескенше!

Рақмет сізге, Марсело

Ұсынылған: