Съдържание:

Разпознаване на лице+разпознаване: 8 стъпки (със снимки)
Разпознаване на лице+разпознаване: 8 стъпки (със снимки)

Видео: Разпознаване на лице+разпознаване: 8 стъпки (със снимки)

Видео: Разпознаване на лице+разпознаване: 8 стъпки (със снимки)
Видео: 5 Яки Трика за iPhone, които НЕ ЗНАЕТЕ! 2024, Ноември
Anonim
Image
Image
Разпознаване на лице+разпознаване
Разпознаване на лице+разпознаване

Това е прост пример за стартиране на разпознаване и разпознаване на лица с OpenCV от камера. ЗАБЕЛЕЖКА: НАПРАВИХ ТОЗИ ПРОЕКТ ЗА СЪДЪРЖАНИЕ НА СЕНЗОРИ И ИЗПОЛЗВАХ КАМЕРАТА КАТО СЕНЗОР ЗА ПРОСЛЕДВАНЕ И ПРИЗНАВАНЕ НА ЛИЦА. Така че, нашата цел В тази сесия, 1. Инсталирайте Anaconda 2. Изтеглете Open CV Package 3. Задайте променливи на околната среда 4. Тествайте, за да потвърдите 5 Направете код за разпознаване на лица 6. Направете код за създаване на набор от данни 7. Направете код за обучение на разпознаващия 8. Направете код за разпознаване на лица и резултат.

Стъпка 1: Инсталирайте Anaconda

Инсталирайте Anaconda
Инсталирайте Anaconda

Anaconda е по същество добре пакетирана Python IDE, която се доставя с много полезни пакети, като NumPy, Pandas, IPython Notebook и др. Изглежда, че се препоръчва навсякъде в научната общност. Проверете Anaconda, за да го инсталирате.

Стъпка 2: Изтеглете Open CV Package

Изтеглете Open CV Package
Изтеглете Open CV Package

Първо, отидете на официалния сайт на OpenCV, за да изтеглите пълния пакет OpenCV. Изберете версия, която харесвате (2.x или 3.x). Аз съм на Python 2.x и OpenCV 2.x - главно защото така се настройват/базират уроците на OpenCV -Python.

В моя случай аз извадих пакета (по същество папка) направо на моя F диск. (F: / opencv).

Стъпка 3: Задайте променливи на околната среда

Задайте променливи на околната среда
Задайте променливи на околната среда

Копирайте и поставете файла cv2.pyd

Директорията на Anaconda Site-packages (например F: / Program Files / Anaconda2 / Lib / site-пакети в моя случай) съдържа пакетите на Python, които можете да импортирате. Нашата цел е да копираме и поставим файла cv2.pyd в тази директория (така че да можем да използваме import cv2 в нашите кодове на Python.).

За да направите това, копирайте файла cv2.pyd …

От тази директория на OpenCV (началната част може да е малко по -различна на вашата машина):

# Python 2.7 и 64-битова машина: F: / opencv / build / python / 2.7 / x64# Python 2.7 и 32-битова машина: F: / opencv / build / python / 2.7 / x84

Към тази директория на Anaconda (началната част може да е малко по -различна на вашата машина):

F: / Program Files / Anaconda2 / Lib / site-пакети

След като извършим тази стъпка, сега ще можем да използваме import cv2 в кода на Python. НО, все още трябва да свършим малко повече работа, за да работи FFMPEG (видео кодек) (за да можем да правим неща като обработка на видеоклипове.)

Щракнете с десния бутон върху „Моят компютър“(или „Този компютър“в Windows 8.1)-> щракнете с левия бутон върху Свойства-> щракнете с левия бутон върху раздела „Разширени“-> щракнете с левия бутон върху „Променливи на околната среда …“. Добавете нова потребителска променлива за да посоча OpenCV (или x86 за 32-битова система или x64 за 64-битова система.) В момента съм на 64-битова машина.

32-битовOPENCV_DIRC: / opencv / build / x86 / vc12

64-битовOPENCV_DIRC: / opencv / build / x64 / vc12

Добавете %OPENCV_DIR %\ bin към потребителската променлива PATH.

Например моята потребителска променлива PATH изглежда така …

Преди:

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

След:

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

С това сме свършили! FFMPEG е готов за употреба!

Стъпка 4: Тест за потвърждение

Тест за потвърждение
Тест за потвърждение
Тест за потвърждение
Тест за потвърждение

Трябва да тестваме дали можем да направим това в Anaconda (чрез Spyder IDE):

  • Импортиране на OpenCV пакет
  • Използвайте помощната програма FFMPEG (за четене/писане/обработка на видеоклипове)

Тест 1: Можем ли да импортираме OpenCV?

За да убедим, че Anaconda вече може да импортира пакета OpenCV-Python (а именно cv2), издайте ги в конзолата IPython:

импортиране на cv2

печат cv2._ версия_

Ако пакетът cv2 е импортиран добре без грешки и версията cv2 е отпечатана, значи всички сме добре!

Тест 2: Можем ли да използваме кодека FFMPEG?

Поставете проба

input_video.mp4

видео файл в директория. Искаме да тестваме дали можем:

  • прочетете този.mp4 видео файл и
  • напишете нов видео файл (може да бъде.avi или.mp4 и т.н.)

За да направим това, трябва да имаме тестов код на python, наречете го test.py. Поставете го в същата директория като пробата

input_video.mp4

файл.

Ето какво

test.py

може да изглежда така (Забележка: много благодарение на предложенията на Пийт и Уорън в полето за коментари - замених първоначалния си тестов код с неговия - моля, тествайте го сами и ни уведомете, ако това работи по -добре):

импортиране на cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = прочетете видеоклипа успешно. Фалшиво - видеоклипът не се чете. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = запис на видеоклипа успешно. Неверно - не можете да запишете видеоклип. cap.release () out.release ()

Този тест е МНОГО ВАЖЕН. Ако искате да обработвате видео файлове, трябва да се уверите, че Anaconda / Spyder IDE може да използва FFMPEG (видео кодек). Отне ми дни, за да го задействам. Но се надявам, че ще ви отнеме много по -малко време!:) Забележка: още един много важен съвет при използване на Anaconda Spyder IDE. Уверете се, че сте проверили текущия работен указател (CWD) !!!

Стъпка 5: Направете код за разпознаване на лица

Направете код за разпознаване на лица
Направете код за разпознаване на лица
Направете код за разпознаване на лица
Направете код за разпознаване на лица

Цел

В тази сесия,

  • Ще видим основите на разпознаването на лица с помощта на каскадни класификатори, базирани на Haar Feature
  • Ще разширим същото за откриване на очи и др

Каскадно откриване на Haar в OpenCV

Тук ще се занимаем с откриването. OpenCV вече съдържа много предварително обучени класификатори за лице, очи, усмивки и др. Тези XML файлове се съхраняват в папка opencv/data/haarcascades/. Нека създадем детектор за лице и очи с OpenCV. Първо трябва да заредим необходимите XML класификатори. След това заредете нашето входно изображение (или видео) в режим на сиво или ИЛИ можем да използваме камера (за разпознаване на лица в реално време)

внос numpy като np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv /cascade_data.xml ') капачка = cv2. VideoCapture (0) докато 1: ret, img = cap.read () сиво = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) лица = face_cascade.detectMultiScale (сиво, 1.5, 5) за (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] очи = eye_cascade.detectMultiScale (roi_gray) за (ex, ey, ew, eh) в очите: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) отпечатайте "намерено" +str (len (лица)) +"лице (и)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

Стъпка 6: Направете код за създаване на набор от данни

Направете код за създаване на набор от данни
Направете код за създаване на набор от данни
Направете код за създаване на набор от данни
Направете код за създаване на набор от данни

Ние правим разпознаване на лица, така че ще ви трябват някои изображения на лица! Можете или да създадете свой собствен набор от данни, или да започнете с една от наличните бази данни за лица, https://face-rec.org/databases/ ви дава актуален преглед. Три интересни бази данни са (части от описанието са цитирани от

  • База данни на AT&T Facedata
  • Yale Facedatabase A
  • Разширена база данни на Yale Facedata B

ТУК използвам собствения си набор от данни….с помощта на кода, даден по -долу:

внос numpy като np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('enter user id') sampleN = 0; докато 1: ret, img = cap.read () сиво = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) лица = face_cascade.detectMultiScale (сиво, 1.3, 5) за (x, y, w, h) в лица: sampleN = пробаN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/faceData/User."+str (id)+"."+str (sampleN)+".jpg", сиво [y: y+h, x: x+w]) cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img', img) cv2.waitKey (1) if sampleN> 20: break cap.release () cv2.destroyAllWindows ()

Стъпка 7: Направете код за обучение на разпознаващия

Направете код за обучение на разпознаващия
Направете код за обучение на разпознаващия

Създайте функцията за подготовка на тренировъчния комплект

Сега ще определим функция

getImagesWithID (път)

който приема абсолютния път към базата данни с изображения като входен аргумент и връща кортеж от 2 списъка, единият съдържащ откритите лица, а другият, съдържащ съответния етикет за това лице. Например, ако i -тият индекс в списъка с лица представлява 5 -то лице в базата данни, съответното i -то място в списъка с етикети има стойност равна на 5.

Сега преобразувайте лицата на набора от данни (който е създаден в стъпка 6) в.yml файл с помощта на кода, даден по -долу:

внос os

import numpy as np import cv2 from PIL import Image # За разпознаване на лица ще използваме разпознавателя за разпознаване на лица LBPH = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/faceData" def getImagesWithID (path): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (пътека) лица = Идентификатори = за imagePath в imagePaths: # Прочетете изображението и го преобразувайте в лица в сиви тоновеImg = Image.open (imagePath).convert ('L') faceNP = np.array (faceImg, 'uint8') # Вземете етикета на изображението ID = int (os.path.split (imagePath) [-1].split (".") [1]) # Открийте лицето в изображението lica.append (faceNP) IDs.append (ID) cv2.imshow ("Добавяне на лица за обучение", faceNP) cv2.waitKey (10) връщане np.array (IDs), лица Ids, фасони = getImagesWithID (пътека) разпознаващ.train (лица, Ids) prepoznat.save ("F:/Програмни файлове/проекти/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

с помощта на този код целият набор от данни за лица, преобразуван в един.yml файл ….. местоположението на пътя е ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Стъпка 8: Направете код, за да разпознаете лицата и резултата

Гайз, това е последната стъпка, в която можем да създадем кода за разпознаване на лица с помощта на вашата уеб камера В ТАЗИ СТЪПКА ИМА ДВЕ ОПЕРАЦИИ, КОИТО ЩЕ ИЗПЪЛНЯТ…. 1. заснемане на видео от камера 2. сравнете го с вашия.yml файл

импортирайте numpy като npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHere rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4), докато 1: ret, img = cap.read () сиво = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) лица = face_cascade.detectMultiScale (сиво, 1.5, 5) за (x, y, w, h) в лица: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (сиво [y: y+h, x: x+w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), шрифт, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

и най -накрая резултатът ще дойде пред очите ви ……. можете също да изтеглите zip файла отдолу на връзката: Щракнете тук, за да изтеглите кодовете Така че в тази инструкция изпълнихме задачата за разпознаване на лица+разпознаване с помощта на OpenCV …..ако като тази инструкция ….. plzzz се абонирайте за мен и гласувайте за мен ….. благодаря приятели:)

Препоръчано: