Obsah:

Rozpoznanie tváre+rozpoznanie: 8 krokov (s obrázkami)
Rozpoznanie tváre+rozpoznanie: 8 krokov (s obrázkami)

Video: Rozpoznanie tváre+rozpoznanie: 8 krokov (s obrázkami)

Video: Rozpoznanie tváre+rozpoznanie: 8 krokov (s obrázkami)
Video: Почему анкилозирующий спондилоартрит остается незамеченным врачами и как его лечить. 2024, November
Anonim
Image
Image
Rozpoznanie tváre+rozpoznanie
Rozpoznanie tváre+rozpoznanie

Toto je jednoduchý príklad spustenej detekcie a rozpoznania tváre pomocou OpenCV z kamery. POZNÁMKA: VYROBIL SOM TENTO PROJEKT SÚŤAŽE SENZOROV A KAMERU SOM POUŽIL SENZOROM NA SLEDOVANIE A POZNÁVANIE TVÁROV. Takže náš cieľ V tejto relácii 1. Nainštalujte Anacondu 2. Stiahnite si otvorený balík CV 3. Nastavte environmentálne premenné 4. Test na potvrdenie 5 Vytvorte kód na rozpoznávanie tvárí 6. Vytvorte kód na vytvorenie množiny údajov 7. Vytvorte kód na školenie rozpoznávača 8. Vytvorte kód na rozpoznávanie tvárí a výsledok.

Krok 1: Nainštalujte Anacondu

Nainštalujte Anacondu
Nainštalujte Anacondu

Anaconda je v podstate pekne zabalené IDE Pythonu, ktoré je dodávané s množstvom užitočných balíkov, ako sú NumPy, Pandas, IPython Notebook atď. Zdá sa, že sa odporúča všade vo vedeckej komunite. Pozrite sa na Anacondu a nainštalujte ho.

Krok 2: Stiahnite si otvorený životopis

Stiahnite si otvorený balík životopisov
Stiahnite si otvorený balík životopisov

Najprv prejdite na oficiálnu stránku OpenCV a stiahnite si kompletný balík OpenCV. Vyberte si verziu, ktorá sa vám páči (2.x alebo 3.x). Používam Python 2.xa OpenCV 2.x - hlavne preto, že takto sa nastavujú/zakladajú výukové programy OpenCV -Python.

V mojom prípade som extrahoval balík (v podstate priečinok) priamo na moju jednotku F. (F: / opencv).

Krok 3: Nastavte environmentálne premenné

Nastavte environmentálne premenné
Nastavte environmentálne premenné

Skopírujte a prilepte súbor cv2.pyd

Adresár balíkov stránok Anaconda (napr. F: / Program Files / Anaconda2 / Lib / site-packages v mojom prípade) obsahuje balíky Pythonu, ktoré môžete importovať. Našim cieľom je skopírovať a prilepiť súbor cv2.pyd do tohto adresára (aby sme mohli použiť import cv2 v našich kódoch Pythonu.).

Za týmto účelom skopírujte súbor cv2.pyd …

Z tohto adresára OpenCV (počiatočná časť sa môže na vašom počítači mierne líšiť):

# Python 2.7 a 64-bitový počítač: F: / opencv / build / python / 2.7 / x64# Python 2.7 a 32-bitový počítač: F: / opencv / build / python / 2.7 / x84

Do tohto adresára Anaconda (počiatočná časť sa môže na vašom počítači mierne líšiť):

F: / Program Files / Anaconda2 / Lib / site-packages

Po vykonaní tohto kroku budeme teraz môcť používať import cv2 v kóde Pythonu. ALE, musíme ešte urobiť trochu viac práce, aby FFMPEG (video kodek) fungoval (aby sme mohli vykonávať napríklad spracovanie videa).

Kliknite pravým tlačidlom myši na položku „Tento počítač“(alebo „Tento počítač“v systéme Windows 8.1)-> Ľavé tlačidlo myši kliknite na položku Vlastnosti-> kliknite ľavým tlačidlom myši na kartu „Rozšírené“-> kliknite ľavým tlačidlom myši na tlačidlo „Premenné prostredia …“. Pridajte novú používateľskú premennú aby som ukázal na OpenCV (buď x86 pre 32-bitový systém alebo x64 pre 64-bitový systém.) Aktuálne som na 64-bitovom počítači.

32-bitový OPENCV_DIRC: / opencv / build / x86 / vc12

64-bitový OPENCV_DIRC: / opencv / build / x64 / vc12

Pripojte %OPENCV_DIR %\ bin k PATH premennej užívateľa.

Moja používateľská premenná PATH napríklad vyzerá takto …

Pred:

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

Po:

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

Týmto sme skončili! FFMPEG je pripravený na použitie!

Krok 4: Test na potvrdenie

Test na potvrdenie
Test na potvrdenie
Test na potvrdenie
Test na potvrdenie

Musíme otestovať, či to teraz môžeme urobiť v Anaconde (prostredníctvom Spyder IDE):

  • Importovať balík OpenCV
  • Použite nástroj FFMPEG (na čítanie/zápis/spracovanie videí)

Test 1: Môžeme importovať OpenCV?

Aby sa potvrdilo, že Anaconda je teraz schopná importovať balík OpenCV-Python (konkrétne cv2), problém v konzole IPython:

import cv2

vytlačiť cv2._ verziu_

Ak je balík cv2 importovaný v poriadku bez chýb a verzia cv2 je vytlačená, potom sme všetci v poriadku!

Test 2: Môžeme použiť kodek FFMPEG?

Vložte vzorku

input_video.mp4

video súbor v adresári. Chceme vyskúšať, či môžeme:

  • prečítajte si tento video súbor.mp4 a
  • napíšte nový súbor videa (môže to byť.avi alebo.mp4 atď.)

Na to potrebujeme testovací kód pythonu, nazvite ho test.py. Umiestnite ho do rovnakého adresára ako vzor

input_video.mp4

súbor.

To je čo

test.py

môže vyzerať (Poznámka: veľká vďaka Peteovým a Warrenovým návrhom v poli pre komentáre - pôvodný testovací kód som nahradil jeho - vyskúšajte si to sami a dajte nám vedieť, či to funguje lepšie):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") vytlač cap.isOpened () # True = video bolo úspešne prečítané. Falošné - nečítajte video. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = úspešne zapísať video. Falošné - neschopnosť napísať video. cap.release () out.release ()

Tento test je VEĽMI DÔLEŽITÝ. Ak chcete spracovávať video súbory, musíte zaistiť, aby Anaconda / Spyder IDE mohlo používať FFMPEG (video kodek). Trvalo mi niekoľko dní, kým sa to podarilo. Dúfam však, že vám to zaberie oveľa menej času!:) Poznámka: ešte jeden veľmi dôležitý tip pri použití IDE Anaconda Spyder. Nezabudnite skontrolovať aktuálny pracovný adresár (CWD) !!!

Krok 5: Vytvorte kód na rozpoznanie tváre

Vytvorte kód na rozpoznanie tváre
Vytvorte kód na rozpoznanie tváre
Vytvorte kód na rozpoznanie tváre
Vytvorte kód na rozpoznanie tváre

Cieľ

V tejto relácii

  • Uvidíme základy detekcie tváre pomocou kaskádových klasifikátorov založených na funkciách Haar
  • Predĺžime to isté pre detekciu očí atď

Haar-kaskádová detekcia v OpenCV

Tu sa budeme zaoberať detekciou. OpenCV už obsahuje mnoho vopred vyškolených klasifikátorov pre tvár, oči, úsmev atď. Tieto súbory XML sú uložené v priečinku opencv/data/haarcascades/. Vytvorme detektor tváre a očí s OpenCV. Najprv musíme načítať požadované klasifikátory XML. Potom načítajte náš vstupný obrázok (alebo video) v režime sivej alebo ALEBO môžeme použiť fotoaparát (na detekciu tváre v reálnom čase)

import numpy ako 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/sources/data/haarcascadee/haarcascade_.xml ') cap = cv2. VideoCapture (0) while 1: ret, img = cap.read () grey = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale (grey, 1.5, 5) for (x, y, w, h) v tvárach: cv2.rectangle (obr., (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = sivá [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) in eyes: cv2.rectangle (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 ()

Krok 6: Vytvorte kód na vytvorenie množiny údajov

Vytvorte kód na vytvorenie množiny údajov
Vytvorte kód na vytvorenie množiny údajov
Vytvorte kód na vytvorenie množiny údajov
Vytvorte kód na vytvorenie množiny údajov

Vykonávame rozpoznávanie tvárí, takže budete potrebovať nejaké obrázky tváre! Môžete si vytvoriť svoj vlastný súbor údajov alebo začať s jednou z dostupných databáz tvárí, https://face-rec.org/databases/ vám poskytne aktuálny prehľad. Tri zaujímavé databázy sú (časti popisu sú citované z

  • Databáza AT&T
  • Yale Facedatabase A
  • Rozšírená Yale Facedatabase B

TU používam svoj vlastný súbor údajov … pomocou kódu, ktorý je uvedený nižšie:

import numpy ako 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; zatiaľ čo 1: ret, img = cap.read () sivá = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) tváre = face_cascade.detectMultiScale (sivá, 1,3, 5) pre (x, y, w, h) v tvárach: sampleN = vzorkaN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/facesData/User."+str (id)+"."+str (sampleN)+".jpg", sivá [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) ak je vzorka N> 20: break cap.release () cv2.destroyAllWindows ()

Krok 7: Vytvorte kód na trénovanie rozpoznávača

Vytvorte kód na trénovanie rozpoznávača
Vytvorte kód na trénovanie rozpoznávača

Vytvorte funkciu na prípravu tréningovej sady

Teraz definujeme funkciu

getImagesWithID (cesta)

ako vstupný argument vezme absolútnu cestu k databáze obrázkov a vráti n -ticu z 2 zoznamov, pričom jeden obsahuje rozpoznané tváre a druhý obsahuje zodpovedajúci štítok pre túto tvár. Ak napríklad desiaty index v zozname tvárí predstavuje piateho jedinca v databáze, zodpovedajúce desiate miesto v zozname štítkov má hodnotu rovnú 5.

Teraz pomocou kódu, ktorý je uvedený nižšie, skonvertujte tváre súboru údajov (ktorý je vytvorený v kroku 6) na súbor.yml:

import os

import numpy as np import cv2 from PIL import Image # Na rozpoznanie tváre použijeme rozpoznávač tváre LBPH Recognizer = cv2.createLBPHFaceRecognizer (); cesta = "F:/Program Files/projects/face_rec/facesData" def getImagesWithID (cesta): imagePaths = [os.path.join (cesta, f) pre f v os.listdir (cesta)] # print image_path #getImagesWithID (cesta) tváre = IDs = pre imagePath v imagePaths: # Prečítajte si obrázok a preveďte na obrázky v odtieňoch sivej facesImg = Image.open (imagePath).convert ('L') faceNP = np.array (FacesImg, 'uint8') # Získajte štítok ID obrázka = int (os.path.split (imagePath) [-1].split (".") [1]) # Rozpoznajte tvár na obrázku tváře.append (faceNP) IDs.append (ID) cv2.imshow ("Pridávanie tvárí na prechod", faceNP) cv2.waitKey (10) návrat np.array (IDs), tváre Ids, Faces = getImagesWithID (cesta) rozpoznávač.train (tváre, ID) ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

pomocou tohto kódu sa všetky množiny údajov o tvári prevedú na jeden súbor.yml … umiestnenie cesty je ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

Krok 8: Vytvorte kód na rozpoznanie tvárí a výsledku

Guyzz, toto je posledný krok, v ktorom môžeme vytvoriť kód na rozpoznávanie tvárí pomocou vašej webovej kamery. V TOMTO KROKU JSÚ DVA OPERÁCIE, KTORÉ MAJÚ VYKONAŤ…. 1. zachytenie videa z kamery 2. porovnajte ho so súborom.yml

import numpy ako npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecogzer 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) while 1: ret, img = cap.read () sivá = cv2.cvtColor (img, cv2. COLOR_BGR2GREY) tváre = face_cascade.detectMultiScale (sivá, 1,5, 5) pre (x, y, w, h) v tvárach: cv2.rectangle (obr., (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = predpokladaný predikcia (sivá [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), písmo, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

a nakoniec sa vám výsledok objaví pred očami ……. Môžete si tiež stiahnuť súbor zip z nižšie uvedeného odkazu: Kliknutím sem stiahnete kódy. V tomto návode sme teda vykonali úlohu detekcie tváre+rozpoznania pomocou OpenCV….. ak lajkujte takto ….. plzzz ma prihláste na odber a hlasujte za mňa ….. ďakujem priatelia:)

Odporúča: