Мазмұны:

Бетті анықтау+тану: 8 қадам (суреттермен)
Бетті анықтау+тану: 8 қадам (суреттермен)
Anonim
Image
Image
Бетті анықтау+тану
Бетті анықтау+тану

Бұл камерадан OpenCV көмегімен бетті анықтау мен танудың жұмысының қарапайым мысалы. ЕСКЕРТПЕ: Мен бұл жобаны сенсорлық байқау үшін жасадым, мен камераны сенсор ретінде танып, тану үшін қолдандым, сондықтан біздің мақсатымыз - бұл сессияда 1. Anaconda бағдарламасын орнатыңыз 2. резюме ашық пакетін жүктеңіз Бетті анықтау үшін код жасаңыз 6. Деректер жиынтығын жасау үшін код жасаңыз 7. Танымды үйрететін код жасаңыз 8. Беттерді тану үшін код жасаңыз & Нәтиже.

1 -қадам: Анаконда орнатыңыз

Анаконда орнатыңыз
Анаконда орнатыңыз

Anaconda - бұл NumPy, Pandas, IPython Notebook және т.б пайдалы пакеттермен бірге жеткізілетін Python IDE өте жақсы оралған, бұл ғылыми қоғамдастықтың барлық жерінде ұсынылады. Орнату үшін Анакондаға қараңыз.

2 -қадам: Ашық резюме пакетін жүктеңіз

Ашық түйіндеме пакетін жүктеңіз
Ашық түйіндеме пакетін жүктеңіз

Біріншіден, 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-packages) сіз импорттай алатын Python бумалары бар. Біздің мақсат - cv2.pyd файлын осы каталогқа көшіру және қою (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-packages

Бұл қадамды орындағаннан кейін біз енді Python кодында импорт cv2 қолдана аламыз. БІРАҚ, FFMPEG (бейне кодек) жұмыс істеуі үшін (бізге бейнелерді өңдеу сияқты нәрселерді жасауға мүмкіндік беру үшін) әлі де біраз жұмыс істеу керек.

«Менің компьютерім» (немесе Windows 8.1 жүйесіндегі «Бұл дербес компьютер») түймесін тінтуірдің оң жақ түймешігімен нұқыңыз-> Сипаттар-> тінтуірдің оң жақ түймешігімен-«Қосымша» қойындысын-> «Қоршаған ортаның айнымалылары …» түймесін басыңыз. Жаңа пайдаланушы айнымалысын қосыңыз. OpenCV нұсқау үшін (32 биттік жүйе үшін x86 немесе 64 биттік жүйе үшін x64.) Мен қазір 64 биттік машинада отырмын.

32-bitOPENCV_DIRC: / opencv / build / x86 / vc12

64-bitOPENCV_DIRC: / opencv / build / x64 / vc12

Пайдаланушы айнымалы PATH жолына %OPENCV_DIR %\ bin қосыңыз.

Мысалы, менің PATH пайдаланушы айнымалысы осылай көрінеді …

Бұрын:

F: / Пайдаланушылар / Джонни / Анаконда; С: / Пайдаланушылар / Джонни / Анаконда / Сценарийлер

Кейін:

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

Міне, біз осымен аяқтадық! FFMPEG қолдануға дайын!

4 -қадам: растау үшін тест

Растау үшін тест
Растау үшін тест
Растау үшін тест
Растау үшін тест

Біз мұны қазір Анаконда жасай алатынымызды тексеруіміз керек (Spyder IDE арқылы):

  • OpenCV пакетін импорттаңыз
  • FFMPEG утилитасын пайдаланыңыз (бейнелерді оқу/жазу/өңдеу үшін)

1 -тест: OpenCV импорттауға бола ма?

Анаконда енді OpenCV-Python бумасын импорттай алатынын растау үшін (дәлірек айтқанда, cv2), оларды IPython консолінде шығарыңыз:

cv2 импорттау

cv2._ нұсқасын басып шығару

Егер cv2 пакеті қатесіз импортталса және cv2 нұсқасы басып шығарылса, онда бізде бәрі жақсы!

2 -тест: FFMPEG кодекін қолдана аламыз ба?

Үлгіні орналастырыңыз

input_video.mp4

каталогтағы бейне файл. Біз мүмкіндігімізді тексергіміз келеді:

  • осы.mp4 бейне файлын оқыңыз және
  • жаңа бейне файлды жазыңыз (.avi немесе.mp4 болуы мүмкін)

Мұны істеу үшін бізге тест питонының коды болуы керек, оны test.py деп атаңыз. Оны үлгі сияқты бір каталогқа қойыңыз

input_video.mp4

файл

Бұл не

test.py

ұқсас болуы мүмкін (Ескерту: Пит пен Уорреннің түсініктеме өрісіндегі ұсыныстарының арқасында - мен бастапқы тест кодын оның орнына ауыстырдым - оны өзіңіз сынап көріңіз және бұл жақсы жұмыс істейтінін бізге хабарлаңыз):

cv2 импорттау

cap = cv2. VideoCapture («input_video.mp4») cap.isOpened () # True = бейнені сәтті оқу. Жалған - бейнені оқымау. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter («output_video.avi», fourcc, 20.0, (640, 360)) print.isOpened () # True = бейнені сәтті жазу. Жалған - бейнені жаза алмау. cap.release () out.release ()

Бұл тест өте маңызды. Егер сіз бейне файлдарды өңдегіңіз келсе, Anaconda / Spyder IDE FFMPEG (бейне кодек) қолдана алатынына көз жеткізіңіз. Оны іске қосу үшін маған бірнеше күн қажет болды. Бірақ бұл сізге әлдеқайда аз уақыт алады деп сенемін!:) Ескерту: Anaconda Spyder IDE пайдалану кезінде тағы бір маңызды кеңес. Ағымдағы жұмыс каталогын (CWD) тексергеніңізге көз жеткізіңіз !!!

5 -қадам: Бетті анықтау кодын жасаңыз

Бетті анықтау кодын жасаңыз
Бетті анықтау кодын жасаңыз
Бетті анықтау кодын жасаңыз
Бетті анықтау кодын жасаңыз

Мақсат

Бұл сессияда,

  • Біз Haar Feature негізделген Cascade Classifiers көмегімен бетті анықтаудың негіздерін көреміз
  • Біз оны көзді анықтау және т.б. үшін кеңейтеміз

OpenCV-де Хаар-каскадты анықтау

Бұл жерде біз анықтаумен айналысамыз. OpenCV құрамында қазірдің өзінде бетке, көзге, күлімсіреуге арналған көптеген дайындалған жіктегіштер бар. Бұл XML файлдары opencv/data/haarcascades/қалтада сақталады. OpenCV көмегімен бет пен көз детекторын жасайық, алдымен бізге қажет XML жіктеуіштерін жүктеу керек. Содан кейін кіретін суретті (немесе бейнені) сұр шкалада жүктеңіз немесе камераны қолдана аламыз (нақты уақыттағы бетті анықтау үшін)

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

cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/ha/.xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) жүздері = face_cascade.detectMultiScale (сұр, 1,5, 5) 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] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex, ey, ew, eh) for eyes: cv2.tectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) print «found» +str (len (faces)) +«face (s)» cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

6 -қадам: Деректер жиынтығын жасау үшін код жасаңыз

Деректер жиынтығын жасау үшін код жасаңыз
Деректер жиынтығын жасау үшін код жасаңыз
Деректер жиынтығын жасау үшін код жасаңыз
Деректер жиынтығын жасау үшін код жасаңыз

Біз бетті танудамыз, сондықтан сізге бет бейнелері қажет! Сіз өзіңіздің жеке деректер жиынтығын жасай аласыз немесе қол жетімді дерекқорлардың бірінен бастай аласыз, https://face-rec.org/databases/ сізге жаңартылған шолуды береді. Үш қызықты мәліметтер базасы (сипаттаманың бөліктері https://face-rec.org сайтынан келтірілген):

  • AT&T Facedatabase
  • Йельге арналған мәліметтер базасы А.
  • Yale Facedatabase кеңейтілген базасы

МҰНДА мен төменде берілген кодтың көмегімен өз деректер жиынтығын қолданамын:

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

cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/source/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('пайдаланушы идентификаторын енгізу') sampleN = 0; while 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/facesData/User.»+str (id)+«.»+str (sampleN)+«.jpg», сұр [y: y+h, x: x+w]) cv2.тіктөртбұрыш (img, (x, y), (x+w, y+h), (255, 0, 0), 2) cv2.waitKey (100) cv2.imshow ('img'), img) cv2.waitKey (1), егер үлгіN> 20: cap.release () cv2.destroyAllWindows ()

7 -қадам: тану құралын үйрету үшін код жасаңыз

Тану құралын үйрету үшін код жасаңыз
Тану құралын үйрету үшін код жасаңыз

Жаттығуды дайындау функциясын жасаңыз

Енді біз функцияны анықтаймыз

getImagesWithID (жол)

бұл сурет дерекқорына абсолютті жолды кіріс аргументі ретінде қабылдайды және 2 тізімінің жиынтығын қайтарады, олардың бірінде анықталған беттері бар, екіншісінде сол бетке сәйкес белгі бар. Мысалы, егер беттер тізіміндегі ith индексі дерекқордағы 5 -ші жеке тұлғаны көрсетсе, онда белгілер тізіміндегі сәйкес иттің орналасуы 5 -ке тең мәнге ие.

Енді деректер жиынының беттерін (6 -қадамда жасалған) төменде берілген код көмегімен.yml файлына түрлендіріңіз:

импорттау os

PIL импорттау cv2 ретінде np импорттау Image # Бетті тану үшін біз LBPH Face Recognizer танитын = cv2.createLBPHFaceRecognizer (); path = «F:/Program Files/projects/face_rec/facesData» def getImagesWithID (path): imagePaths = [os.path.join (path, f) in f in os.listdir (path)] # print image_path #getImagesWithID (path) faces = IDP = imagePath ішіндегі imagePath үшін: # Кескінді оқыңыз және сұр реңкке түрлендіріңіз # Кескіннің белгісін алыңыз ID = int (os.path.split (imagePath) [-1].split («.») [1]) # Суреттегі беттерді анықтаңыз. (ID) cv2.imshow («Оқыту үшін беттерді қосу», faceNP) cv2.waitKey (10) np.array (ID) қайтару, Ids, жүздер = getImagesWithID (жол) танитын.жол (тұлғалар, Ids) танушы.сақтау («F:/Бағдарлама файлдары/жобалар/face_rec/faceREC/trainingdata.yml») cv2.destroyAllWindows ()

осы кодты қолдану арқылы.yml файлына айналдырылған барлық бет жиынтығы….. жолдың орны («F:/Program Files/projects/face_rec/faceREC/trainingdata.yml»)

8 -қадам: Бет пен нәтижені тану үшін код жасаңыз

Guyzz - бұл сіздің веб -камераңыздың көмегімен беттерді тану үшін код жасай алатын соңғы қадам, бұл қадамда орындалатын екі операция бар …. 1. камерадан бейне түсіру 2. оны.yml файлымен салыстыру

npimport cv2 face_cascade = cv2 ретінде numpy импорттау 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.tectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (сұр [y: y+h, x: x+w]) егер (id == 2): id = «alok» егер id == 1 болса: id == 3 болса id = «alok»: id == 4 болса id = «anjali»: id = «Gaurav» егер id = болса = 5: id = 'rahul' егер id == 6: id = «akshay» cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), қаріп, 255) cv2.imshow ('img', img) егер cv2.waitKey (1) == ord ('q'): cap.release ()

cv2.destroyAllWindows ()

Ақырында нәтиже сіздің көз алдыңызда болады …… сіз сонымен қатар төмендегі сілтеме бойынша zip файлын жүктей аласыз: кодтарды жүктеу үшін мына жерді басыңыз, осылайша біз нұсқаулықта OpenCV көмегімен бетті анықтау+тану тапсырмасын орындадық. бұл нұсқаулық сияқты ….. plzzz маған жазылыңыз және маған дауыс беріңіз ….. рахмет достар:)

Ұсынылған: