Tartalomjegyzék:

Arcfelismerés+felismerés: 8 lépés (képekkel)
Arcfelismerés+felismerés: 8 lépés (képekkel)

Videó: Arcfelismerés+felismerés: 8 lépés (képekkel)

Videó: Arcfelismerés+felismerés: 8 lépés (képekkel)
Videó: Джон Верваке: Психоделики, зло и буддизм 2024, Július
Anonim
Image
Image
Arcfelismerés+felismerés
Arcfelismerés+felismerés

Ez egy egyszerű példa az arcfelismerés és -felismerés futtatására az OpenCV segítségével a kamerából. MEGJEGYZÉS: EZT A PROJEKTET AZ ÉRZÉKELŐ VERSENYRE KÉSZÜLTEM, ÉS ÉRZÉKELŐKÉNT HASZNÁLTAM A KAMERÁT A PÁLYÁZÁSI ÉS FELISMERÉSI FELÜLETEKRE. Tehát a célunk Ebben a munkamenetben 1. Telepítse az Anaconda -t. 2. Nyissa meg a Nyílt CV -csomagot. 3. Állítsa be a környezeti változókat. Készítsen kódot az arcfelismeréshez 6. Készítsen kódot adatkészlet létrehozásához 7. Készítsen kódot a felismerő betanításához 8. Készítsen kódot az arcok és az eredmény felismeréséhez.

1. lépés: Az Anaconda telepítése

Telepítse az Anaconda programot
Telepítse az Anaconda programot

Az Anaconda lényegében egy szépen csomagolt Python IDE, amelyet rengeteg hasznos csomaggal szállítanak, mint például a NumPy, a Pandas, az IPython Notebook stb. Úgy tűnik, mindenhol ajánlott a tudományos közösségben. Nézze meg az Anaconda telepítését.

2. lépés: Töltse le a nyílt CV csomagot

Nyissa meg az önéletrajzi csomagot
Nyissa meg az önéletrajzi csomagot

Először is, menjen a hivatalos OpenCV webhelyre a teljes OpenCV csomag letöltéséhez. Válasszon egy tetszőleges verziót (2.x vagy 3.x). Python 2.x és OpenCV 2.x rendszereket használok - főleg azért, mert az OpenCV -Python oktatóanyagok így vannak beállítva/alapulva.

Esetemben kicsomagoltam a csomagot (lényegében egy mappát) egyenesen az F meghajtómra. (F: / opencv).

3. lépés: Állítsa be a környezeti változókat

Állítsa be a környezeti változókat
Állítsa be a környezeti változókat

Másolja és illessze be a cv2.pyd fájlt

Az Anaconda Site-package könyvtár (pl. F: / Program Files / Anaconda2 / Lib / site-csomagok az én esetemben) tartalmazza az Ön által importálható Python csomagokat. Célunk a cv2.pyd fájl másolása és beillesztése ebbe a könyvtárba (hogy az import cv2 -t használhassuk Python -kódjainkban.)

Ehhez másolja a cv2.pyd fájlt…

Ebből az OpenCV könyvtárból (a kezdő rész kissé eltérhet a gépen):

# Python 2.7 és 64 bites gép: F: / opencv / build / python / 2.7 / x64# Python 2.7 és 32 bites gép: F: / opencv / build / python / 2.7 / x84

Ehhez az Anaconda könyvtárhoz (a kezdő rész kissé eltérhet a gépen):

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

E lépés végrehajtása után most már használhatjuk az import cv2 -t Python -kódban. DE, még egy kicsit többet kell tennünk, hogy az FFMPEG (videokodek) működőképes legyen (hogy lehetővé tegyük például a videók feldolgozását.)

Kattintson a jobb gombbal a "Sajátgép" (vagy "Ez a számítógép" Windows 8.1 alatt)-> bal egérgombbal kattintson a Tulajdonságok-> bal egérgombbal a "Speciális" fülre-> bal egérgombbal kattintson a "Környezeti változók …" gombra. Új felhasználói változó hozzáadása hogy az OpenCV-re mutassak (vagy x86 32 bites rendszerhez, vagy x64 64 bites rendszerhez.) Jelenleg 64 bites gépen vagyok.

32 bites OPENCV_DIRC: / opencv / build / x86 / vc12

64 bites OPENCV_DIRC: / opencv / build / x64 / vc12

%OPENCV_DIR %\ bin hozzáfűzése a felhasználói változó útvonalához.

Például a PATH felhasználói változóm így néz ki…

Előtt:

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

Után:

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

Ezzel végeztünk! Az FFMPEG használatra kész!

4. lépés: Tesztelje a megerősítéshez

Teszt a megerősítéshez
Teszt a megerősítéshez
Teszt a megerősítéshez
Teszt a megerősítéshez

Meg kell vizsgálnunk, hogy most meg tudjuk -e csinálni ezeket Anacondában (a Spyder IDE -n keresztül):

  • OpenCV csomag importálása
  • Az FFMPEG segédprogram használata (videók olvasásához/írásához/feldolgozásához)

1. teszt: Importálhatjuk az OpenCV -t?

Annak megállapítására, hogy az Anaconda immár képes importálni az OpenCV-Python csomagot (nevezetesen a cv2-t), adja ki ezeket az IPython konzolban:

import cv2

nyomtatás cv2._ verzió_

Ha a cv2 csomagot hibátlanul importálják, és a cv2 verziót kinyomtatják, akkor mindannyian jók vagyunk!

2. teszt: Használhatjuk az FFMPEG kodeket?

Helyezzen egy mintát

input_video.mp4

videofájlt egy könyvtárban. Szeretnénk kipróbálni, hogy képesek vagyunk -e:

  • olvassa el ezt az.mp4 videofájlt, és
  • írjon ki egy új videofájlt (lehet.avi vagy.mp4 stb.)

Ehhez szükségünk van egy teszt python kódra, nevezzük test.py. Helyezze ugyanabba a könyvtárba, mint a minta

input_video.mp4

fájlt.

Ez az, amit

teszt.py

így nézhet ki (Megjegyzés: köszönöm Pete és Warren megjegyzésmezőbeli javaslatait - lecseréltem az eredeti tesztkódomat az övére - kérjük, próbálja ki maga, és tudassa velünk, ha ez jobban működik):

import cv2

cap = cv2. VideoCapture ("input_video.mp4") print cap.isOpened () # True = a videó sikeres elolvasása. Hamis - nem sikerült elolvasni a videót. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi", fourcc, 20.0, (640, 360)) print out.isOpened () # True = sikeresen írja ki a videót. Hamis - nem sikerült kiírni a videót. cap.release () out.release ()

Ez a teszt NAGYON FONTOS. Ha videofájlokat szeretne feldolgozni, akkor győződjön meg arról, hogy az Anaconda / Spyder IDE képes az FFMPEG (videokodek) használatára. Napokba telt, mire működésbe hoztam. De remélem, ez sokkal kevesebb időt vesz igénybe!:) Megjegyzés: még egy nagyon fontos tipp az Anaconda Spyder IDE használatakor. Győződjön meg róla, hogy ellenőrizze az aktuális munkakönyvtárat (CWD) !!!

5. lépés: Készítsen kódot az arcfelismeréshez

Készítsen kódot az arcfelismeréshez
Készítsen kódot az arcfelismeréshez
Készítsen kódot az arcfelismeréshez
Készítsen kódot az arcfelismeréshez

Cél

Ezen az ülésen

  • Látni fogjuk az arcfelismerés alapjait a Haar Feature-alapú kaszkádosztályozók használatával
  • Ugyanezt kiterjesztjük a szemfelismerésre stb

Haar-kaszkád észlelés az OpenCV-ben

Itt a felderítéssel fogunk foglalkozni. Az OpenCV már sok előre betanított osztályozót tartalmaz arcra, szemre, mosolyra stb. Ezeket az XML fájlokat az opencv/data/haarcascades/mappa tárolja. Hozzunk létre arc- és szemérzékelőt az OpenCV -vel. Először be kell töltenünk a szükséges XML -osztályozókat. Ezután töltse be bemeneti képünket (vagy videónkat) szürkeárnyalatos módban VAGY használhatjuk a kamerát (valós idejű arcfelismeréshez)

importálja a numpy -t np -ként

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/haarcascade.xml ') cap = cv2. VideoCapture (0), míg 1: ret, img = cap.read () szürke = cv2.cvtColor (img, cv2. COLOR_BGR2GRAY) arcok = face_cascade.detectMultiScale (szürke, 1,5, 5) a (z) [x, y, w, h) arcokban: cv2.téglalap (img, (x, y), (x+w, y+h), (255, 0, 0), 2) roi_gray = szürke [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 (arcok)) +"arc (ok)" cv2.imshow ('img', img) k = cv2.waitKey (30) & 0xff, ha k == 27: break cap.release () cv2.destroyAllWindows ()

6. lépés: Készítsen kódot az adatkészlet létrehozásához

Készítsen kódot az adatkészlet létrehozásához
Készítsen kódot az adatkészlet létrehozásához
Készítsen kódot az adatkészlet létrehozásához
Készítsen kódot az adatkészlet létrehozásához

Arcfelismerést végzünk, ezért szüksége lesz néhány arcképre! Létrehozhatja saját adatkészletét, vagy kezdheti az elérhető arcadatbázisok egyikével, a https://face-rec.org/databases/ naprakész áttekintést nyújt. Három érdekes adatbázis található (a leírás egyes részei a https://face-rec.org oldalról vannak idézve):

  • AT&T Facedatabase
  • Yale Facedatabase A
  • B kiterjesztett Yale Facedatabase B

ITT a saját adatkészletemet használom…. Az alábbi kód segítségével:

importálja a numpy -t np -ként

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; míg 1: ret, img = cap.read () szürke = cv2.cvt Színes (img, cv2. COLOR_BGR2GRAY) arcok = face_cascade.detectMultiScale (szürke, 1,3, 5) az (x, y, w, h) esetén az arcokban: mintaN = mintaN+1; cv2.imwrite ("F:/Programfájlok/projektek/face_rec/arcokData/Felhasználó."+str (id)+"."+str (mintaN)+".jpg", szürke [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.waitKulcs (1), ha minta N> 20: break cap.release () cv2.destroyAllWindows ()

7. lépés: Készítsen kódot a felismerő betanításához

Készítsen kódot a felismerő képzésére
Készítsen kódot a felismerő képzésére

Hozza létre a függvényt az edzéskészlet előkészítéséhez

Most definiálunk egy függvényt

getImagesWithID (elérési út)

amely bemeneti argumentumként a képadatbázishoz vezető abszolút utat választja, és 2 -es listát ad vissza, az egyik tartalmazza az észlelt arcokat, a másik pedig az adott arc megfelelő címkéjét. Például, ha az arcok listájának az ötödik indexe az adatbázisban az ötödik egyedet képviseli, akkor a címkék listájának megfelelő i -edik helyének értéke 5.

Most alakítsa át a (6. lépésben létrehozott) adatkészlet -arcokat.yml fájlba az alábbi kód segítségével:

importál

importálja a numpy -t np -ként importálja a cv2 -t a PIL import képből # Arcfelismeréshez az LBPH arcfelismerő felismerőt = cv2.createLBPHFaceRecognizer (); path = "F:/Program Files/projektek/face_rec/arcokData" def getImagesWithID (elérési út): imagePaths = [os.path.join (path, f) for f in os.listdir (path)] # print image_path #getImagesWithID (path) arcok = IDs = imagePath -hez az imagePaths -ben: # Olvassa el a képet, és konvertálja szürkeárnyalatos arcokkáImg = Image.open (imagePath).convert ('L') faceNP = np.array (arcokImg, 'uint8') # Szerezze be a kép azonosítójának címkéjét = int (os.path.split (imagePath) [-1].split (".") [1]) # Az arc észlelése a képen arcok. Hozzá (faceNP) azonosítók (ID) cv2.imshow ("Arcok hozzáadása az átvitelhez", faceNP) cv2.waitKey (10) return np.array (azonosítók), arcok azonosítói, arcok = getImagesWithID (útvonal) felismerő.vonat (arcok, azonosítók) felismerő.save ("F:/Program Files/projektek/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

ezzel a kóddal az összes arc adathalmaz egyetlen.yml fájlba konvertálva…..útvonal helye ("F:/Program Files/projektek/face_rec/faceREC/trainingdata.yml")

8. lépés: Készítsen kódot az arcok és az eredmény felismeréséhez

Guyzz, ez az utolsó lépés, amelyben létre tudjuk hozni a kódot az arcok felismerésére a webkamerád segítségével. EZEN A LÉPÉSEN KÉT MŰKÖDÉS VAN, HOGY TELJESÍTMÉNYEK…. 1. a videó rögzítése a kameráról 2. hasonlítsa össze a.yml fájljával

importálja a numpy -t npimportként cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRec; rec.load ("F:/Program Files/project/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL, 5, 1, 0, 4), míg 1: ret, img = cap.read () szürke = cv2.cvt Színes (img, cv2. COLOR_BGR2GRAY) arcok = face_cascade.detectMultiScale (szürke, 1,5, 5) az (x, y, w, h) esetén: cv2.rectangle (img, (x, y), (x+w, y+h), (255, 0, 0), 2) id, conf = rec.predict (szürke [y: y+h, x: x+w]) if (id == 2): id = "alok", ha id == 1: id = "alok", ha id == 3: id = "anjali", ha id == 4: id = "Gaurav", ha id = = 5: id = 'rahul', ha id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img), str (id), (x, y+h), betűtípus, 255) cv2.imshow ('img', img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

és a végeredmény a szemed előtt lesz ……. letöltheted a zip fájlt is a link aljáról: Kattints ide a kódok letöltéséhez mint ez a tanulságos….. plzzz iratkozz fel és szavazz rám….. köszönöm barátok:)

Ajánlott: