Az arcfelismerés Python és OpenCV segítségével

Share

Facebook
Twitter
WhatsApp

Ebben a cikkben, megtudjuk, mi az arcfelismerés, és miben különbözik az arcfelismeréstől. Röviden áttekintjük az arcfelismerés elméletét, majd rátérünk a kódolási részre. A cikk végén képes leszel egy olyan arcfelismerő programot készíteni, amely képes felismerni arcokat képeken, valamint élő webkameraközvetítésen.

  1. Mi az arcfelismerés?
  2. Mi az arcfelismerés?
  3. Arcfelismerés Python segítségével
    1. Arcok felismerése webkamera feedben
    2. Arcok felismerése képeken

Mi az arcfelismerés?

A számítógépes látásban az egyik alapvető probléma, amit megpróbálunk megoldani, az objektumok automatikus felismerése egy képen emberi beavatkozás nélkül. Az arcfelismerés egy ilyen problémának tekinthető, ahol emberi arcokat észlelünk egy képen. Az emberi arcok között lehetnek apró különbségek, de összességében elmondható, hogy vannak bizonyos jellemzők, amelyek minden emberi archoz kapcsolódnak. Különböző arcfelismerő algoritmusok léteznek, de a Viola-Jones algoritmus az egyik legrégebbi módszer, amelyet ma is használnak, és a cikk későbbi részében ugyanezt fogjuk használni. A Viola-Jones-algoritmust a cikk befejezése után is átnézheti, mivel a cikk végén linkelem.

Az arcfelismerés általában az első lépés számos arccal kapcsolatos technológia, például az arcfelismerés vagy az ellenőrzés felé. Az arcfelismerésnek azonban nagyon hasznos alkalmazásai lehetnek. Az arcfelismerés legsikeresebb alkalmazása valószínűleg a fényképezés lenne. Amikor fényképet készít barátairól, a digitális fényképezőgépbe épített arcfelismerő algoritmus érzékeli, hogy hol vannak az arcok, és ennek megfelelően állítja be a fókuszt.

A csak az arcfelismerésről szóló bemutatóért kattintson ide

Mi az arcfelismerés?

Most, hogy sikerült olyan algoritmusokat készíteni, amelyek képesek az arcok felismerésére, fel tudjuk-e ismerni azt is, hogy kinek az arcáról van szó?

Az arcfelismerés egy olyan módszer, amellyel egy személyt az arca alapján azonosítani vagy ellenőrizni lehet. Vannak különböző algoritmusok, amelyek képesek arcfelismerést végezni, de pontosságuk eltérő lehet. Itt le fogom írni, hogyan végezzük az arcfelismerést a mélytanulás segítségével.

Szóval most értsük meg, hogyan ismerjük fel az arcokat a mélytanulás segítségével. Az arc beágyazását használjuk, amelyben minden arcot vektorrá alakítunk, és ezt a technikát mély metrikus tanulásnak nevezzük. Hadd osszam tovább ezt a folyamatot három egyszerű lépésre a könnyebb megértés érdekében:

Az arcfelismerés: A legelső feladat, amit végzünk, az arcok felismerése a kép- vagy videófolyamban. Most, hogy ismerjük az arc pontos helyét/koordinátáit, kivonjuk ezt az arcot az előttünk álló további feldolgozáshoz.

Jellemzők kinyerése: Most, hogy kivágtuk az arcot a képből, kivonjuk belőle a jellemzőket. Itt arcbeágyazásokat fogunk használni, hogy kivonjuk a jellemzőket az arcból. Egy neurális hálózat bemenetként egy személy arcképét veszi, és egy vektort ad ki, amely az arc legfontosabb jellemzőit reprezentálja. A gépi tanulásban ezt a vektort beágyazásnak nevezik, ezért ezt a vektort arcbeágyazásnak nevezzük. Hogyan segít ez a különböző személyek arcának felismerésében?

A neurális hálózat képzése során a hálózat megtanulja, hogy a hasonlóan kinéző arcok esetében hasonló vektorokat adjon ki. Ha például több arcképem van különböző időintervallumon belül, akkor természetesen az arcom néhány jellemzője változhat, de nem túl nagy mértékben. Tehát ebben az esetben az arcokhoz tartozó vektorok hasonlóak, vagy röviden, nagyon közel vannak egymáshoz a vektortérben. Nézze meg az alábbi ábrát, hogy nagyjából képet kapjon:

A hálózat betanítása után a hálózat megtanulja, hogy az azonos személyhez tartozó (hasonlónak tűnő) arcok esetében olyan vektorokat adjon ki, amelyek közelebb állnak egymáshoz (hasonlóak). A fenti vektorok most átalakulnak:

Egy ilyen hálózatot itt nem fogunk betanítani, mivel az ilyen hálózatok betanításához jelentős mennyiségű adat és számítási teljesítmény szükséges. Egy előre betanított hálózatot fogunk használni, amelyet Davis King képzett ki egy ~3 millió képből álló adathalmazon. A hálózat egy 128 számból álló vektort ad ki, amely az arc legfontosabb jellemzőit reprezentálja.

Most, hogy tudjuk, hogyan működik ez a hálózat, nézzük meg, hogyan használjuk ezt a hálózatot a saját adatainkon. Az adatainkban lévő összes képet átadjuk ennek az előre betanított hálózatnak, hogy megkapjuk a megfelelő beágyazásokat, és ezeket a beágyazásokat egy fájlba mentjük a következő lépéshez.

Az arcok összehasonlítása: Most, hogy az adatainkban lévő összes arc beágyazása megvan egy fájlba mentve, a következő lépés egy új t kép felismerése, amely nem szerepel az adatainkban. Az első lépés tehát az, hogy kiszámítjuk az arc beágyazását a képhez ugyanannak a hálózatnak a segítségével, amelyet fentebb használtunk, majd ezt a beágyazást összehasonlítjuk a többi beágyazással, amellyel rendelkezünk. Felismerjük az arcot, ha a generált beágyazás közelebb áll vagy hasonlít valamelyik másik beágyazáshoz, ahogy az alábbiakban látható:

Az egyik képen Vlagyimir Putyin, a másikon George W. Bush képe látható. A fenti példánkban nem mentettük el Putyin beágyazásait, de elmentettük Bush beágyazásait. Így amikor a két új beágyazást összehasonlítottuk a meglévőkkel, a Bush vektora közelebb áll Bush többi arcbeágyazásához, míg Putyin arcbeágyazása nem áll közelebb egyetlen más beágyazáshoz sem, így a program nem tudja felismerni őt.

Az arcfelismerés Python használatával

Ebben a részben az OpenCV és a Python segítségével fogjuk megvalósítani az arcfelismerést. Először is lássuk, milyen könyvtárakra lesz szükségünk, és hogyan kell telepíteni őket:

  • OpenCV
  • dlib
  • Face_recognition

Az OpenCV egy kép- és videófeldolgozó könyvtár, és olyan kép- és videóelemzésre használják, mint az arcfelismerés, rendszámfelismerés, képszerkesztés, fejlett robotikus látás, optikai karakterfelismerés és még sok más.

A Davis King által karbantartott dlib könyvtár tartalmazza a “mély metrikus tanulás” implementációját, amelyet a tényleges felismerési folyamathoz használt arcbeágyazásaink felépítésére használunk.

A Geitgey Ádám által létrehozott face_recognition könyvtár körbeöleli a dlib arcfelismerési funkcióit, és ezzel a könyvtárral szuper könnyű dolgozni, és ezt fogjuk használni a kódunkban. Ne feledjük, hogy a face_recognition telepítése előtt először a dlib könyvtárat kell telepíteni.

Az OpenCV telepítéséhez írjuk be a parancssorba

pip install opencv-python

A dlib telepítésének különböző módjait próbáltam ki Windowson, de mind közül a legegyszerűbb az Anaconda segítségével. Először is telepítsük az Anacondát (itt van egy útmutató a telepítéshez), majd használjuk ezt a parancsot a parancssorban:

conda install -c conda-forge dlib

A következő lépés az arcfelismerés telepítéséhez írjuk be a parancssorba

pip install face_recognition

Most, hogy minden függőség telepítve van, kezdjük el a kódolást. Három fájlt kell létrehoznunk, az egyik az adatkészletünket veszi, és a dlib segítségével kivonja az arcok beágyazását minden egyes archoz. Ezután elmentjük ezeket a beágyazásokat egy fájlba.

A következő fájlban összehasonlítjuk az arcokat a meglévővel az arcok felismerése képeken, és a következőben ugyanezt fogjuk tenni, de felismerjük az arcokat az élő webkamera feedben

Extracting features from Face

Először is, szereznünk kell egy adathalmazt, vagy akár sajátot is létrehozhatunk. Csak győződjön meg róla, hogy az összes képet mappákba rendezi úgy, hogy minden mappa csak egy személy képeit tartalmazza.

Következő lépésként mentse el az adathalmazt egy olyan mappába, amelyikben a fájlt készíteni fogja. Most itt van a kód:

Most, hogy a beágyazást egy “face_enc” nevű fájlban tároltuk, használhatjuk őket az arcok felismerésére képeken vagy élő videostreamben.

Az arcfelismerés élő webkamera adatfolyamban

Itt a szkript az arcok felismeréséhez egy élő webkamera adatfolyamban:

Bár a fenti példában haar kaszkádot használtunk az arcok felismeréséhez, használhatjuk a face_recognitiont is.face_locations-t az arcok felismerésére, ahogyan azt az előző szkriptben is tettük

Az arcfelismerés képeken

Az arcok képeken való felismerésére és felismerésére szolgáló szkript szinte teljesen hasonló a fentiekhez. Próbáld ki te is, és ha nem megy, nézd meg az alábbi kódot:

Kimenet:

  • Bemenet
  • Kimenet

Ezzel elérkeztünk a cikk végére, ahol az arcfelismerésről tanultunk. A Great learning academy-n különböző tanfolyamokon ingyenes tanfolyamot kaphatsz. Kattintson az alábbi bannerre, ha többet szeretne megtudni

A Great Learning PGP Mesterséges intelligencia és gépi tanulás tanfolyamával is továbbképezheti magát. A tanfolyam mentorálást kínál az iparág vezetőitől, és lehetőséget kapsz arra is, hogy valós idejű, az iparág szempontjából releváns projekteken dolgozz.

További olvasnivalók

  1. Az arcfelismerés a Viola-Jones algoritmus segítségével
  2. Real-time Face detection | Face Mask Detection using OpenCV
  3. Real-time Object Detection Using TensorFlow
  4. YOLO object detection using OpenCV
  5. Object Detection in Pytorch | What is Object Detection?

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.