Elgondolkozott már azon, hogy a Snapchat hogyan alkalmazza pontosan a különféle szűrőket az arcán? Varázslatos az okostelefonod, amikor az arcvonásaid segítségével oldja fel a zárolást? Nem, csak az Arcfelismerést nézi működés közben.
Az arcfelismerés egy mesterséges intelligencia technológia, amely képes azonosítani az emberi arcokat digitális képeken vagy videókon. Fedezze fel, hogyan építhet fel valós idejű arcfelismerő programot 25 kódsor alatt a legendás Haar Cascade algoritmussal.
Mi az a Haar-kaszkád?
A Haar Cascade egy Paul Viola és Michael Jones által bevezetett objektumészlelési algoritmus az arcok észlelésére a képeken vagy videókon. A kaszkád funkciót sok pozitív és negatív képpel tanítják, amelyek később felhasználhatók bármely tárgy vagy arc azonosítására más médiában. Ezek a betanított fájlok a OpenCV GitHub adattár.
Csúszóablakos megközelítést használva egy rögzített méretű ablak balról jobbra, fentről lefelé iterál egy képet. Minden fázisban az ablak megáll, és besorolja, hogy a terület tartalmaz-e arcot vagy sem.
Az OpenCV, egy számítógépes vizuális eszköz, egy előre betanított Haar Cascade modellel dolgozik a funkciók osztályozása érdekében. Minden fázis öt jellemzőt ellenőrz: két élelemet, két vonaljellemzőt és egy négy téglalap jellemzőt.
A megfigyelés során a szemkörnyék sötétebbnek tűnik, mint az arc környéke, míg az orr környéke világosabbnak tűnik, mint a szemkörnyék. Ezeket a funkciókat az alábbi módon jelenítheti meg.
Ezeket a funkciókat és a pixelszámítást felhasználva az algoritmus több mint 100 000 adatpontot azonosít. Ezután egy Adaboost algoritmussal javíthatja a pontosságot és elvetheti a nem releváns funkciókat. Sok iteráció során ez a megközelítés minimálisra csökkenti a hibaarányt és növeli a jellemzők súlyát, amíg el nem éri az elfogadható pontosságot.
A tolóablak technika azonban leáll, ha egy adott teszteset meghiúsul, és számításilag költséges. Ennek megoldására alkalmazhatja az Osztályozók Kaszkádjának koncepcióját. Ahelyett, hogy az összes szolgáltatást egyetlen ablakban alkalmazná, ez a megközelítés szakaszosan csoportosítja és alkalmazza azokat.
Ha az ablak nem sikerül az első szakaszban, a folyamat elveti, ellenkező esetben folytatódik. Ez a végrehajtandó műveletek számának drasztikus csökkenéséhez vezet, és életképessé teszi a valós idejű alkalmazásokhoz való használatát.
Az arcfelismerés munkafolyamata
Kövesse ezt az algoritmust az arcfelismerő program elkészítéséhez:
- Töltse be a Haar Cascade frontális arc algoritmust.
- Inicializálja a kamerát.
- Olvasson képkockákat a kamerából.
- Konvertálja a színes képeket szürkeárnyalatossá.
- Szerezze meg az arc koordinátáit.
- Rajzolj egy téglalapot, és írd be a megfelelő üzenetet.
- Jelenítse meg a kimenetet.
Mi az az OpenCV?
Az OpenCV egy nyílt forráskódú számítógépes képi és gépi tanulási könyvtár. Több mint 2500 optimalizált algoritmussal rendelkezik különféle alkalmazásokhoz. Ide tartozik az arc-/tárgyfelismerés, a felismerés, az osztályozás és még sok más.
Az Ön arcadatainak védelme külön gond. Több száz kiemelkedő vállalat, mint például a Google, az IBM és a Yahoo használja az OpenCV-t alkalmazásaiban. Néhányan, akik célja, hogy adataikat titokban tartsák, bebizonyították vannak módok az arcfelismerés elkerülésére.
Az OpenCV Pythonban való telepítéséhez használja a következő parancsot:
csipog telepítés opencv-python
Hogyan készítsünk arcfelismerő programot Python használatával
Kövesse az alábbi lépéseket az arcérzékelő felépítéséhez:
Ez a példakód a Haar Cascade algoritmusfájllal együtt elérhető a GitHub adattár és az MIT licence alapján ingyenesen használható.
- Töltse le a Haar Cascade Frontal Face Default XML fájlt, és helyezze el ugyanabba a helyre, ahol a Python program.
- Importálja az OpenCV könyvtárat.
# a szükséges könyvtárak importálása
import cv2 - Tárolja a Haar Cascade Frontal Face algoritmusfájlt az egyszerű hivatkozás érdekében.
# a haar eset algoritmus fájl betöltése alg változóba
alg = "haarcascade_frontalface_default.xml" - Használja a CascadeClassifier osztályt XML-fájl betöltéséhez az OpenCV-be.
# az algoritmus átadása az OpenCV-nek
haar_cascade = cv2.CascadeClassifier (alg) - Rögzítse a videót a kameráról. Adjon 0-t a Video felvétel() funkciót az elsődleges kamera használatához. Ha külső kamerát csatlakoztatott, használhatja az egymást követő 1-es, 2-es számokat és így tovább.
# videófelvétel rögzítése a kamerából
cam = cv2.VideoCapture (0) - Állítson be egy végtelen hurkot a kamera bemenetének képkockánkénti olvasásához. A olvas() függvény két paramétert ad vissza. Az első érték logikai típusú, amely jelzi, hogy a művelet sikeres volt-e vagy sem. A második paraméter tartalmazza a tényleges keretet, amellyel dolgozni fog. Tárolja ezt a keretet a img változó.
mígIgaz:
_, img = cam.read() - Állítsa be az alapértelmezett szöveget, hogy így jelenjen meg Az arc nem észlelhető. Ha észleli, frissítse ennek a változónak az értékét.
szöveg = "Az arc nem észlelhető"
- A való világból kapott bemenet színes, BGR formátumban. A BGR jelentése kék, zöld és piros. Ez sok feldolgozást eredményez a számítógépes látásalkalmazások számára. Ennek csökkentése érdekében használjon szürkeárnyalatos formátumot.
Adja át a keretet és a konverziós kód formátumát, COLOR_BGR2GRAY, nak nek cvtColor() hogy a videó minden egyes képkockáját színesről szürkeárnyalatosra változtassa.# minden képkockát BGR-ből szürkeárnyalatossá alakít
grayImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Használat detectMultiScale() arcokat észlelni. Ez a módszer három paramétert használ bemenetként. Az első a forráskép, szürkeImg. A második paraméter a scaleFactor. Ez adja meg, hogy mennyivel kell csökkentenie a képméretet az egyes képskálákon. Használja az alapértelmezett 1.3 értéket léptékezési tényezőként. Minél nagyobb a léptéktényező, annál kevesebb a lépés, és annál gyorsabb a végrehajtás. Azonban nagyobb a valószínűsége annak, hogy arcok hiányoznak. A harmadik paraméter a minNeighbors. Ez megadja, hogy az egyes jelölt téglalapoknak hány szomszédja legyen, hogy megtartsa azt. Minél magasabb az érték, annál kisebb az esélye a hamis pozitívnak, de ez azt is jelenti, hogy kimarad a tisztázatlan arcnyomokról.
# arcok felismerése a Haar Cascade segítségével
face = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Amikor észlel egy arcot, négy koordinátát kap. x az x koordinátát, y az y koordinátát, w a szélességet, h pedig a magasságot jelöli. Frissítse a szöveget Arcfelismerés és e koordináták segítségével rajzoljunk egy téglalapot. A téglalap színe zöld (BGR) formátumú, vastagsága két pixel.
# rajzoljon egy téglalapot az arc köré, és frissítse a szöveget Arcérzékelve értékre
(x, y, w, h) arcra:
szöveg = "Arcfelismerés"
cv2.téglalap(img, (x, y), (x + w, y + h), (0, 255, 0), 2) - Opcionálisan nyomtassa ki a szöveget a kimeneti konzolon. Jelenítse meg a képernyőn a szöveget a rögzített kerettel forrásként, a fenti szövegben kapott szöveggel, betűtípussal FONT_HERSHEY_SIMPLEX stílus, 1-es betűméretarány, kék szín, két képpont vastagság és AA vonaltípus.
# jelenítse meg a szöveget a képen
nyomtatás(szöveg)
image = cv2.putText (img, text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Jelenítse meg az ablakot a címmel Arcfelismerés és a kép. Használja a várj kulcs() módszerrel megjelenítheti az ablakot 10 ezredmásodpercig, és ellenőrizheti, nem történt-e meg egy gombnyomás. Ha a felhasználó megnyomja a Kilépés kulcsot (ASCII érték 27), lépjen ki a ciklusból.
# jelenítse meg a kimeneti ablakot, és nyomja meg az Escape billentyűt a kilépéshez
cv2.imshow("Arcfelismerés", kép)
kulcs = cv2.waitKey (10)ha kulcs == 27:
szünet - Végül engedje el a kameraobjektumot a python programból, és zárja be az összes ablakot.
bütyök.kiadás()
cv2.destroyAllWindows()
Arcfelismerés a Python használatával működés közben
Amikor egy arc látható, a következő kimenetet kell látnia:
Ha nincs arc, a következő üzenet jelenik meg:
A Haar Cascade algoritmussal végzett arcfelismerés korlátai
Bár ez az algoritmus könnyű, kis modellmérettel és gyorsan működik, van néhány korlátozás:
- A valós idejű videóban az arcnak a kamera látóterében kell lennie. Ha az arc túl messze van, túl közel van, vagy túlságosan meg van döntve, az algoritmus nem veszi fel a funkciókat.
- Ez egy frontális arc algoritmus, így nem észlelheti az oldalnézeteket.
- Magas hamis pozitív eredmény. Gyakran arcként érzékeli a területeket, még akkor is, ha arc nincs jelen.
- Optimális fényviszonyokat kell biztosítani. A túl erős vagy gyenge megvilágítás rontja az algoritmus pontosságát.
Az arcfelismerés számos alkalmazása
Az arcfelismerés számos alkalmazási területtel rendelkezik a mai világban. Használhatja arcfelismerésre okostelefonokban, otthonokban, járművekben és bevándorlási ellenőrző pontokon. Az arcfelismerés már elterjedt a CCTV megfigyelésben, a közösségi média szűrőkben és az automatikus arckövetésben a filmművészetben.
Ez csak a kezdete ennek a csodálatos technológiának. A fejlesztésekkel talán sikerül azonosítani az eltűnt gyermekeket, elkapni a bűnözőket, és megelőzni az olyan bűncselekményeket, mint a személyazonosság-lopás.