Kazalo:

Zaznavanje obrazov+prepoznavanje: 8 korakov (s slikami)
Zaznavanje obrazov+prepoznavanje: 8 korakov (s slikami)

Video: Zaznavanje obrazov+prepoznavanje: 8 korakov (s slikami)

Video: Zaznavanje obrazov+prepoznavanje: 8 korakov (s slikami)
Video: Терренс Дикон раскрывает скрытую связь: сознание и энтропия 2024, November
Anonim
Image
Image
Zaznavanje obrazov+prepoznavanje
Zaznavanje obrazov+prepoznavanje

To je preprost primer odkrivanja in prepoznavanja obrazov z OpenCV s kamere. OPOMBA: Ta projekt sem naredil za tekmovanje senzorjev in kamero sem uporabil kot senzor za sledenje in prepoznavanje obrazov. Torej, naš cilj Na tej seji 1. Namestite Anacondo 2. Prenesite paket odprtega življenjepisa 3. Nastavite okoljske spremenljivke 4. Preizkusite za potrditev 5 Naredite kodo za zaznavanje obrazov 6. Naredite kodo za ustvarjanje nabora podatkov 7. Naredite kodo za usposabljanje prepoznavalca 8. Naredite kodo za prepoznavanje obrazov in rezultat.

1. korak: Namestite Anacondo

Namestite Anacondo
Namestite Anacondo

Anaconda je v bistvu lepo zapakiran Python IDE, ki je dobavljen s tonami uporabnih paketov, kot so NumPy, Pandas, IPython Notebook itd. Zdi se, da ga priporočajo povsod v znanstveni skupnosti. Preverite Anacondo, da jo namestite.

2. korak: Prenesite Open CV Package

Prenesite paket odprtih življenjepisov
Prenesite paket odprtih življenjepisov

Najprej pojdite na uradno spletno mesto OpenCV, da prenesete celoten paket OpenCV. Izberite različico, ki vam je všeč (2.x ali 3.x). Jaz sem na Python 2.x in OpenCV 2.x - predvsem zato, ker so tako nastavljeni/temeljijo na vadnicah OpenCV -Python.

V mojem primeru sem paket (v bistvu mapo) izvlekel naravnost na svoj pogon F. (F: / opencv).

3. korak: Nastavite okoljske spremenljivke

Nastavite okoljske spremenljivke
Nastavite okoljske spremenljivke

Kopirajte in prilepite datoteko cv2.pyd

Imenik paketov spletnih mest Anaconda (npr. F: / Program Files / Anaconda2 / Lib / site-packages v mojem primeru) vsebuje pakete Python, ki jih lahko uvozite. Naš cilj je kopirati in prilepiti datoteko cv2.pyd v ta imenik (tako da lahko uporabimo import cv2 v naših kodah Python.)

Če želite to narediti, kopirajte datoteko cv2.pyd …

Iz tega imenika OpenCV (začetni del se lahko na vašem računalniku nekoliko razlikuje):

# Python 2.7 in 64-bitni stroj: F: / opencv / build / python / 2.7 / x64# Python 2.7 in 32-bitni stroj: F: / opencv / build / python / 2.7 / x84

V ta imenik Anaconda (začetni del se lahko na vašem računalniku nekoliko razlikuje):

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

Po izvedbi tega koraka bomo zdaj lahko uporabljali import cv2 v kodi Python. Ampak, še vedno moramo narediti še nekaj več dela, da bo FFMPEG (video kodek) deloval (da nam bo omogočil obdelavo videov.)

Z desno tipko miške kliknite »Moj računalnik« (ali »Ta računalnik« v sistemu Windows 8.1)-> levo kliknite Lastnosti-> levo kliknite zavihek »Napredno«-> levo kliknite gumb »Spremenljivke okolja …«. Dodajte novo uporabniško spremenljivko da pokažem na OpenCV (bodisi x86 za 32-bitni sistem ali x64 za 64-bitni sistem.) Trenutno sem na 64-bitnem računalniku.

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

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

Dodajte %OPENCV_DIR %\ bin v PATH uporabniške spremenljivke.

Moja uporabniška spremenljivka PATH je na primer videti tako …

Pred:

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

Po:

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

To je to, končali smo! FFMPEG je pripravljen za uporabo!

4. korak: Potrdite preizkus

Test za potrditev
Test za potrditev
Test za potrditev
Test za potrditev

Preveriti moramo, ali lahko to storimo v Anacondi (prek Spyder IDE):

  • Uvozi paket OpenCV
  • Uporabite pripomoček FFMPEG (za branje/pisanje/obdelavo videoposnetkov)

Test 1: Ali lahko uvozimo OpenCV?

Če želite prepričati, da lahko Anaconda uvozi paket OpenCV-Python (namreč cv2), Te težave izdajte v konzoli IPython:

uvoz cv2

print cv2._ version_

Če je paket cv2 uvožen brez napak in je različica cv2 natisnjena, potem smo vsi v redu!

Test 2: Ali lahko uporabimo kodek FFMPEG?

Postavite vzorec

input_video.mp4

video datoteko v imeniku. Preizkusiti želimo, ali lahko:

  • preberite to.mp4 video datoteko in
  • napišite novo video datoteko (lahko je.avi ali.mp4 itd.)

Če želite to narediti, moramo imeti preskusno kodo python, ki jo imenujemo test.py. Postavite ga v isti imenik kot vzorec

input_video.mp4

mapa.

To je kaj

test.py

lahko izgleda tako (Opomba: najlepša hvala Petejevim in Warrenovim predlogom v polju za komentarje - prvotno preskusno kodo sem zamenjal z njegovo - preizkusite jo sami in nam sporočite, če to deluje bolje):

uvoz cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = uspešno prebral video. Napačno - ne preberite videoposnetka. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = uspešno izpisati video. Napačno - ne zapišite videoposnetka. cap.release () out.release ()

Ta test je ZELO POMEMBEN. Če želite obdelati video datoteke, morate zagotoviti, da lahko Anaconda / Spyder IDE uporablja FFMPEG (video kodek). Potrebovali smo dneve, da sem začel delovati. Upam pa, da vam bo vzelo veliko manj časa!:) Opomba: še en zelo pomemben namig pri uporabi Anaconda Spyder IDE. Preverite trenutni delovni imenik (CWD) !!!

5. korak: Naredite kodo za zaznavanje obrazov

Naredite kodo za zaznavanje obrazov
Naredite kodo za zaznavanje obrazov
Naredite kodo za zaznavanje obrazov
Naredite kodo za zaznavanje obrazov

Cilj

Na tej seji

  • Videli bomo osnove zaznavanja obrazov s pomočjo Cascade Clasifiers, ki temeljijo na funkcijah Haar
  • Enako bomo razširili za odkrivanje oči itd

Haar-cascade Detection v OpenCV

Tu se bomo ukvarjali z odkrivanjem. OpenCV že vsebuje številne vnaprej usposobljene klasifikatorje za obraz, oči, nasmeh itd. Te datoteke XML so shranjene v mapi opencv/data/haarcascades/. Ustvarimo detektor obraza in oči z OpenCV. Najprej moramo naložiti zahtevane klasifikatorje XML. Nato naložite svojo vhodno sliko (ali video) v sivinah ALI lahko uporabimo kamero (za zaznavanje obrazov v realnem času)

uvoz numpy kot np

uvoz CV2 face_cascade = cv2. CascadeClassifier ('F: / Program Files / opencv / Viri / podatki / haarcascades / haarcascade_frontalface_default.xml) eye_cascade = cv2. CascadeClassifier (' F: / Program Files / opencv / Viri / podatki / haarcascades / haarcascade_eye.xml ') cap = cv2. VideoCapture (0) medtem ko 1: ret, img = cap.read () siva = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) obrazi = face_cascade.detectMultiScale (siva, 1.5, 5) za (x, y, w, h) v obrazih: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = siva [y: y +h, x: x+w] roi_color = img [y: y+h, x: x+w] oči = eye_cascade.detectMultiScale (roi_gray) za (ex, ey, ew, eh) v očeh: cv2.rectangle (roi_color, (ex, ey), (ex +ew, ey +eh), (0, 255, 0), 2) natisni "najdeno" +str (len (obrazi)) +"obraz (i)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

6. korak: Ustvarite kodo za ustvarjanje nabora podatkov

Naredite kodo za ustvarjanje nabora podatkov
Naredite kodo za ustvarjanje nabora podatkov
Naredite kodo za ustvarjanje nabora podatkov
Naredite kodo za ustvarjanje nabora podatkov

Delamo prepoznavanje obrazov, zato boste potrebovali nekaj slik obraza! Ustvarite lahko lasten nabor podatkov ali začnete z eno od razpoložljivih baz podatkov o obrazih, https://face-rec.org/databases/ vam ponuja posodobljen pregled. Tri zanimive baze podatkov so (deli opisa so citirani s spletnega mesta

  • Zbirka podatkov AT&T Facedatabase
  • Zbirka podatkov Yale Facedata A
  • Razširjena zbirka podatkov Yale Facedata B

TUKAJ uporabljam svoj nabor podatkov…. S pomočjo spodaj navedene kode:

uvoz numpy kot 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; medtem ko 1: ret, img = cap.read () siva = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) obrazi = face_cascade.detectMultiScale (siva, 1.3, 5) za (x, y, w, h) v obrazih: vzorecN = vzorecN+1; cv2.imwrite ("F:/Program Files/projects/face_rec/faceData/User."+str (id)+"."+str (sampleN)+".jpg", siva [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) če je vzorecN> 20: break cap.release () cv2.destroyAllWindows ()

7. korak: Naredite kodo za usposabljanje prepoznavalca

Naredite kodo za usposabljanje prepoznavalca
Naredite kodo za usposabljanje prepoznavalca

Ustvarite funkcijo za pripravo kompleta za usposabljanje

Zdaj bomo definirali funkcijo

getImagesWithID (pot)

ki kot vhodni argument vzame absolutno pot do podatkovne zbirke in vrne nabor 2 seznamov, od katerih eden vsebuje zaznane obraze, drugi pa ustrezno oznako za ta obraz. Na primer, če i -ti indeks na seznamu obrazov predstavlja 5. posameznika v zbirki podatkov, ima ustrezna i -ta lokacija na seznamu oznak vrednost, ki je enaka 5.

Zdaj s pomočjo spodnje kode pretvorite obraze nabora podatkov (ki je ustvarjen v 6. koraku) v datoteko.yml:

uvoz os

import numpy as np import cv2 from PIL import Image # Za prepoznavanje obrazov bomo uporabili prepoznavalnik obrazov LBPH Face Recognizer = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projects/face_rec/faceData" def getImagesWithID (pot): imagePaths = [os.path.join (pot, f) za f v os.listdir (pot)] # print image_path #getImagesWithID (pot) obrazov = ID -jev = za imagePath v imagePaths: # preberite sliko in jo pretvorite v sive odtenkeImg = Image.open (imagePath).convert ('L') faceNP = np.array (obrazovImg, 'uint8') # Pridobite oznako ID slike = int (os.path.split (imagePath) [-1].split (".") [1]) # Zaznajte obraz na sliki ID obrazov.append (faceNP). (ID) cv2.imshow ("Dodajanje obrazov za treniranje", faceNP) cv2.waitKey (10) vrne np.array (ID -ji), obrazi Ids, obrazi = getImagesWithID (pot) prepoznaval.train (obrazi, ID -ji) prepoznaval.save ("F:/Programske datoteke/projekti/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

z uporabo te kode se vsi nabori obrazov pretvorijo v eno datoteko.yml …..pot poti je ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml")

8. korak: Naredite kodo za prepoznavanje obrazov in rezultatov

Guyzz, to je zadnji korak, v katerem lahko ustvarimo kodo za prepoznavanje obrazov s pomočjo vaše spletne kamere. V tem koraku sta dve operaciji, ki ju boste izvedli … 1. zajem videoposnetka z kamere 2. primerjajte ga z datoteko.yml

uvoz numpy kot 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) medtem ko 1: ret, img = cap.read () siva = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) obrazi = face_cascade.detectMultiScale (siva, 1,5, 5) za (x, y, w, h) v obrazih: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (sivo [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), pisava, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

in končno vam bo rezultat prišel pred oči …… lahko tudi prenesete datoteko zip iz spodnje povezave: kliknite tukaj, če želite prenesti kode. Torej, v tem navodilu smo opravili nalogo zaznavanja obrazov+prepoznavanje z uporabo OpenCV….. če ste tako kot ta navodila ….. plzzz naroči me in glasuj zame ….. hvala prijatelji:)

Priporočena: