Arcfelismerő és nyomkövető rendszer megvalósítása videókártyán


Hozzáadva: 2020-04-06 Megtekintve: 173

Napjainkban egyre nagyobb port kavarnak az arcfelismerő illetve nyomkövető rendszerek. Sokan tiltakoznak ezek ellen hiszen emberi jogokat sérthetnek és elég kellemetlenül éreznénk magunkat egy olyan szép új világban, amelyben minden ponton megfigyelhetnek minket. Ennek ellenére Kínában például az ilyen nyomkövető rendszerek százai működnek.

A következőekben bemutatom nektek egy ilyen rendszer létrehozását. Abban az esetben ha rendelkezünk a megfelelő számítástechnikai ismeretekkel, illetve eszközökkel akkor nem is annyira nehéz. Úgy gondolom, hogy egy középszintű informatikai tudás elegendő ehhez tehát ilyen szempontból a belépési küszöb nem túl magas. Ami egy kicsit megnehezíti a dolgot, hogy viszonylag sok pénzt kell szánnunk a hardverre.


Sokak által bírált úgynevezett totalitárius államokban mint Kínában vagy Oroszországban, főleg most a koronavírus ideje alatt aktívan használják az olyan arcfelismerő rendszereket, amelyek képesek nyomon követni egy bizonyos egyén mozgását. Abban az esetben hogyha feltételezzük, hogy az adott állam nem él vissza a technológiai fejlettségével egy ilyen informatikai rendszer kifejezetten nagy segítség lehet például egy járvány terjedésének megállításában.


A problémát alapvetően két részre lehet bontani. Az arcfelismerő és nyomon követő rendszer két alapvető tulajdonságát kell megkülönböztetnünk. Az egyik amikor is egy viszonylag primitív rendszerről beszélünk. Ez egy olyan eszköz, amely képes felismerni egy mozgóképen az adott tárgyakat és ezeket képes bekategorizálni. Erre a feladatra képfeldolgozó illetve gépi tanulás és algoritmusokat használnak és a következő githubon lévő forráskód kiválóan alkalmas.


Itt ugye azt történik, hogy magát a rendszert betanítják egy viszonylag nagy adathalmazon és ezáltal a képfeldolgozó modul képes lesz felismerni minden egyes képkocka tartalmát. Attól függően, hogy hány különböző objektumot tanítottunk be a modult, az képes felismerni a tárgyak elég nagy spektrumát. Beszélhetünk itt emberekről autókról motorokról különböző gépjárművekről illetve bármilyen más tárgyról.


A tradicionális tárgy felismerő rendszerek a képkocka különböző pontjain, illetve különböző méretű képkockákon futottak és ezeket értékelték ki. Abban az esetben, ha az adott pontszám magas volt a modul úgy döntött hogy felismert valamit.


A YOLO (You Only Look Once) egy teljesen más megközelítést adott a problémára. Kizárólag egy neurális hálót futtatnak a teljes képen és a neurális háló különböző régiókra bontja fel a kép kockát. Határoló kereteket jósol meg és ezekhez a régiókhoz egy bizonyos valószínűséget rendel hozzá. A keretek súlyozva vannak az előrevetített valószínűségekkel.


Ez a modell sok előnnyel rendelkezik a tradicionális osztályozásan alapuló rendszerekkel szemben. Az egész kép kockát veszi az előrejelzés alapjául, így rendelkezésre áll az egész globális kontextus. További előnye az, hogy kizárólag egy neurális hálózatot használ a kiértékeléshez ellentétben a tradicionális képfeldolgozó rendszerekkel, amelyek több 1000 neurális hálót használtak. Ezáltal a modul iszonyatosan gyors, bizonyos esetekben 100 de akár 1000-szeres sebesség növekedést is mutat.

Nézzük tehát hogyan kell a modult feltelepíteni.


Első körben szükséged lesz egy Ubuntu rendszerre amelyben ki tudod adni a következő parancsokat. Hogyha nincsenek túl speciális igényeid a következő pár paranccsal fel tudod telepíteni az előre betanított modellt. Így egyszerű tárgyakat tudsz felismertetni a rendszerrel.


$ git clone https://github.com/pjreddie/darknet
$ cd darknet


Fordítsuk le a forráskódot:


$ make


Majd töltsük le a betanított súlyokkal tartalmazó fájt:


$ wget https://pjreddie.com/media/files/yolov3.weights


Így már futtat hagyjuk is a detektort:


$ ./darknet detect cfg/yolov3.cfg yolov3.weights data/dog.jpg


Ha megnyitjuk a képet látjuk hogy felismerte a bizonyos tárgyakat.


A kimeneten továbbá láthatjuk azt is, hogy a program milyen tárgyakat ismert fel. Ezeknek a magabiztosságát, illetve azt is hogy mennyi ideig tartott a detektálás is megjeleníti a kimenet.

A következőkben jön az izgalmasabb része a dolognak. Mi van akkor, ha például a webkameránk bemeneti jelét szeretnénk feldolgozni? Például szeretnénk egy arc felismerő rendszert építeni. A következőekben megmutatom, hogy mi szükséges ahhoz, hogy biztonsági rendszert építsünk az egészből.


Ehhez viszont szükséged van egy olyan videó kártyára amely támogatja a CUDA-t és az OpenCV-t. Ilyen módban kell lefordítanod a kódot.


A Makefile-ban állítsuk be a következő paramétert:


$ GPU=1


Majd fordítsuk le újra a kódot.


Abban az esetben, ha a kamerádat csatlakoztattad a számítógépedhez és az OpenCV felismerte azt, látnod kell a webkamerád jelét és a rajta futó felismerő rendszert.


Nézzük a következőekben azt, hogy mi a helyzet akkor ha van egy videófájlod, amelyen futtatni szeretnéd a detektáló szoftvert. Ebben az esetben ad ki a következő parancsot:


$ ./darknet detector demo cfg/coco.data cfg/yolov3.cfg yolov3.weights


Ha idáig eljutottál a telepítgettéssel, sikerült lefordítanod a kódot illetve kiadni a fent ismertetett parancsokat és ezek probléma nélkül le is futottak, akkor a kezedben tarthatsz egy kiváló arcfelismerő rendszert.


De mi is a probléma ezzel?


Azt ugye látjuk, hogy a program felismeri a különböző tárgyakat és teszi ezt minden egyes képkockára külön véve. A legnagyobb baj viszont az, hogy nem tudjuk egymáshoz rendelni a különböző kép kockákból származó adatokat. Tehát ha például felismert az egyik kép kockán egy embert és jön a következő képkocka akkor nem tudjuk, hogy ugyanazt az embert ismerte-e fel vagy egy különbözőt. Ebben az esetben nagyon nehéz nyomkövető szoftvert varázsolni a dologból hiszen nem tudjuk, hogy mi a kapcsolat a két képkockán felbukkanó személyeknek személyek között.


Hogyan tudunk igazi kémszoftvert vagy másnéven biztonsági nyomkövető rendszert tervezni?


A feladatunk tehát a következő. Elsősorban meg kell hogy tudjuk különböztetni egymástól különböző tárgyakat. Erre kiváló módot ajánl a YOLO, hiszen el tudjuk különíteni az embereket a gépjárművektől vagy a labdákat a kutyáktól. Azonban a dolgon kell egy kicsit csavarni és erre fog megoldást adni a következő deep-sort modul.


Olvass még: Hol bányásszák a legtöbb Bitcoint a világon?

A számítógéppel végzett képfelismerés és az ebből kifejlesztett tárgyak felismerése egy különösen virágzó terület az informatikai területén. A tárgyak vagy akár emberek követése alapvetően detektálással kezdődik. A nyomkövetéshez mélységi rendezésen alapul MOT (Multiple Object Detection) algoritmus implementációját fogjuk használni.


Először is töltsük le a forráskódot a Github-ról a következő parancs kiadásával:


$ git clone https://github.com/ZQPei/deep_sort_pytorch.git


A következőekben nézzük meg hogy minden függőség telepítve van-e a következő paranccsal:


$ pip install -r requirements.txt


Töltsük le a súlyokat tartalmazó fájlokat a következő négy parancs kiadásával:


$ cd detector/YOLOv3/weight/
$ wget https://pjreddie.com/media/files/yolov3.weights
$ wget https://pjreddie.com/media/files/yolov3-tiny.weights
$ cd ../../../


Majd töltsük le a rendezéshez szükséges paramétereket a következő módon:


$ cd deep_sort/deep/checkpoint
$ https://drive.google.com/drive/folders/1xhG0kRH1EX5B9_Iz8gQJb7UNnn_riXi6 to this folder
$ cd ../../../


A következő lépés az NMS modul lefordítása:


$ cd detector/YOLOv3/nms
$ sh build.sh
$ cd ../../..


Ha ez sikerült futtathatjuk a demót:


$ python yolov3_deepsort.py [itt adjunk meg egy videófájlt]


Ezen a ponton ha mozgó képet látunk magunk előtt nagyon örülhetünk, hiszen ez azt jelenti, hogy a mélységi rendezésen alapuló algoritmus nemcsak detektálja a videóban lévő tárgyakat, hanem azokhoz számot is rendel. Tehát az azonos objektumokat tudja követni.


Olvass még: Kriptovaluta ATM

Innentől kezdve egy ujj gyakorlat az adott tárgyak, illetve emberek pályájának kiírása egy fájlba, amelynek segítségével nyomon tudjuk követni az emberek mozgását és azt is tudjuk hogy épp melyik emberhez mely nyomvonal tartozik.


Megjegyezném továbbá, hogy a forráskódot kommentelő felhasználók nagy része kínai és valószínűleg ezen modulok fejlesztése Kínában hatalmas népszerűségnek örvend. Ennek köszönhetően iszonyatos pénzeket költenek az arcfelismerő illetve nyomkövető rendszerek fejlesztésére. Kiválóan használhatók ezek bűncselekmények megelőzésre, a maffia elleni harcra vagy akár katonai feladatokra is.


Látjuk tehát hogy egy néhány parancs kiadása után mi is birtokba vehetünk egy ilyen nyomkövető rendszert. Csak egy jó kamerára és egy videokártyára van hozzá szükség. Ezeket pár száz dollárért beszerezhetjük az interneten.


Abban az esetben ha kérdésed lenne a szoftverekkel kapcsolatban, vagy szeretnéd velem felvenni a kapcsolatot, kérlek írj a hikari [pont] code [kukac] gmail [pont] com címre.



Hozzászólások (1)

Szabó Gy. 2020.05.01 06:05

Nagyon szeretem az oldalt és köszi a segítséget!:)


Érdekes bejegyzéseink

Scroll to Top