Napjainkban sorra jelennek meg az okos eszközök, és az okostelefonokban manapság már széria tartozék az újlenyomatolvasó vagy az arcfelismerés. Hogyan lehet ezt a technológiát felhasználni saját rendszereinkben, hogy egy tényleg felhasználóbarát validálási folyamatot hozzunk létre komolyabb befeketetés nélkül.
„A biometrikus azonosító eljárás olyan automatikus technika, amely felismeri egy személy egyedi fizikai, testi jellemzőit és ezeket a személy azonosításra és hitelesítésre használja fel. A ma többségében használatos azonosítási eljárások nem túl biztonságosak. A chipkártyák, mágneskártyák, a fizikai kulcsok stb. elveszthetők, ellophatók, lemásolhatók. A jelszavak, PIN-kódok szintén lemásolhatók, elveszíthetők, és könnyen feltörhetők. A biometrikus azonosító módszerek a fenti hátrányoktól nagyrészt mentesek. Testi jellemzőinket mindig magunknál hordjuk, nem elveszíthetők, nem másolhatók.”
Jelenleg több olyan ingyenes szoftveres megoldás is létezik, amivel az adott feladatot végre tudjuk hajtani, és rendszerbe foglalva megfelelő biztonságot ad. Lehetőségünk van a mobiltelefonunk újlenyomatazonosítóját használni a rendszer részeként, mint mondjuk egy kétfaktoros bejelentkeztetésnél. Gondoljunk bele, hogy az adott rendszer, mondjuk egy beléptető, ami egy nagy iparterületen működik és megfelelő jogosultsági szintekkel ellátott beléptetést kell megvalósítanunk. A feltételezésünk alapján az ajtók elektronikusan működtethetők egyesével és a rendszerhez valamilyen interfésszel kapcsolhatóak. Ha ez adott, akkor nincs szükség komoly infrastruktúrális beruházásra, hogy a dolgozókat a megfelelő helyre beléptethessük. Tételezzük fel, hogy az okostelefon, legyen szó az Android vagy iOS, de rendelkezik újlenyomatolvasóval, akkor semmi mást nem kell tennünk, mint írni egy mobilalkalmazást ami képes újlenyomatleolvaására.(Bonyolultnak tűnhet,de nem annyira bonyolult.) A szoftvert képessé kell tennünk olyan részéve tenni a rendszerünknek, hogy míg a biometrikus azonosítást a mobiltelefon elvégzi addig a háttérben egy másodlagos autentikálási folyam megtörténjen és ez alajpán a személyt egyértelműen azonosíthassuk. Szóval hogy kicsit érthetőbb legyen a gondolatmenet.
A mobiltelefon az újjlenyomatot olvassa és ha sikeres a leolvasás elküld egy beálított, mentett adatrekordot, ami tartalmazza a dolgozó egyedi azonosítóját és azt a helyet ahová be szeretne lépni. A szerver oldali szoftver azonosítja kiről van szó, megnézi az adatbázisban beléphet e az adott területre, és ha igen, az adott ajtót kinyitja előtte. Nos felmerül a kérdés honnan tudja, hogy hol az ajtó. Itt jön a második faktor a képbe, mert a mobiltelefonos alkalmazásunk letudja olvasni az újlenyomatunkat, és a kamerájához is hozzáférhetünk amivel szimplán QR kód leolvasásával azonosítani tudjuk az ajtót. Tehát elegendő az ajtó mellé tenni egy QR kódot ami az ajtó egyedi azonosítóját tartalmazza az adatbáziusunkban a szerverünkön. Ezt a QR kódot a dolgozó leolvassa, kéri hogy az újjlenyomatával azonosítsa magát a telefonján, és ha ez sikeresen megtörtént a szerver kinyitja neki az ajtót. Természetesen ez egy elvi vázlata egy fiktív rendszernek, de jól mutatja mennyire alkalmazható a technológia a hétköznapokban.
Most vegyünk egy másik hasonló példát amit szintén létre tudunk hozni és a felhasználásra több területen is praktikus lehet. Ebben az esetben egy meglévő megvalósított rendszert veszek mintául, de olyan közegbe helyezem hogy szemléltesse a felhazsnálási területek szokszínűségét.
A biometrikus azonosítás állhat több komponensből is, és használhatunk hozzá fixen telepített eszközöket is hozzá. Napjainkban elterjedtek az irodaházakban a biztonsági kamera rendszerek. Ezeneknek a képét felhasználva építhetünk arcfelismerési beléptetést, vagy jelenlét renszert. Mi kell hozzá? A kamerákhoz a GDPR-ünkben foglaltaknak megfelelően hozzáférés kell a képekhez illetve egy szerver oldali szoftver, valamint itt is távműködtetési ajtók.
Az arcfelismeréshez sokkal több információ és adat kell, hogy az megfelelően biztonságos legyen. Sajnos jelenleg a tisztán kép alapján történő felismerő rendszerek nem kínálnak kellő biztonságot ezért a magas biztonságot igénylő azonosító szoftverek optikai érzékelés mellett infra mélységérzékeléssel is ki van egésztve(vagy egyéb pontosságot növelő faktorral), hogy a felhasználó arcának mélységét is analizálni tudja. Az ingyenes technológiáknál jelenleg két fő lehetőség van a szerver oldali képfeldolgozásra. Az egyik a node.js alapú face-api.js és a OpenCV alapú python megoldások.
Ezen kívül léteznek még olyan szolgáltatók amik API segítségével a saját számítási kapacitásukat felhasználva adnak lehetőséget az azonosításra. Legtöbbjük már nem teljesen ingyenes. Ilyen például az Amazon vagy a Microsoft. Én a valós megvalósításhoz a Microsoft Cognitive Services-t használtam. Ennek az egyik legfőbb oka az volt, hogy képes több csoportban kezelni az embereket, és egy emberhez több mintát is képes tárolni, ezen felül a pontossága is kiváló. Ezen felül ha a rendszert tovább szeretném fejleszteni, hogy a pontossága olyan mértékű legyen, hogy az megfeleljen egy szigorúbb beléptetésre, akkor kínál hang azonosítási API-t is így két emeber a hangja alajpán is megkülönböztethetővé váli és a pontosságot jelentősen meg lehet növelni.
Sajnos vannak hátrányok is. A microsoft rendszerével kapcsolatban az egyik hátrány a percenkénti arcfelismerés sebessége, és a havi limit, ami az ingyenességbe még belefér. Igaz elég nagy mennyiségű felismerést lehet véghez vinni még így is, viszont gondos tervezésre van szükség, hogy a felesleges leolvasásokat kiszűrjük, hiszen az csökkenti a havi keretünket.
Nos lássuk a megvalósított megoldást. A fenti limitet figyelembevéve mindenképpen ki kell szűrnünk a felesleges leolvasásokat, ezért kellett egy elsődleges felismerési algoritmus, ami az arcot felismeri a fényképeken vagy az élő videó képén. Az algoritmusnak elég gyorsank kell lennie ahhoz, hogy a rendszer amúgy is lassú feldolgozását tovább ne lassítsa. Gondoljunk bele percenként 20 db arcfelismerést tudunk megvalósítani, és ezt végig szem előtt kellett tartani. (Természetesen a microsoft szolgáltatása nem olyan drága hogy arra ne lehetne előfizetni, de én nem szerettem volna előfizetni.)
Több megoldás is létezik az arcok előzetes analíziséhez. Az első amit kipróbáltam és felhasználtam a tracking.js-volt mely lehetőséget ad objektumok és arcok felismerésére, csak sajnos a tesztek alapján nagyon lassúnak és pontatlannak bizonyult. Igen, képes élő videófelvételen folyamatos arckövetésre, de pontatlan és kis mozgás hatására el is veszti az arcot ezred másodpercekre.
Ezután a további kutatás arra vezetett, hogy egy remek script segítségével akár a 200 frame/s is elérhető és a pontosság is jelentősen növelhető. Ennek az egyik oka, hogy a script egy része natívan le van fordítva így csökken a köztes számítási kapacitás. Ez a script a pico.js, és meglepő módon csupán 200 soros, de a pontossága és gyorsasága vitathatatlan.
Nem fejteném ki a fenti képleteket, legyen annyi elég, hogy csoportosítja a képterületeket és az elkülönített területeken külön-külön fut le párhuzamosan az arcfelismerés és ez okozza a sebességnövekedést.
Tárjünk vissza fizikai megvalósításhoz. A script elvégzi az arcfelismerést, így csak olyan kép kerül elküldésre ami biztosan tartalmaz arcot. A microsoft felismerési algoritmusa így nem futhat olyan hibára, hogy a képen egyáltalán nincs is arc. Az előzetes vizsgálat után a képet a memóriából fájlba kell írni, mert a Cognitive Services csak olyan képet tud feldolgozni amit már letároltunk. A letárolt kép küldésének gyakoriságát is limitálnunk kell hiszen csak 20 db képet küldhetünk percenként. Ezt egy szimpla időzítéssel megtudjuk oldani. Három másodpercenként vizsgálja meg a kamera képét és ha van rajta arc akkor küldjük el a Microsoftnak és a válasz alapján végezzük el a további lépéseket.
Hogyan és mit csinál a Microsoft a képpel?
„Észlelhetők a képen szereplő emberi arcok, és az eredmények négyszögekkel mutatják meg, hol találhatók az arcok a képen, továbbá olyan tulajdonságok, amelyek a gépi tanulásra épülő előrejelzésen alapuló arcjellemzőket sorolják fel. Az arcot leíró jellemzők a következők: kor, érzelem, nem, testtartás, mosoly, arcszőrzet, továbbá 27 arcrész minden archoz. Ellenőrzi annak a valószínűségét, hogy két arc ugyanazt az embert ábrázolja-e. Az API olyan megbízhatósági pontszámot ad vissza, amely azt jelzi, mi a valószínűsége annak, hogy két arc ugyanazt az embert ábrázolja.” – Microsoft
A lényeg az, hogy több mint 27 darab arcjellemzőt vizsgál meg és ad vissza egy megbízhatósági pontszámot, ahol az 1 a teljes egyezőséget jelenti. A valós megvalósításnál én a 0.7 számot már egyezőségnek tekintem, így a változó fényviszonyok és egyéb képtömörítési pontatlanságok kiszűrhetőek. Bár az algoritmus elbír több megapixeles képpel a kellő sebesség fenntartásához 640×480 pixelnyi képeket vizsgálok.
De honnan tudja a Microsoft, hogy ki van a képen?
Természetesen meg kell mondani, hogy a felismert arc kicsoda, és el is kell menteni. Ezt a Microsoft úgy csinálja, hogy az API-nak van egy olyan része, hogy ha felismer egy arcot a képen és mondjuk neki, hogy jelöld meg a személyt a képen egyedi azonosítóval akkor ad egy úgynevezett personID-t. Ez már a fenti több mint 27 markert leolvasva ad a rendszer minden arcnak amit felismert. Ezeket az azonosítókat csoportba szedhetjük és és akár egy személy több felismertetése is összerendelhető. Az API rendszer válaszait adatbázisban letárolom és ezután már csak azt vizsgálom, hogy a PersonID legalább 0.7 egyezőséget mutat e a felismertett arccal.
A megvalósított rendszer működés közben.
Egy távműködtetésű ajtót működtet és egy épületbe lehet vele bejutni.
A rendszer része egy információs pulthoz hasonló eszköz melyben van a kamera és egy monitor ami mutatja a kamera képét. Az információs pult felépítése végett külső behatásoktól teljesen elzárt.
Ezután már nincs más hátra mint a távműködtetésű ajtóknak utasítást adni, ha megfelelő az egyezőség. Miután a relé visszajelzett, hogy elvégezte a feladatot újrakezdem a felismerési folyamatot. Természetesen a felismerési folyamatnak meg kell állnia amíg a kiértékelés nem történik meg, mivel felesleges valakiről 5 db képet elküldeni és párhuszamosan többször elindítani a relé folyamatát. Én a megvalósított rendszert PHP-ban, cURL, python, jQuery és HTML5 részekkel valósítottam meg, de csak azért, mert a cikk első felében bemutatott két faktoros vizsgálat így is megvalósítható lesz mobiltelefon segítségével, ha a pontosságot növelni szeretnénk.
Mire jó ez az egész még?
Nos ezt már sokan sokféleképpen kitalálták, de felsorolok pár ötletet. Például épületeken belül a dolgozók mozgásának nyomkövetése, naplózása. Létrehozható statisztikai elemzéshez forgalomszámlálás, így például mérhető egy ügyfélszolgálat forgalma teljesen automatizálva emberi tényezőt kiszűrve. Szoftverekhez való hozzáférés, vagy csak arra, hogy valakit megkeresünk egy nagyobb tömegben. Mint tudjuk ezt már sok helyen használják a bűnüldöző szervek. Kínában és Angliában erre gyakorlati megoldások is vannak.
Összegzés
Természetesen hordoz némi félelmetességet a technológia, ha a közel 20 éves Hálózat csapdájában, vagy a Közellenség című filmeket vesszük alapul. Viszont úgy gondolom, hogy minden eszköznek van jó és rossz oldala. Csupán attól függ mire, és hogyan használjuk fel.
Forrás: wifipedia.hu, azure.microsoft.com, itnext.io