Development of the robust face detection and recognition system for IOT environments on Azure platform
Full text
(2) RAZVOJ SISTEMA ZA ROBUSTNO DETEKCIJO IN PREPOZNAVO OBRAZOV ZA IOT – OKOLJA NA PLATFORMI AZURE Diplomsko delo. Študent(ka):. Žiga Pustoslemšek. Študijski program:. Visokošolski strokovni študijski program Elektrotehnika. Smer:. Elektronika. Mentor(ica):. Izr. prof. dr. Matej Rojc. Somentor(ica):. dr. Izidor Mlakar.
(3) Zahvala Iskreno se zahvaljujem svojemu mentorju Izr. prof. dr. Mateju Rojcu in somentorju dr. Izidorju Mlakarju za vse strokovne nasvete. in. velikodušno. vsestransko. pomoč pri izdelavi diplomskega dela.. Posebno zahvalo namenjam tudi svojim staršem, ki so mi študij omogočili in me skozi vsa ta leta šolanja brezpogojno podpirali. I.
(4) Razvoj sistema za robustno detekcijo in prepoznavo obrazov za IOT – okolja na platformi Azure. Ključne besede: Microsoft Azure, spletna aplikacija, prepoznava obrazov, detekcija obrazov. UDK:. 004.932'1(043.2). Povzetek V diplomski nalogi predstavljamo razvoj dveh neodvisnih aplikacij, ki za prepoznavo obrazov uporabljata storitev Microsoft Azure Face. Prva aplikacija je namenjena za upravljanje z uporabniki, ki jih želimo vključiti v sistem prepoznave. Drugo aplikacijo pa smo razvili za proces prepoznavanja oseb v IoT okolju. V nalogi so predstavljene metode za detekcijo in prepoznavo obrazov, ter tehnologije uporabljene za razvoj sistema in obeh aplikacij.. II.
(5) Development of robust face detection and recognition system for IOT-Environments on Azure platform. Keywords: Microsoft Azure, web application, face recognition, face detection. UDK:. 004.932'1(043.2). Abstract The diploma thesis presents the development of two independent applications that use the Microsoft Azure Face service for face recognition. The first application is designed in order to manage the users that we want to include in the face recognition system. Another application was developed for the process of identifying persons in the IoT environment. In the thesis are presented methods for face detection and recognition, as well as the technologies used to develop the system and both applications.. III.
(6) KAZALO ZAHVALA ...................................................................................................................I 1. DETEKCIJA IN PREPOZNAVA OBRAZOV V IOT OKOLJIH ........................................ 1. 2. ALGORITMI DETEKCIJE IN PREPOZNAVE OBRAZOV ............................................. 3. 2.1. Detekcija obrazov ..................................................................................................................... 3. 2.2. Razpoznava obrazov ................................................................................................................. 7. 2.3. Metode razpoznave obrazov .................................................................................................... 8. 3. OBLAČNA PLATFORMA AZURE ......................................................................... 10. 3.1. Uporaba platforme Azure ........................................................................................................10. 3.2. Kognitivne storitve na oblačni platformi Azure ........................................................................10. 4. »HOME ASSISTANT« PLATFORMA ZA IOT OKOLJA ............................................ 12. 5. UPORABLJENE TEHNOLOGIJE ........................................................................... 14. 5.1. Python .....................................................................................................................................14. 5.1. Podatkovna baza MongoDB .....................................................................................................14. 5.2. JavaScript knjižnica ReactJS .....................................................................................................15. 5.3. Izvajalno okolje za JavaScript Node.js ......................................................................................16. 5.4. Ogrodje Express.js za okolje Node.js ........................................................................................17. 5.5. Docker okolje...........................................................................................................................17. 6. RAZVOJ SISTEMA ZA PREZPOZNAVO OSEB ....................................................... 20. 6.1. Postopki prepoznave oseb .......................................................................................................21. 6.2. Konfiguracija predlaganega sistema ........................................................................................25. 6.3. Komunikacija s platformo Home Assistant ..............................................................................26. 7. RAZVOJ APLIKACIJE ZA DODAJANJE OBRAZOV NOVIH UPORABNIKOV .............. 28 IV.
(7) 7.1. Zaledni sistem..........................................................................................................................30. 7.2. Baza podatkov .........................................................................................................................37. 7.3. Uporabniški vmesnik ...............................................................................................................37. 7.4. Registracija in prijava v aplikacijo ............................................................................................41. 7.5. Uporabniška nadzorna plošča ..................................................................................................43. 7.6. Administratorska nadzorna plošča ..........................................................................................44. 7.7. Postopek kreiranja osebe in treniranje algoritma ....................................................................49. 7.8. Namestitev aplikacije ..............................................................................................................50. 8. SKLEP ............................................................................................................... 52. 9. VIRI.................................................................................................................. 53. V.
(8) KAZALO SLIK SLIKA 1.1: PREDLAGANA ARHITEKTURA CELOVITE REŠITVE PREPOZNAVANJA UPORABNIKOV V IOT OKOLJU .......................... 2 SLIKA 2.1: METODE ZA DETEKCIJO OBRAZOV NA SLIKI ............................................................................................... 4 SLIKA 2.2: HIERARHIJA SLIK Z RAZLIČNO LOČLJIVOSTJO, USTVARJENE S POVPREČENJEM IN PODVZORČENJEM - ...................... 5 SLIKA 2.3: DELOVANJE ALGORITMOV ZA DETEKCIJO OBRAZOV, KI TEMELJIJO NA PREDLOGAH [2] ....................................... 6 SLIKA 2.4: POSTOPEK RAZPOZNAVE OBRAZA ........................................................................................................... 7 SLIKA 4.1 : PRIKAZ MODULOV V HOME ASSISTANT PLATFORMI ................................................................................ 12 SLIKA 5.1: PODATKOVNA BAZA MONGODB - PRIKAZ STRUKTURE DOKUMENTA ........................................................... 15 SLIKA 5.2: NODE.JS - MODEL PROCESIRANJA ZAHTEV ............................................................................................. 16 SLIKA 5.3: DOCKER IN NAVIDEZNE NAPRAVE ......................................................................................................... 18 SLIKA 5.4: DOCKER VSEBOVALNIK ...................................................................................................................... 19 SLIKA 6.1: : DIAGRAM POTEKA PROGRAMA ZA PREDLAGAN SISTEM PREPOZNAVE OSEB V IOT OKOLJIH ............................. 21 SLIKA 6.2: UPORABLJENA IP KAMERA ................................................................................................................. 22 SLIKA 6.3: POSREDOVAN ODZIV Z OBLAČNE PLATFORME AZURE V PRIMERU USPEŠNE DETEKCIJE OSEB .............................. 23 SLIKA 6.4: POSREDOVAN ODZIV Z OBLAČNE PLATFORME AZURE V PRIMERU USPEŠNE RAZPOZNAVE OSEB NA SLIKI .............. 24 SLIKA 6.5: ODZIV OBLAČNE PLATFORME AZURE ZA PRIDOBIVANJE INFORMACIJ O OSEBAH ............................................. 25 SLIKA 6.6: KONFIGURACIJSKA DATOTEKA PREDLAGANEGA SISTEMA ZA PREPOZNAVO OSEB ............................................. 26 SLIKA 6.7: JSON FORMAT UPORABLJEN PRI KOMUNIKACIJI PROGRAMA ZA PREPOZNAVO OSEB Z PLATFORMO HOME ASSISTANT ........................................................................................................................................................... 27 SLIKA 7.1: ARHITEKTURA SPLETNE APLIKACIJE ....................................................................................................... 28 SLIKA 7.2 SPLETNA APLIKACIJA - POSTAVITEV STRANI.............................................................................................. 29 SLIKA 7.3: STRUKTURA DATOTEK ZA API POVEZAVE ............................................................................................... 31 SLIKA 7.4: ARHITEKTURA UPORABNIŠKEGA VMESNIKA SPLETNE APLIKACIJE ................................................................. 38 SLIKA 7.5: UPRAVLJANJE STANJ V REACTJS ........................................................................................................... 39 SLIKA 7.6: SPLETNA APLIKACIJA - PRIJAVNO OKNO ................................................................................................. 42 SLIKA 7.7: SPLETNA APLIKACIJA - NADZORNA PLOŠČA ............................................................................................. 44 SLIKA 7.8: SPLETNA APLIKACIJA - STRAN SETTINGS (NASTAVITVE) .............................................................................. 45 SLIKA 7.9: SPLETNA APLIKACIJA - TABELA UPORABNIKOV ......................................................................................... 45 SLIKA 7.10: SPLETNA APLIKACIJA - INFORMACIJA O UPORABNIKU.............................................................................. 46 SLIKA 7.11: SPLETNA APLIKACIJA - PRIKAZ SLIK UPORABNIKA V ADMINISTRATORSKI NADZORNI PLOŠČI .............................. 46 SLIKA 7.12: SPLETNA APLIKACIJA – »PERSON GROUPS« TABELA ............................................................................... 48 SLIKA 7.13: POSTOPEK KREIRANJA OSEB IN PRIPRAVA NA RAZPOZNAVO ..................................................................... 49. VI.
(9) KAZALO ZA IZVORNO KODO IZVORNA KODA 6.1: KODA ZA ZAJEMANJE VIDEO SIGNALA IP KAMERE ....................................................................... 22 IZVORNA KODA 6.2: PYTHON KODA ZA DETEKCIJO OBRAZOV NA ZAJETI SLIKI................................................................ 23 IZVORNA KODA 6.3: DEL KODE ZA RAZPOZNAVO OSEB ............................................................................................ 24 IZVORNA KODA 7.1: GLAVNA DATOTEKA ZALEDNEGA SISTEMA - SERVER.JS .................................................................. 30 IZVORNA KODA 7.2: PRIJAVA UPORABNIKA V SPLETNO APLIKACIJO ............................................................................ 35 IZVORNA KODA 7.3: SPLETNA APLIKACIJA - VERIFIKACIJA ŽETONA ............................................................................. 36 IZVORNA KODA 7.4: SPLETNA APLIKACIJA - FUNKCIJA OVERJANJE VLOGE..................................................................... 36 IZVORNA KODA 7.5: SPLETNA APLIKACIJA - PRIDOBITEV SKUPIN Z AZURE .................................................................... 36 IZVORNA KODA 7.6: MONGOOSE SHEMA UPORABNIKA .......................................................................................... 37 IZVORNA KODA 7.7: PRIMER UPRAVLJANJA Z GLOBALNIM STANJEM .......................................................................... 40 IZVORNA KODA 7.8: PRIKAZ KREIRANJA GLOBALNEGA STANJA Z REACN ORODJEM ........................................................ 40 IZVORNA KODA 7.9: REACTN FUNKCIJA ZA PRIJAVO UPORABNIKA V SPLETNO APLIKACIJO ............................................... 41 IZVORNA KODA 7.10: SPLETNA APLIKACIJA – REGISTRACIJA UPORABNIKA ................................................................... 43 IZVORNA KODA 7.11: DOCKER-COMPOSE DATOTEKA ZA NAMESTITEV SPLETNE APLIKACIJE ............................................. 50. VII.
(10) Seznam uporabljenih kratic API – vmesnik za uporabno programiranje (ang. application programming interface) NPM – program za upravljanje paketov (ang. node package manager) NoSQL – nestrukturirani jezik za poizvedovanje (ang. non-structured query language) JSON – objektni JavaScript zapis (ang. JavaScript object notation) MERN – združena okrajšava za: MongoDB, ExpressJS, ReactJS, Node.js HA – okrajšava za programsko platformo Home Assistant. VIII.
(11) 1 DETEKCIJA IN PREPOZNAVA OBRAZOV V IOT OKOLJIH. V zadnjih letih Tehnologija interneta stvari (IoT) postaja vedno bolj prisotna, ne samo v ozkih tehnoloških krogih, marveč bistveno širše in v vsakodnevnem življenju. Tako na primer danes že uporabljamo pametne gospodinjske aparate, pametne osebne pripomočke, ki se jih lahko nosi na telesu (t.i. wearables''), pametno razsvetljavo, in še veliko več. Podobno velja tudi za področje procesiranja biometričnih podatkov. Izrazit preboj tehnologije je moč opaziti na področju pametnih telefonov, v obliki prepoznave prstnih odtisov in prepoznave obraza uporabnika. Uporaba IoT naprave in senzorji ter biometrija predstavljata integralnih del pametnih mest in okolij, kjer se nahaja veliko ljudi, in kjer bi želeli pogosto imeti nadzor nad varnostjo ljudi. Dandanes obstaja že veliko algoritmov in sistemov za detekcijo in prepoznavo obrazov, od plačljivih do odprto kodnih, od zelo robustnih do manj robustnih. Ključen izziv obstoječih algoritmov je uporaba v okoljih z veliko šuma in okoljih s slabšo oz. variabilno osvetlitvijo. Nadalje, obstoječi sistemi ne predstavljajo celovite integrirane rešitve za IoT okolja in rešujejo izoliran problem. Rešitve niso dovolj modularne in prilagodljive, njihovo funkcionalnost pa je težko prenesti v drugo domeno, npr. v kompleksna pametna okolja, s katerimi upravlja umetna inteligenca (AI) (npr. z uporabo sistema pametnega asistenta, t.i. platforme Home Assistant). Cilj diplomske naloge je razviti celovit sistem za detekcijo in prepoznavo obrazov oseb v variabilnih okoljih. Arhitektura sistema je predstavljena na sliki 1.1. V predlagani zasnovi rešitve sledimo modularnosti in paradigmi porazdeljenega procesiranja. Ključni, sistemsko odvisni in procesorsko zahtevni elementi, npr. procesiranje slike, detekcije in razpoznave obrazov, izvajajo oddaljeno, na oblačni platformi Microsoft Azure (Slika 1.1: Azure Face API). V lokalnem okolju (t.i. okolju na robu) pa se izvajajo procesorsko manj zahtevni servisi, npr. zajem slike, RESTFUL komunikacija med komponentami na robu in 1.
(12) oblaku z izvedbo ustreznih programskih vmesnikov, t.i. API-jev (Slika 1.1: Aplikacija za razpoznavo oseb). V okviru celovite rešitve bomo postavili tudi spletno aplikacijo za upravljanje z uporabniki, ki bo prav tako neposredno komunicirala z oblačno platformo Microsoft Azure preko RESTFUL komunikacije in pripadajočih API-jev (Slika 1.1). Aplikacija je sestavljena iz dveh modulov: modula za registracijo in upravljanje z uporabniki, ter modula za dodajanje novih obrazov »registriranih« uporabnikov. Celovit sistem detekcije in prepoznave obrazov bomo povezali še s platformo Home Asistent. V okviru laboratorija za digitalno procesiranje signalov, platforma Home Asistent predstavlja osrednjo točko IoT okolja.. Slika 1.1: Predlagana arhitektura celovite rešitve prepoznavanja uporabnikov v IoT okolju. 2.
(13) 2 ALGORITMI DETEKCIJE IN PREPOZNAVE OBRAZOV. 2.1 Detekcija obrazov Detekcija obrazov je algoritem, ki ugotavlja prisotnost objekta (obraza) v vizualni sceni in tudi njegovo lokacijo. Algoritem predstavlja prvi korak v vseh tistih aplikacijah, ki procesirajo obrazno informacijo, oziroma se zahteva prepoznava oseb na digitalnih slikah ali videoposnetkih [1]. V nadzorovanih okoljih je sama detekcija precej enostaven problem. Strukturno so si obrazi namreč zelo podobni (imajo podoben obris). V nenadzorovanih okoljih, v katerih so prisotni zahtevnejši pogoji za detekcijo, kot npr: poza glave, izražanje, položaj in orientacija glave, barva kože, prisotnost očal ali las na obrazu, spremenljivi svetlobni pogoji, prekrivanje (angl. occlusion) in ločljivosti slike, pa lahko tudi sama detekcija predstavlja precej kompleksen problem, ki za odpravo vpliva potrebuje bistveno več sistemskih virov. Algoritmi za detekcijo obrazov temeljijo na več pristopih [2].. 2.1.1 Pristopi za detekcijo obrazov Cilj detekcije obrazov je določiti ali na sliki obstajajo obrazi ali ne. V primeru obraza na sliki mora algoritem detekcije vrniti lokacijo in površino obraza. Problemi ki se pojavijo pri detekciji obrazov lahko prepišemo naslednjim dejavnikom: •. Poza – slike obraza se razlikujejo glede na pozicije kamere, relativno na obraz (spredaj, 45 stopinjski profil, zgoraj, spodaj) in nekatere obrazne lastnosti niso razvidene, npr. enega očesa ne vidimo oz. je delno zakrito.. •. Prisotnost ali odsotnost obraznih značilnosti – značilnosti obraza, kot so brada, brki in očala so lahko prisotni, zato obstaja veliko variabilnosti med temi komponentami, vključno z obliko, bravo in velikostjo.. •. Izraz obraza – izraz obraza vpliva na sam izgled. 3.
(14) •. Prekrivanje – Obrazi se lahko delno prekrivajo z drugimi. Na sliki s skupino ljudi, lahko nekateri obrazi delno prekrivajo ostale.. •. Orientacija slike – Slike obrazov se lahko razlikujejo po samo orientaciji slike glede na optično os fotoaparata.. •. Pogoji slike – Različni faktorji ob posnetju slike lahko vplivajo na izgled obraza, kot so svetloba (intenzivnost, spekter) , lastnosti kamere (senzor, odziv, leče objektiva).. Predlagane so bile številna metode za detekcijo obrazov na eni sami sliki. Na splošno so metode razvrščene v štiri kategorije, in sicer (Slika 2.1): metode, ki temeljijo na značilkah, metode, ki temeljijo na videzu, metode, ki temeljijo na znanju, metode, ki temeljijo na ujemanju vzorcev.. Slika 2.1: Metode za detekcijo obrazov na sliki [3]. Z napredkom nevronskih mrež in globokim učenjem (DNN) so metode, ki temeljijo na algoritmih učenja (t.i. Haar Cascade detektor obraza, adaboost, kaskadni klasifikatorji, in HoG detektor obraza), v zadnjem času pritegnili veliko pozornosti in pokazali odlične rezultate. Ker pa te metode temeljijo na podatkih in je njihova natančnost odvisna od obsega in raznolikosti nabora za učenje, omenjamo tudi druge možne pristope.. 1. Algoritmi, ki temeljijo na znanju (angl. knowledge-based) 4.
(15) Algoritmi, ki temeljijo na znanju, so odvisni od nabora pravil in temeljijo na človeškem znanju za detektiranje obrazov. Primer – vsak obraz vključuje nos, oči in usta na določenih razdaljah in položajih. Velika težava takšnih algoritmov je problem pri oblikovanju ustreznega niza pravil. Napačna detekcija je lahko rezultat v veliko primerih, če so pravila preveč splošna, ali tudi preveč podrobna. V takšnem primeru algoritem ne zadostuje in tudi ne more najti veliko obrazov v več slikah. Primer takšnega algoritma je hierarhična metoda. [3]. Slika 2.2: Hierarhija slik z različno ločljivostjo, ustvarjene s povprečenjem in podvzorčenjem - (a) izvorna slika, (b) slika z vsakim kvadratkom 4x4, nadomeščenim s povprečno intenzivnostjo slikovnih pik v tem kvadratu, (c) slika z kvadratom 8x8, (d) slika s kvadratom 16x16.. Metoda uporablja hierarhijo več slik z različno ločljivosti in specifičnih pravil. Hierarhija slik je zgrajena s podvzorčenjem slike, pri čemer je primer prikazan na sliki 2.2. Pravila na višjih nivojih so na splošno opisana npr. kako izgleda obraz, medtem ko se pravila na nižjih nivojih osredotočajo na podrobnosti obraza. Postopek detekcije obrazov se začne od najvišjega nivoja v hierarhiji (z najnižjo ločljivostjo) in poišče možne kandidate na osnovi splošnega videza obrazov. Srednji nivo poskuša izvesti lokalno izenačitev histograma na obrazu kandidatov, sledi detekcija robov obraza. Uspešno prepoznana območja so potem preverjena na sliki (b) v sklopu pravil, ki se osredotočajo na dele obraza, kot so npr. oči in usta. [4] [5]. 2. Algoritmi, ki temeljijo na osnovi značilnosti (angl. Apperance based) Metode, ki temeljijo na značilnostih, izvajajo iskanje obrazov z ekstrakcijo strukturnih značilnosti obraza. Algoritem je najprej naučen kot klasifikator, nato pa 5.
(16) uporabljen za ločevanje struktur obraza od ne-obraznih območij. Ta pristop je sestavljen iz več korakov, in v primeru uporabe fotografij z veliko obrazi, je lahko stopnja uspešnosti 94%. [5] Primer takšnega algoritma je Viola-Jones. Je prvi algoritem, ki lahko izvede detekcijo obraza v realnem času, in sta jo leta 2001 predlagala Paul Viola in Michael Jones. Algoritem je robusten z visokim številom pozitivnih detekcij, in lahko deluje v realnem času. [6] [3]. 3. Algoritmi, ki temeljijo na vzorcih (angl. Template matching) Algoritmi, ki uporabljajo vnaprej izbrane ali parametrizirane skupine obrazov za iskanje ali odkrivanje obrazov, in sicer z uporabo korelacije med skupinami obrazov in vhodnimi slikami. Človeški obraz lahko razdelimo na oči, obris obraza, nos in usta. Model obraza lahko oblikujemo tudi po robovih z uporabo algoritma zaznavanja robov. Ta pristop je enostaven za izvedbo, vendar ni primeren za kompleksno zaznavanje obrazov. [3]. Slika 2.3: Delovanje algoritma za detekcijo obrazov, ki temeljijo na vzorcih [2]. 4. Algoritmi, ki temeljijo na učenju Algoritmi, ki temeljijo na učenju so odvisni od nabora slik obraza za učenje, ki morajo zajemati reprezentativno spremenljivost videza obraza. Pristopi, ki temeljijo na učenju, so boljši od drugih pristopov. Na splošno se algoritem, ki temelji na učenju, opira na pristope statistične analize in strojnega učenja za iskanje ustreznih značilk 6.
(17) obraza. Takšen algoritem se uporablja tudi za izločanje lastnosti obraza pri prepoznavi obraza. [3] Nekaj najbolj znanih algoritmov, ki temeljijo na učenju so: Viola and Jones (V–J) detektor, Haar cascade, Adaboost Training, Cascading Classifiers, itd. Pri Haar cascade algoritmu gre za pristop, ki temelji na učenju, in se model uči z številnimi pozitivnimi in negativnimi slikami. Nato se uporabi za zaznavanje predmetov na drugih slikah. Algoritem lahko na sliki zazna obraze in dele telesa, lahko pa ga tudi naučimo prepoznave drugih predmetov. [7]. 2.2 Prepoznava obrazov Prepoznava obrazov oseb je metoda prepoznave ali preverjanja identitete posameznika z uporabo slik njegovega obraza. Sistem za prepoznavanje obraza uporablja biometrične podatke za ugotavljanje obraznih lastnosti s fotografije ali videa. Podatke nato primerja z bazo podatkov znanih obrazov, in išče najboljše ujemanje. Uporaba takšnega pristopa je zelo razširjena in se dandanes uporablja v mnogih varnostnih sistemih, npr. za prepoznavo kriminalcev, za prepoznavo oseb v marketingu, za prepoznavo na mobilnih aplikacijah za dostopanje do zaklenjenih aplikacij, itd. [8] Metode prepoznavanja obrazov se lahko razlikujejo med različnimi aplikacijami in proizvajalci. Tipični sistemi za prepoznavo vključujejo naslednji niz modulov (Slika 2.4) [9] [10]: zajem slike in detekcija obraza, predprocesiranje in normalizacija, izločanje obraznih značilk, izračun podobnosti in razvrščanje.. Slika 2.4: Postopek razpoznave obraza. 7.
(18) 1. Zajem slike in detekcija obraza: Slika obraza je najprej zajeta na fotografiji ali videoposnetku. Obraz je lahko zajet izolirano ali tudi v množici ljudi. Običajno je najboljša uspešnost, če zagotovimo 35 stopinjski kot gledanja v kamero pri izvajanju detekcije. 2. Pred procesiranje in normalizacija Slika zajetega obraza je nato pomanjšana in zasukana, se jo tudi registrira in preslika v ustrezno pozo in velikost. Temu koraku pravimo normalizacija. Po normalizaciji programska oprema ugotavlja geometrijo obraza tako, da določi ključne elemente, kot so: razdalja med očmi, debelina ustnic, razdalja med brado in čelom, in številne druge značilnosti. Nekateri naprednejši sistemi prepoznavanja obrazov uporabljajo veliko takšnih značilnosti. Rezultat tega koraka je kreiranje kode, ki predstavlja ta obraz.. 3. Izločanje obraznih značilk Po generiranju obraznega »podpisa« obraza, se le tega pretvori v edinstveno kodo. Kodiranje namreč omogoči lažje izvajanje primerjave v bazi z obraznimi podatki, ki vsebuje veliko število predhodno ustvarjenih shranjenih podatkov obrazov. 4. Izračun podobnosti in razvrščanje To je faza, v kateri se zajeti obrazi primerjajo z že shranjenimi podatki. Če se najde ujemanje z eno od slik v bazi podatkov, programska oprema vrne podrobnosti o pripadajoči osebi, in obvesti končnega uporabnika.. 2.3 Metode prepoznave obrazov Prepoznava obrazov je ena izmed najbolj zahtevnih aplikacij za analizo slike in prepoznavanje vzorcev. Metode prepoznave obrazov dobro delujejo na slikah, ki jih pridobimo s sodelovanjem oseb. Spremembe v osvetlitvi, pozah, in izrazov namreč drastično otežijo delo sistemom. V nadaljevanju na kratko predstavimo metode, ki se uporabljajo za prepoznavo obrazov [11]:. 8.
(19) 2.3.1 Holistične metode ujemanja Pri holističnih metodah ujemanja (angl. Holistic Matching Methods) so vhodni podatki kar celotno območje obraza. Primeri teh metod so: EigenFaces (najpogosteje uporabljena metoda na področju prepoznave obrazov), PCA (angl. principal component analysis), LDA (angl. linear discriminant analysis), in ICA (angl. independent component analysis). [11] Primer holistične metode ujemanja je razširitev Karhunen-Lo`eve metode, znana tudi kot razčlemba načelnih sestavin (PCA), se ukvarja z izbiro funkcij za prikaz signala. Z uporabo razširjene Karhunen-Lo`eve metode za prepoznavanje obraza, se poišče majhno število lastnosti, ki jih opredeljujejo poglavitne komponente obraza. Poglavitne komponente obraza najdemo s projeciranjem dvodimenzionalnih slik obraza v enodimenzionalni podprostor, nato pa izberemo poglavitne komponente, ki zajamejo največje razlike med posameznimi obrazi. [12]. 2.3.2 Metode, ki temeljijo na lastnostih obraza Pri metodah, ki temeljijo na lastnostih obraza najprej poiščemo dele obraza kot so nos, oči in usta. Z njimi tudi izvedemo ustrezno poravnavo obraza. Sliko potem razdelimo na pod-slike, iz katerih pridobimo lastnosti. Za prepoznavo se uporabijo lokacija, ter geometrijske in vizualne lastnosti. Na obrazih primerjamo različne dimenzije in razdalje med posameznimi lastnostmi obraza. [11] 2.3.3 Hibridne metode Hibridni sistem prepoznave obrazov uporablja kombinacijo obeh zgoraj omenjenih metod. V hibridnih metodah se običajno uporabljajo3D slike. Slika obraza osebe je zajeta v 3D prostoru kar omogoča, da sistem zaznava na primer tudi krivine očesnih votlin, ali oblike brade ali čela. Zadošča tudi slika obraza s profila, ker sistem uporablja tudi globino, kar mu daje dovolj informacij za rekreacijo polnega obraza. 3D sistem prepoznave običajno poteka: zaznavanje, pozicija, merjenje, zastopanje in ujemanje. [11]. 9.
(20) 3 OBLAČNA PLATFORMA AZURE. Microsoft Azure je storitev računalništva v oblaku, ki jo je Microsoft razvil za gradnjo, testiranje, uvajanje, in upravljanje aplikacij in storitev preko Microsoft podatkovnih centrov. Ponuja se programsko opremo kot storitev (SaaS), platformo kot storitev (PaaS), in infrastrukturo kot storitev (IaaS), in se podpira tudi različne programske jezike, orodja in ogrodja, vključno z Microsoft programsko opremo in sistemi drugih proizvajalcev. [13]. 3.1 Uporaba platforme Azure Pred uporabo njenih storitev je potrebno ustvariti račun, na osnovi katerega lahko uporabimo potrebne storitve. Ob prijavi pridobimo 200€ začetnega kapitala za eno leto, po porabi oz. preteku tega zneska pa je potrebno uporabiti sredstva za zakup storitev, ki se obračunavajo po sistemu »plačaj kar porabiš« (angl. pay-as-you-go). Prednost Microsoft storitev je brezplačna uporaba nekaterih storitev do določenega limita. Le-ta pa je v večini primerov dovolj za čas razvoja in testiranja.. 3.2 Kognitivne storitve na oblačni platformi Azure Kognitivne storitve (angl. cognitive services) so Azure API funkcije, SDK funkcije in storitve, ki so na voljo razvijalcem pri razvoju aplikacij na področju umetne inteligence (angl. artificial intelligence - AI). Razpoložljive kognitivne storitve razvijalcem omogočajo enostavno dodajanje kognitivnih funkcionalnosti v svoje aplikacije. Cilj kognitivnih storitev je pomagati razvijalcem ustvarjati aplikacije, ki lahko »vidijo«, »slišijo«, »govorijo«, »razumejo« in celo »razmišljajo«. Nabor storitev v kognitivnih storitvah lahko razvrstimo na pet glavnih sklopov – vid (angl. vision) , govor, jezik, spletno iskanje, 10.
(21) in odločanje. [14] Storitev, ki smo jo uporabili za razvoj predlagane aplikacija, se imenuje vid (angl. Vision). Uporabili smo jo za prepoznavo in identifikacijo obrazov oseb. Storitev omogoča kategorizacijo oseb v skupine (npr. študenti, učenci, profesorji, itd.), poimenovanje, in nalaganje slik obrazov, ter vključuje tudi algoritem za učenje, detekcijo in prepoznavo obrazov.. 11.
(22) 4 »HOME ASSISTANT« PLATFORMA ZA IOT OKOLJA. Platforma Home Assistant je odprto-kodna platforma napisana v programskem jeziku Python. Njen razvoj se je začel kot projekt že v letu 2013, ko je deloval sicer kot skripta za vklop luči ob zahodu sonca. Platforma se je nato hitro razvila v celovito IoT platfomo, in se dandanes lahko pohvali z velikim številom IoT uporabnikov in razvijalcev. Platforma je dobro podprta na večini sistemov, in je trenutno najbolj znana pod imenom Hass.io, ki je posebej prilagojena za mikroračunalnik Raspberry Pi.. Slika 4.1 : Prikaz modulov v platformi Home Assistant. Platforma Home Assistant poskuša odpraviti problem, ki je nastal zaradi pomankanja široko sprejetega odprtega standarda za komunikacijo med pametnimi napravami. Četudi bi takšen standard obstajal, večina naprav še ni pripravljenih za komunikacijo z ostalimi napravami. Za rešitev takšnega problema potrebujemo centralni sistem oz. napravo, s katero lahko komuniciramo in upravljamo z vsemi povezanimi napravami. Ta 12.
(23) naprava se imenuje »hub«. [15] Platforma Home Assistant je zgrajena modularno. Tako je omogočeno neodvisno dodajanje novih komponent v sam sistem, brez spreminjanja jedra same aplikacije. Razširljivost na račun modularnosti se kaže v veliki raznolikosti in številu dodanih komponent, ki v tem trenutku znaša že 1400+ komponent [16]. To so na primer vklop luči, komunikacija z Amazon Alexa, prikaz video posnetkov, odklepanje vhodnih vrat, in še mnogo več.. 13.
(24) 5 TEHNOLOGIJE ZA SISTEM PREPOZNAVE OBRAZOV. To poglavje predstavlja tehnologije, ki jih potrebujemo pri razvoju spletne aplikacije za dodajanje obrazov in učenje sistema za prepoznavo oseb. Za postavitev spletne aplikacije smo uporabili tako imenovano MERN platformo (MongoDB, ExpressJS, ReactJS, NodeJS). To je ena najbolj znanih platform za izdelavo spletnih aplikacij. Pri razvoju spletne aplikacije smo uporabili programski jezik python.. 5.1 Programski jezik Python Python je visokonivojski objektni programski jezik z integrirano dinamično semantiko za razvoj aplikacij in skript. Na področju razvoja aplikacij je izjemno uporaben. Poleg tega je relativno preprost programski jezik, ki se ga je preprosto naučiti. Razvijalci na primer lažje razumejo in sledijo Python kodo, kot kodo drugih programskih jezikov. To posledično zmanjša stroške vzdrževanja in razvoja aplikacij in sistemov. Poleg tega Python podpira uporabo modulov in paketov, rezultat pa je, da se lahko gradi programska rešitev zelo modularno, koda pa se lahko tudi po uporablja v različnih projektih. [17]. 5.1 Podatkovna baza MongoDB MongoDB je odprtokodna NoSQL podatkovna baza. NoSQL podatkovna baza za razliko od klasičnih podatkovnih baz ne potrebuje sheme s tabelami. Uporablja namreč dokumentno usmerjen model podatkov (JSON) – pri čemer se zamenja koncept vrstice SQL podatkovne baze s fleksibilnejšem modelom, imenovanim dokument (Slika 5.1). Dokument ni nič drugega kot množica parov ključ-vrednost . Podatkovna baza MongoDB je zelo razširljiva. Omogoča namreč kombiniranje in shranjevanje več tipov podatkov, ne 14.
(25) da bi pri tem onemogočali indeksiranje, dostopanje do podatkov, ali pravila validacije podatkov. Ko želimo dinamično spreminjati shemo, se lahko tako osredotočamo samo na procesiranje podatkov v bazi, in ne na primer na gradnjo strukture in podatkov. [18]. Slika 5.1: Podatkovna baza MongoDB - prikaz strukture dokumenta [18]. 5.1.1 Knjižnica objektnega modeliranja podatkov Mongoose Mongoose je knjižnica objektnega modeliranja podatkov (ODM) za podatkovno bazo MongoDB in Node.js. Omogoča preprosto definiranje shem in validacijo le teh. Vključuje tudi različne API-je za izvajanje funkcij na bazi podatkov, kot so CRUD (create, read, update, delete) in še mnogo več. Mongoose je prav tako dostopen preko upravljalca paketov NPM [19].. 5.2 JavaScript knjižnica ReactJS ReactJS je odprto-kodna JavaScript knjižnica, ki jo je Facebook razvil za hitro in učinkovito ustvarjanje bogatih in privlačnih spletnih aplikacij. Glavni cilj knjižnice ReactJS je zagotoviti hitro renderiranje (angl. rendering) strani. Namesto gradnje celotne spletne aplikacije,. knjižnica. ReactJS. razvijalcu. omogoča. razčlenitev. kompleksnega. uporabniškega vmesnika na enostavnejše komponente. [20]. 15.
(26) 5.3 Izvajalno okolje za JavaScript Node.js Node.js je odprto-kodno izvajalno okolje JavaScript, ki je zasnovano za enostavno gradnjo hitrih in razširljivih spletnih aplikacij na strani strežnika. Grajen je na Google Chrome V8 pogonu. [21] Okolje Node.js vsako zahtevo odjemalca izvede na isti niti in se s tem izogne dodatni obremenitvi centralne procesne enote (CPU) in pomnilnika, ki bi drugače nastala v primeru kreiranja nove niti. Čeprav glavni program deluje na eni niti, izvaja večina intenzivnih vhodno/izhodnih opravil na ločenih nitih. Izvajanje teh opravil se izvede preko dogodkov. Ko pride nova zahteva odjemalca, le-ta sproži dogodek, ki nato posreduje zahtevo na eno od teh niti. Vsak dogodek pri tem uporablja povratni klic (angl. feedback). Le-ta je klican ko je opravilo zaključeno, npr. ko se kreira nova datoteka. Medtem lahko glavna nit nemoteno izvaja ostale procese. [22] Pri tem je potrebno omeniti, da okolje Node.js deluje zelo hitro in učinkovito. Zato je primerna za podatkovno zelo intenzivne aplikacije tudi v realnem času. Ni pa primerna za uporabo na CPU z mnogo procesi, saj se v tem primeru lahko blokira tudi glavno nit, kar potem upočasni delovanje.. Slika 5.2: Node.js - Model procesiranja zahtev. 16.
(27) 5.3.1 Upravljalec paketov NPM Velika prednost Node.js pred ostalimi tehnologijami je integracija upravljalca paketov NPM (angl. Node Package Manager). NPM je uradni upravljalec paketov za okolje Node.js. Namesti se ga istočasno z okoljem Node.js. NPM potrebujemo za dve stvari. Potrebuje se namreč za skladiščenje tisoče brezplačnih odprtokodnih projektov/paketov Node.js. Nujen pa je tudi kot pripomoček, s katerim lahko upravljamo s takšnim skladiščem – pomaga torej pri namestitvi paketov, pri upravljanju z različicami paketov, in pri upravljanju odvisnosti paketov (angl. dependency management). Paketi nam omogočajo tudi enostavno uporabo kode v predlaganem sistemu. To nam drastično skrajša čas razvoja in poveča učinkovitost kode, ki je odvisna tudi od izbranih paketov. [23] Nekateri najbolj uporabljeni paketi so: ReactJS, Prop-types, Moment, in ExpressJS.. 5.4 Ogrodje Express.js za okolje Node.js Express.js je odprtokodno ogrodje za okolje Node.js. Zgrajeno je na Node.js tehnologiji, ki vključuje velik nabor funkcij za razvoj spletnih in mobilnih aplikacij. Express se najpogosteje uporablja za razvoj vmesne opreme (angl. middleware). [24]. Ena glavnih prednosti ogrodja express.js je definitivno odprto-kodno okolje, zaradi česar ima zelo veliko skupino razvijalcev. Posledično je ogrodje tudi pogosto posodobljeno. Prav tako imamo na razpolago na spletu veliko primerov in rešitev.. 5.5 Docker okolje Docker je takšno okolje, ki omogoča razvijalcem in sistemskim administratorjem, da preprosto nameščajo aplikacije v peskovnik (angl. sandbox), imenovan tudi vsebovalnik (angl. container), ki služi za zagon aplikacije na gostiteljskem operacijskem sistemu, npr. Linux. Ključna prednost Docker okolja je, da uporabnikom omogoča združevati aplikacijo z vsemi obstoječimi odvisnostmi v izbran Docker vsebovalnik za razvoj programske. 17.
(28) opreme. Vsi vsebovalniki uporabljajo enoten operacijski sistem in so zato učinkovitejši od navideznih naprav (angl. virtual machine) [25] 5.5.1 Navidezne naprave (angl. virtual machines) Čeprav Docker okolje in navidezne naprave delujejo drugače, imajo podobne prednosti izolacija aplikacij od ostalih, in dodeljevanje računalniških virov. Virutalna naprava pomeni emulacija računalniškega sistema, kar pomeni da temeljijo na računalniški arhitekturi in zagotavljajo funkcionalnost fizičnega računalnika. Vsaka navidezna naprava vključuje celovito kopijo operacijskega sistema, aplikacijo, potrebne binarne datoteke in knjižnice - porabi se več deset GB in se običajno zaganjajo počasi. [26]. Slika 5.3: Docker in navidezne naprave. 5.5.2 Docker vsebovalnik (angl. container) Kot smo že pojasnili, predstavlja Docker vsebovalnik standardno programsko okolje, ki hrani kodo in vse njene soodvisnosti, tako da lahko aplikacija hitro in zanesljivo deluje tudi v različnih računalniških okoljih. Slika vsebovalnika Docker tako predstavlja paket programske opreme, ki vsebuje vse kar potrebujemo za zagon aplikacije (kodo,. 18.
(29) sistemska orodja, sistemske knjižnice in nastavitve). Za razliko od navideznih naprav, vsebovalnik uporablja operacijski sistem gostitelja. [26]. Slika 5.4: Docker vsebovalnik. 19.
(30) 6 RAZVOJ SISTEMA ZA PREZPOZNAVO OSEB. V sklopu diplomske naloge smo razvili sistem za prepoznavo oseb v prostoru. Predlagani sistem sestoji iz mikroračunalnika raspberry PI 3, IP kamere in programa, ki skrbi za komunikacijo s kamero, Microsoft Azure storitvami, in platformo Home Assistant. V tem poglavju bomo podrobneje predstavili razvoj celotnega sistema. Arhitektura sistema je prikazana na spodnji sliki (Slika 6.1).. Slika 6.1: Arhitektura sistema za prepoznavo oseb. 20.
(31) 6.1 Prepoznava oseb Celoten postopek prepoznave razdelimo na več procesov. Za uspešno prepoznavo osebe se morajo izvesti procesi v sistemu v naslednjem zaporedju: zajem slike s kamere, detekcija, prepoznava, pridobitev ustreznih podatkov oseb, in posredovanje le-teh na platformo Home Assistant. Vsi procesi so podrobneje opisani v naslednjih podpoglavjih.. Slika 6.2: Diagram poteka programa za predlagan sistem prepoznave oseb v IoT okoljih. 21.
(32) 6.1.1 Postopek zajemanja slike s kamere V prvem procesu pridobimo sliko z IP kamere (Slika 6.3). S kamero se povezujemo z uporabo python paketa CV2. Za povezovanje je potrebno predhodno nastaviti IP naslove, uporabniško ime, in geslo. Potrebne nastavitve so opisane v poglavju 6.2. Ko je ta korak storjen, se sistem lahko poveže s kamero in zajema video signal, kot sledi:. Izvorna koda 6.1: Koda za zajemanje video signala IP kamere. Zajeti video signal je sicer sestavljen iz mnogih slik, oz. okoli 30 slik na sekundo. Samo eno od slik nato uporabimo v naslednjem procesu, ki je namenjen detekciji obrazov.. Slika 6.3: Uporabljena IP kamera. 6.1.2 Postopek detekcije obraza V tem procesu moramo izvesti detekcijo obraza na zajeti sliki. Sliko je zato potrebno prekodirati v binarno obliko. V takšni obliki pa jo potem posredujemo na oblačno platformo Azure, kjer uporabimo algoritem za detekcijo obrazov. V primeru uspešne 22.
(33) detekcije obrazov na posredovani sliki, prejmemo tudi odziv z oblačne platforme Azure, v katerem so podane informacije o zaznanih obrazih (Slika 6.4). Posredovani podatki so sicer neberljivi in so uporabni samo za vizualni prikaz, v primeru predlaganega sistema pa se uporabijo za nadaljnjo procesiranje (razpoznavo obrazov).. Izvorna koda 6.2: Python koda za detekcijo obrazov na zajeti sliki. Slika 6.4: Prejet odziv z oblačne platforme Azure v primeru uspešne detekcije oseb. 6.1.3 Proces prepoznave oseb V tretjem koraku se izvaja prepoznava oseb na zajeti sliki. Pri tem izkoristimo podatke pridobljene v prejšnjem koraku, in sicer predvsem podatek “faceId” – ki predstavlja unikatno kodo, ki identificira lastnosti obraza. Vse identifikacijske kode obrazov je potrebno nato shraniti v polju in poslati na Azure API za razpoznavo obrazov. Pri tem pošljemo zraven še spremenljivko skupine, s katero algoritem primerja pridobljene podatke s shranjenimi obrazi na Azure platformi. Skupine smo definirali v konfiguracijski datoteki (6.2). V primeru prepoznave oseb v katerikoli od definiranih skupin, prejmemo 23.
(34) odziv z oblačne platforme Azure, v katerem so podane informacije o kandidatih in kolikšna je zaupanje algoritma o pravilni razpoznavi osebe na sliki (Slika 6.5).. Izvorna koda 6.3: Primer kode za prepoznavo oseb. Slika 6.5: Prejet odziv z oblačne platforme Azure v primeru uspešne razpoznave oseb na sliki. 24.
(35) 6.1.4 Proces pridobivanje informacij prepoznane osebe V prejšnjem koraku smo identificirali osebe. V primeru uspešne identifikacije, vsebuje prejeti odziv z oblačne platforme Azure informacije v obliki, ki je prikazana na sliki (Slika 6.5). Zaradi potrebe po podrobnejših podatkih prepoznane osebe (ime, opis), moramo v predlaganem sistemu ponoviti klic na oblačno platformo Azure in uporabiti API za pridobivanje specifične osebe. Težava je, da bi sistem na ta način dokaj hitro porabil razpoložljivo omejeno količino klicev API funkcij na oblačni platformi Azure, ki znaša 30.000 klicev na mesec. Zato smo minimizirali izvajanje takšnih klicev za pridobivanje podrobnejših informacijo o osebah tako, da smo ob vsaki prepoznavi osebe predhodno preverili ali že obstajajo pripadajoči zapisi v pomnilniku. V kolikor takšnih zapisov še ni bilo, smo klicali API funkcijo za pridobivanje vseh oseb skupine ponovno, in jih nato shranili v pomnilnik. Na takšen način smo znatno zmanjšali število klicev.. Slika 6.6: Odziv oblačne platforme Azure za pridobivanje informacij o osebah. 6.1.5 Proces posredovanja podatkov V zadnjem koraku je potrebno v predlaganem sistemu vse pridobljene podatke posredovati še na IoT platformo okolja z IP kamero, ki ja v našem primeru platforma Home Assistant. Celotni proces je podrobneje predstavljen v poglavju 6.3.. 6.2 Konfiguracija predlaganega sistema prepoznave oseb Zaradi kompleksnosti predlaganega sistema, smo želeli zagotoviti enostavno konfiguracijo spremenljivk v sistemu, brez da bi pri tem morali spreminjati jedro samega programa. Zato smo izbrali YAML datoteko, predvsem zaradi enostavne integracije in. 25.
(36) možnosti pisanja komentarjev z znakom #. Konfiguracijske nastavitve smo razdelili na naslednje štiri glavne sklope: •. Camera: spremenljivke potrebne za povezavo z IP kamero,. •. Main: spremenljivke za komunikacijo z oblačno platformo Azure in njenimi API funkcijami in časovniki, s katerimi lahko definiramo čas kako pogosto želimo, da sistem izvaja detekcijo in identifikacijo oseb,. •. faceIndentification: spremenljivke za identifikacijo oseb. Spremenljivka “groups” je zelo pomembna, saj s tem specificiramo v katerih skupinah naj sistem poskuša identificirati osebe. S tem se tudi vpliva na število klicev Azure funkcij, tako da je treba pri tem biti tudi pazljiv,. •. MQTT: spremenljivke uporabljene za komunikacijo z MQTT posrednikom.. Slika 6.7: Konfiguracijska datoteka predlaganega sistema za prepoznavo oseb. 6.3 Komunikacija s platformo Home Assistant Za komunikacijski protokol med platformo Home Assistant in predlaganim sistemom smo izbrali MQTT protokol (angl. Message Queuing Telemetry Transport protocol), predvsem zaradi hitrosti in majhne porabe pasovne širine omrežja. Komunikacija poteka na principu objava/naročanje (angl. publish/subscribe), kar je v našem primeru tudi 26.
(37) praktično, saj lahko določamo čas objave informacij in ni potrebno skrbeti, da bi padla sinhronizacija podatkovne izmenjave med dvema napravama, kot bi se lahko zgodilo v primeru uporabe REST API. Pri komunikaciji potrebujemo tudi MQTT posrednika (angl. broker). MQTT Posrednik je odgovoren za sprejemanje vseh sporočil, njihovo filtriranje, odločanje, kdo je naročen na posamezno sporočilo in pošiljanje sporočil tem naročnikom. Za ta namen smo izbrali Eclipse Mosquitto™ programsko rešitev [27]. Odprto-kodni MQTT posrednik sporočil smo namestili na isto platformo (RaspberryPI), kjer se sicer izvaja tudi program predlaganega sistema. JSON sporočilo, ki ga objavimo na MQTT posredniku sporočil je sestavljeno iz naslednjih treh delov: 1. Detection – s podatkom o število detekcij na zajeti sliki, 2. Identification – s podatki o vseh osebah, ki so identificirane na sliki. Podan je tudi podatek o zanesljivosti podane identifikacije, 3. Errors – s podatki o napakah, ki se lahko pojavijo med izvajanjem detekcije/identifikacije (npr. napačen API ključ, število klicev je preseglo omejitev, napačna slika, itd.). Slika 6.8: JSON format uporabljen pri komunikaciji programa za prepoznavo oseb s platformo Home Assistant. 27.
(38) 7 RAZVOJ APLIKACIJE ZA DODAJANJE OBRAZOV NOVIH UPORABNIKOV. V sklopu diplomske naloge potrebujemo poleg sistema za prepoznavo oseb, še sistem za komunikacijo z oblačno platformo Azure za dodajanje novih obrazov, oseb, skupin ipd. Zaradi narave sistema Azur, ki deluje preko API klicev (ki ni ravno najbolj prijazen način za uporabnika), smo razvili še spletno aplikacijo predstavljeno v tem poglavju, in tako omogočili uporabnikom lažji dostop in upravljanje sistema. Za razvoj spletne aplikacije smo uporabili MERN okolje. Spletno aplikacijo smo razdelili na naslednje tri glavne module: •. Uporabniški vmesnik – skrbi za prikaz strani uporabniku,. •. Zaledni sistem – skrbi za komuniciranje med uporabniškem vmesnikom, bazo podatkov in Azure platformo,. •. Baza podatkov – skrbi za shranjevanje podatkov.. Moduli so podrobneje predstavljeni v naslednjih podpoglavjih.. Slika 7.1: Arhitektura spletne aplikacije za dodajanje novih obrazov uporabnikov. 28.
(39) Aplikacija je narejena tako za običajne uporabnike, kot tudi administratorja sistema prepoznave obrazov. Pri običajnem uporabniku smo želeli, da ima le-ta dostop do najbolj osnovnih funkcij. Te funkcije so npr. upravljanje s slikami svojega obraza (npr. pregled, nalaganje, brisanje). Administratorju so sicer omogočene enake funkcije kot običajnemu uporabniku. Razlika pa je v tem, da ima administrator lastno nadzorno ploščo, preko katere lahko upravlja z vsemi običajnimi uporabniki, komunicira z Azure Face API klici (kreiranja skupin, oseb, treniranja algoritma, spreminjanja nastavitve, itd.) ipd.. Slika 7.2 Spletna aplikacija - postavitev strani za dodajanje novih obrazov. Funkcije, ki so na voljo običajnemu uporabniku in administratorju: • registracija, prijava, • nalaganje slike obraza, • brisanje slike obraza. Funkcije, ki so na voljo samo administratorju: • dostop do administratorske nadzorne plošče, • pregled in upravljanje uporabnikov, • kreiranje skupin in oseb na Azure platformi, • pošiljanje slik oseb na Azure platformo, • algoritem učenja za prepoznavo oseb.. 29.
(40) 7.1 Zaledni sistem spletne aplikacije Zaledni del aplikacije je namenjen za komunikacijo med uporabniškim vmesnikom, podatkovno bazo, in Azure platformo. Razvili smo ga s tehnologijami node.js in express.js. Glavna datoteka zalednega sistema je server.js, v kateri smo postavili server z express.js orodjem, vzpostavili povezavo z bazo podatkov MongoDB, in inicializirali API povezave. Kreirali smo tudi mapo uploads, v kateri se hranijo slike obrazov uporabnikov. V programski kodi (Izvorna koda 7.1) predstavljamo potek inicializacije sistema preko express.js modula, povezavo s podatkovno bazo, inicializacijo API povezav, in zagon sistema preko funkcije »app.listen()«.. Izvorna koda 7.1: Glavna datoteka zalednega sistema - server.js. 7.1.1 Povezave za komuniciranje s sistemom V programski kodi (Izvorna koda 7.1) predstavljamo, katere datoteke uporabljamo za API povezave. Te datoteke se nahajajo v mapi routes in vsebujejo vse nadaljnje povezave, ki jih lahko kličemo (Slika 7.3).. 30.
(41) Slika 7.3: Struktura datotek za API povezave. Vsaka od teh datotek vključuje več povezav, preko katerih lahko komuniciramo z zalednim sistemom. Primer funkcije ene od teh povezav predstavljamo s programsko kodo (Izvorna koda 7.2). 1. Auth.js V datoteki auth.js smo vključili vse povezave, ki so povezane z uporabniki.. Slika 7.4: API povezave datoteke auth.js zalednega sistema. 2. Azure.js V datoteki azure.js smo vključili povezavo, ki omogoča administratorjem prenos slik uporabnika na azure platformo.. 31.
(42) Slika 7.5: API povezave datoteke azure.js zalednega sistema. 3. personGroups.js V datoteki personGroups.js smo vključili vse povezave, ki komunicirajo direktno z Azure platformo. Pri razvoju smo sicer razmišljali o direktni povezavi uporabniškega vmesnika z Azure. Vendar bi v tem primeru zadeva postala zelo kompleksna in nepregledna, saj ne bi imeli poenotenega pregleda nad vsemi klici in napakami ki bi se lahko pojavile.. Slika 7.6: API povezave datoteke personGroups.js zalednega sistema. 32.
(43) 4. settings.js Vključuje povezave za nastavitve, ki so na voljo samo administratorju.. Slika 7.7: API povezave datoteke settings.js zalednega sistema. 5. users.js Vključuje povezave za upravljanje z uporabniki.. Slika 7.8: API povezave datoteke users.js zalednega sistema. 33.
(44) 7.1.2 Overjanje uporabnika in njegove vloge Spletna aplikacija mora imeti ustrezen način overjanje uporabnikov. Drugače bi lahko vsak uporabnik brez omejitev klical katerekoli API povezave. Posledično bi lahko brisal uporabnike, slike, uporabljal Azure storitve, itd. Tega si seveda ne želimo. Zato smo v aplikacijo vpeljali dve vrste zaščite: (i) overjanje preko uporabniškega imena in gesla, in (ii) preverjanje vloge uporabnika.. 1. Overjanje preko uporabniškega imena in gesla - žetona Spletna aplikacija uporablja uporabniško ime in geslo za overjanje uporabnikov. S tem uporabnik dokazuje svojo identiteto. Uporabniško ime in geslo mora uporabnik obvezno posredovati, drugače se mu ne dodeli dostop do omejenih povezav, kot so npr. nalaganje obrazov, kreiranje skupin, itd. Uporabnik se lahko prijavi preko uporabniškega vmesnika za prijavo - se v zalednem sistemu kliče povezavo “/api/login”. Povezava v ozadju najprej preveri ali se geslo in uporabniško ime ujemata z vnosom v bazi podatkov. V primeru ujemanja, se uporabnika prijavi v sistem in se mu tudi posreduje žeton.. 34.
(45) Izvorna koda 7.2: Prijava uporabnika v spletno aplikacijo za vnos novih obrazov. Pridobljen žeton je samo niz črk in številk, ki predstavlja identiteto uporabnika. Žeton se shrani v brskalnik uporabnika in se lahko v primeru klica na povezavo, ki potrebuje identiteto uporabnika. ponovno uporabi za preverjanje njegove identitete. Na podlagi identitete uporabnika potem ustrezno aplikacija tudi ravna. Na spodnji sliki z izvorno kodo predstavljamo, kako se na podlagi žetona preverja, ali je uporabnik prijavljen. V primeru uspešne. verifikacije uporabnika omogočimo nadaljnjo izvajanje. Drugače. vrnemo sporočilo, da uporabnik nima dostopa.. 35.
(46) Izvorna koda 7.3: Spletna aplikacija - verifikacija žetona. 2. Preverjanje vloge uporabnika Preverjanje je smiselno v primeru uporabnika, ki je sicer prijavljen. Preverjanje vloge se izvede na enak način kot je to izvedeno v primeru overjanja žetona - s pomočjo vmesne opreme (angl. middleware) – izvorna koda je prikazana na spodnji sliki (Izvorna koda 7.4). Na sliki z izvorno kodo (Izvorna koda 7.5) pa je prikazan primer zaščitene povezave za pridobitev skupin z Azure platforme. Zaščitena je najprej z overjanjem žetona (Auth), nato pa še s preverjanje vloge, ki je omejena na “admin” vlogo.. Izvorna koda 7.4: Spletna aplikacija - funkcija overjanje vloge. Izvorna koda 7.5: Spletna aplikacija - pridobitev skupin z Azure. 36.
(47) 7.2 Baza podatkov Baza podatkov, v katero shranjujemo podatke, temelji na tehnologiji MongoDB. Vmesnik med podatkovno bazo in uporabnikom predstavlja tehnologija Node.js. Bazo podatkov uporabljamo za shranjevanje uporabnikov in nastavitev. Ostale podatke pridobimo z Azure platforme po potrebi. Za lažje upravljanje nad podatkovno bazo smo uporabili paket mongoose (5.1.1). Paket je omogočil izdelavo sheme, s katero smo lahko določili vrsto podatkov, privzeto vrednost, itd.. Izvorna koda 7.6: Mongoose shema uporabnika. 7.3 Uporabniški vmesnik Uporabniški vmesnik je zelo pomemben del vsake spletne aplikacije. V primeru slabe izvedbe, se bo uporabniku aplikacija zdela prezahtevna za uporabo. Zato je pomembno, da je preprosta za uporabo, ima minimalistično strukturo, in vključuje jasne funkcije. Za razvoj uporabniškega vmesnika smo uporabili tehnologijo ReactJS. Uporabili smo tudi različne pakete preko upravljalca paketov NPM. Nekaj pomembnejših paketov, ki smo jih uporabili so: 37.
(48) Axios - za komuniciranje z zaledno stranjo - Node.js povezave, ReactN – paket za upravljanje globalnih stanj, MaterialUI – paket za preprostejšo izdelavo komponent. 7.3.1 Arhitektura uporabniškega vmesnika Z uporabo tehnologije ReactJS smo spletne strani razdelili na komponente. Komponente so sestavni del katere koli aplikacije ReactJS, tipična aplikacija pa jih bo imela veliko. Omogočajo, da uporabniški vmesnik razdelimo na neodvisne, ponovno uporabne dele. Preprosto povedano, komponenta je objekt (angl. class) ali funkcija JavaScript, ki po izbiri sprejema vhodne podatke in vrne element React, ki opisuje, kako naj se upodobi del uporabniškega vmesnika.. Slika 7.9: Arhitektura uporabniškega vmesnika spletne aplikacije. Čeprav so komponente glavni sestavi deli aplikacije, je prav tako potrebno zgraditi sistem, ki bi omogočil enostavno komuniciranje komponenta-komponenta, ter komponenta-zaledni sistem. Zato smo izbrali paket ReactN. V primeru, da želi komponenta komunicirati z zalednim sistemom, ali upravljati z globalnim stanjem, mora to storiti s klicanjem definiranih funkcij (ReactN funkcija), ki niso nič drugega kot pa JavaScript funkcije definirane preko ReactN orodja. Glavni dve funkciji ReactN, ki smo jih uporabili v dani spletni aplikaciji sta:. 38.
(49) •. Globalno stanje – je JSON objekt kreiran v najvišji datoteki index.js, in je dostopno kateri koli komponenti in je prikazano na (Izvorna koda 7.8). •. ReactN funkcija ali reduktorji (angl. reducers) – funkcije preko katerih upravljamo z globalnim stanjem in zalednim sistemom.. 7.3.2 Upravljanje stanja komponent Večina knjižnic, kot so React, Angular itd., je zgrajenih tako, da komponente interno upravljajo svoje stanje in ni potrebe po zunanji knjižnici ali orodju. To je dobro za aplikacije z malo komponentami, vendar če aplikacija postaja vedno bolj kompleksna, lahko upravljanje s stanji, ki se delijo med komponentami, postane zelo zahtevno. Ko mora npr. komponenta deliti stanje z drugo komponento, ki nima povezave med staršem in otrokom, se lahko začnejo stvari zapletati. Slike (Slika 7.10) nazorno prikazujejo težave. Na levi strani vidimo drevo komponent ReactJS. Ko komponenta sproži spremembo stanja, jo je potrebno razširiti na vse druge komponente, ki se nanašajo na spremenjene podatke.. Slika 7.10: Upravljanje stanj v reactJS. Na podlagi tega smo se odločili za uporabo razmeroma novega orodje za upravljanje z globalnim stanjem, ReactN. To orodje vključuje funkcije za enostavno upravljanje globalnega stanja s poljubne komponente. Najprej smo morali inicializirati globalno stanje v glavni datoteki index.js, kot je prikazano s kodo (Izvorna koda 7.8), vrstica 12. Nato smo preprosto dostopali do stanja preko “useGlobal” funkcije, v katerikoli. 39.
(50) komponenti. Primer je prikazan s kodo (Izvorna koda 7.7), vrstica 6, z dostopanjem do “user” spremenljivke.. ` Izvorna koda 7.7: Primer upravljanja z globalnim stanjem.. Izvorna koda 7.8: Prikaz kreiranja globalnega stanja z ReacN orodjem.. 7.3.3 Komunikacija z zalednim sistemom Če želimo dinamično prikazati podatke na komponentah, potrebujemo povezavo z zalednim sistemom. Kot smo omenili že v poglavju 7.1, vključuje spletna aplikacija API 40.
(51) povezave, s katerimi lahko komuniciramo. Pri tem komponenta nikoli ne komunicira direktno z zalednim sistemom, ampak vedno kliče že kreirane ReacN funkcije, katere potem nadalje kličejo zaledni sistem. V izvorni kodi (Izvorna koda 7.9) je prikazan primer ReactN funkcije za prijavo uporabnika v aplikacijo. Pri klicu se morajo podati uporabniško ime (username) in geslo (password). Funkcija spremeni podatke v JSON nit, nato pa preko axios orodja kliče »/api/auth/login« povezavo na zaledni strani. V primeru uspešne prijave lahko vidimo v vrstici 51, da funkcija spremeni vrednosti globalnega stanja. Če slučajno pride do napake, oziroma neuspešne prijave – obvestimo o tem uporabnika.. Izvorna koda 7.9: ReactN funkcija za prijavo uporabnika v spletno aplikacijo. 7.4 Registracija in prijava v aplikacijo Registracija uporabnika je zelo preprosta in zahteva samo vnos podatkov, kot so: ime, email naslov, uporabniško ime, in geslo (Slika 7.11). Z registracijo je uporabniku določena 41.
(52) vloga gosta, s čimer mu je že omogočena uporaba uporabniške nadzorne plošče. V primeru, da želimo uporabnika spremeniti v administratorja, mora to izvesti administrator na administratorski nadzorni plošči.. Slika 7.11: Spletna aplikacija - prijavno okno. Postopek registracije in prijave smo izvedli tako, da se v primeru napačnih podatkov izpiše ustrezno sporočilo uporabniku. Preverjanje smo izvedli tako na začetni strani, kot tudi na zaledni strani s pomočjo različnih verifikacijskih modulov. Primer registracije je prikazan na spodnji kodi (Izvorna koda 6.1), kjer je predstavljen postopek validacije spremenljivk, kot so: name, username, password. Vsaka od teh spremenljivk ima svoje pogoje za uspešno validacijo. Prikazan je tudi postopek kreiranja uporabnika v primeru, da ne obstaja.. 42.
(53) Izvorna koda 7.10: Spletna aplikacija – registracija uporabnika. 7.5 Uporabniška nadzorna plošča Uporabniku je po prijavi omogočen prenos njegovih slik na strežnik predlaganega sistema. Te slike se nato lahko uporabijo za prepoznavo v programu sistema. Ko so slike prenešene, jih ni mogoče več prikazati uporabniku. Prikazane so samo še informacije o imenu, času prenosa in opcije za izbris slik s strežnika, kot lahko vidimo na sliki (Slika 7.12).. 43.
(54) Slika 7.12: Spletna aplikacija - nadzorna plošča. 7.6 Administratorska nadzorna plošča Uporabnik mora imeti vlogo administratorja, če želi dostopati do administratorske nadzorne plošče in njenih funkcij (Slika 7.2). Na desni strani nadzorne plošče je tako navigacijski meni, kjer so prikazane in dostopne vse glavne strani. Te so v našem primeru: users, person-groups, in settings. 7.6.1 Stran – Settings Na strani »settings« sta pomembni naslednji dve nastavitvi, in morata vedno biti podani če želimo komunicirati z Azure Platformo.. 44.
(55) Slika 7.13: Spletna aplikacija - stran settings (nastavitve). 7.6.2 Stran - Users Na strani uporabnikov je tabela z informacijami o vsakem registriranem uporabniku (Slika 7.14). S klikom na enega od uporabnikov, se namreč odpre stran z njegovimi opcijami/konfiguracijami (Slika 7.15). Tukaj so prikazane tudi vse informacije o uporabniku, tudi njegove slike. Prikazani sta tudi dve polji, ki ju je potrebno izpolniti, saj lahko le tako vključimo uporabnika v proces prepoznave: •. Azure_person_group_ID – potrebno je vpisati identifikacijsko številko skupine, ki jo lahko kreiramo v “person-groups” tabeli,. •. Azure_person_group_personID – vnesti moramo identifikacijsko številko osebe, ki jo je potrebno kreirati v sklopu zgoraj omenjene skupine.. Poleg teh informacij imamo tudi tabelo z naloženimi slikami uporabnika, z opcijami sinhronizacije/nalaganja na Azure Face API, in brisanje podatkov z našega strežnika (Slika 7.16).. Slika 7.14: Spletna aplikacija - tabela uporabnikov. 45.
(56) Slika 7.15: Spletna aplikacija - informacija o uporabniku. Slika 7.16: Spletna aplikacija - prikaz slik uporabnika v administratorski nadzorni plošči. 7.6.3 Stran - Person Groups »Person Groups« stran je namenjena za upravljanje s skupinami in z osebami na Azure Face platformi (Slika 7.18). Pri tem moramo upoštevati strukturo, ki je uporabljena na Azure platformi, če želimo uspešno izvajati identifikacijo (Slika 7.17).. 46.
(57) Slika 7.17: Struktura Azure objektov za identifikacijo. Skupina – je skupina z lastnim imenom in identifikacijsko številko. V skupini je običajno več oseb. Vsakič, ko je kakšna sprememba v podatkih z obrazi pri kateremkoli uporabniku, je potrebno z algoritmom ponoviti učenje.. Oseba – predstavlja objekt s podatki: ime, opis in slike obraza. V našem primeru smo to strukturo prenesli v tabelo, v kateri imamo nato pregled nad vsemi skupinami in povezanimi osebami. Vsaka skupina ima svoje akcije, in sicer za prenos oseb, kreiranje oseb, učenje skupine, in brisanje skupine. Oseba pa ima samo opcijo za brisanje.. 47.
(58) Slika 7.18: Spletna aplikacija – »person groups« tabela. 48.
(59) 7.7 Postopek kreiranja osebe in uporabe algoritma za učenje Slika 7.19 prikazuje celotni postopek kreiranja oseb in skupin na Azure platformi, in nalaganje slik obraza uporabnikov za katere želimo, da so vključeni v proces prepoznave.. Slika 7.19: Postopek kreiranja oseb in priprava na razpoznavo. 49.
(60) 7.8 Namestitev aplikacije Aplikacijo smo razvijali tako, da bi jo bilo mogoče hitro nameščati, zato smo tudi izbrali Docker tehnologijo - zaradi razpoložljivih orodij in funkcionalnosti, ki omogočajo enostavno namestitev in razvoj. Aplikacijo smo zato razdelili na dva Docker vsebovalnika. En vsebovalnik je zadolžen za zaledje, drugi vsebovalnik pa je zadolžen za uporabniški vmesnik. Vmesnika smo naložili na Docker hub spletno stran, od koder so vedno na voljo za postavitev na kateremkoli sistemu. Poleg dveh vsebovalnikov, potrebujemo še vsebovalnik za bazo podatkov MongoDB, ki ga je možno najti na isti strani z imenom “mongo”. Proces namestitve smo si nadalje poenostavili tudi z dockercompose datoteko. Le-ta nam omogoča enostavno namestitev aplikacije z ukazom “docker-compose up”. Tako se vsi potrebni vsebovalniki preprosto namestijo in tudi poskrbi, da se zaženejo v pravem vrstnem redu in s pravilnimi nastavitvami.. Izvorna koda 7.11: Docker-compose datoteka za namestitev spletne aplikacije. 50.
(61) 51.
(62) 8 SKLEP. Predstavljena diplomska naloga podaja rešitev zasnove sistema za prepoznavo oseb v IoT okoljih na oblačni platformi Azure. Predlagani sistem smo razvili s postavitvijo dveh neodvisnih podsistemov, ki uporabljata storitve oblačne platforme Microsoft Azure za prepoznavo oseb v IoT prostoru. Sistem smo razvili z uporabo več tehnologij, ki smo jih tudi podrobneje opisali v teoretičnem delu naloge. Prav tako smo predstavili osnovno zgradbo in delovanje sistema. Sistem smo razvili tako, da je enostaven za uporabo in potrebuje zelo preprosto konfiguracijo. Prav tako ga možno uporabiti v različnih IoT okoljih, in tudi s katerimkoli Azure računom.. Na trgu trenutno ni prav veliko rešitev za prepoznavo oseb v IoT okoljih. Prav tako se ne osredotočajo na Microsoft Azure storitve. V našem primeru je prednost ta, da smo postavili sistem, ki je specifičen za takšno platformo in omogoča enostavno in uporabniško prijazno interakcijo. Prav tako je sistem odprto-koden in omogoča enostavno nadgradnjo. Pri razvoju sistema smo ugotovili, da lahko ob uporabi brezplačnega računa na Microsoft Azure platformi, dokaj hitro porabimo razpoložljivo količino klicev storitev. Cena postavitve predlaganega sistema, ki bi moral delovati 24/7, bi posledično lahko zelo hitro naraščala.. V prihodnje bi lahko dodatno nadgradili sistem. Sistem za prepoznavo bi lahko nadgradili s priključitvijo dodatnih kamer, za katere že zagotavljamo preprosto konfiguriranje. Spletni aplikaciji za dodajanje obrazov, pa bi dodali različne možnosti prijave. S tem bi uporabniku poenostavili prijavo v sistem, in morda tudi razširili pridobivanje informacij o osebi.. 52.
(63) 9 VIRI [1]. „Face Detection,“ [Elektronski]. Available: https://sightcorp.com/knowledgebase/face-detection/.. [2]. 27 april 2018. [Elektronski]. Available: https://towardsdatascience.com/facedetection-for-beginners-e58e8f21aad9.. [3]. D. Dwivedi, „towardsdatascience,“ 27 April 2018. [Elektronski]. Available: https://towardsdatascience.com/face-detection-for-beginners-e58e8f21aad9. [Poskus dostopa 16 September 2019].. [4]. W.-L.. Chao,. „disp.ee.ntu.edu.tw,“. GICE,. National. Taiwan. [Elektronski].. University, Available:. http://disp.ee.ntu.edu.tw/~pujols/Face%20Recognition-survey.pdf.. [Poskus. dostopa 08 september 2019]. [5]. „A Review on Face Detection Methods,“ Februar 2011. [Elektronski]. Available: https://www.researchgate.net/publication/264878015_A_Study_On_Face_Ey e_Detection_And_Gaze_Estimation. [Poskus dostopa 10 September 2019].. [6]. „wikipedia,“. 30. Marec. 2019.. [Elektronski].. Available:. https://en.wikipedia.org/wiki/Viola%E2%80%93Jones_object_detection_frame work. [Poskus dostopa 10 September 2019]. [7]. W.. Berger,. „Will. Berger,“. [Elektronski].. http://www.willberger.org/cascade-haar-explained/.. [Poskus. Available: dostopa. 14. september 2019]. [8]. Electronic Frontier Foundation, „eef,“ Electronic Frontier Foundation, [Elektronski]. Available: https://www.eff.org/pages/face-recognition. [Poskus dostopa 26 Avgust 2019].. [9]. „Science. ABC,“. 26. January. 2019.. [Elektronski].. Available:. https://www.scienceabc.com/innovation/facial-recognition-works.html. [Poskus dostopa 26 Avgust 2019].. 53.
(64) [10]. a. S. e. Steve Symanovich, „Norton,“ Symantec Corporation, [Elektronski]. Available:. https://us.norton.com/internetsecurity-iot-how-facial-recognition-. software-works.html. [11]. B. B. M. Divyarajsinh N. Parmar, „arxiv,“ January 2013. [Elektronski]. Available: https://arxiv.org/ftp/arxiv/papers/1403/1403.0485.pdf. [Poskus dostopa 28 Avgust 2019].. [12]. STEWARTTSENG, „semanticscholar,“ 10 julij 2003. [Elektronski]. Available: https://pdfs.semanticscholar.org/84bc/48c85b2389f700779c1bda8d808dc497 2451.pdf. [Poskus dostopa 14 september 2019].. [13]. „Microsoft. docs,“. Microsoft, 4. April. 2019.. [Elektronski].. Available:. https://docs.microsoft.com/en-us/azure/architecture/cloud-adoption/gettingstarted/what-is-azure. [Poskus dostopa 24 Avgust 2019]. [14]. Microsoft, „Microsoft docs - cognitive services,“ Microsoft, 19 March 2019. [Elektronski].. Available:. https://docs.microsoft.com/en-us/azure/cognitive-. services/welcome. [Poskus dostopa 24 Avgust 2019]. [15]. „Home. Assistant,“. 26. December. 2014.. [Elektronski].. Available:. https://www.home-assistant.io/blog/2014/12/26/home-control-homeautomation-and-the-smart-home/. [Poskus dostopa 25 8 2019]. [16]. „home-assistant. components,“ home-assistant, [Elektronski]. Available:. https://www.home-assistant.io/components/. [Poskus dostopa 28 Avgust 2019]. [17]. Python Software Foundation, „python,“ Python Software Foundation, [Elektronski]. Available: https://www.python.org/doc/essays/blurb/. [Poskus dostopa 08 september 2019].. [18]. „intellipaat,“. intellipaat,. 05. aug. 2019.. [Elektronski].. Available:. https://intellipaat.com/blog/what-is-mongodb/#_MongoDb. [Poskus dostopa 6 september 2019]. [19]. LearnBoost,. „mongoosejs,“. LearnBoost,. [Elektronski].. Available:. https://mongoosejs.com/. [Poskus dostopa 09 september 2019]. 54.
(65) [20]. „ReactJS,“. [Elektronski].. Available:. https://reactjs.org/docs/getting-. started.html. [Poskus dostopa 5 september 2019]. [21]. Node.js Foundation, „NodeJS,“ Node.js Foundation, [Elektronski]. Available: https://nodejs.org/en/about/. [Poskus dostopa 07 September 2019].. [22]. P. Chandrayan, „codeburst,“ 25 November 2017. [Elektronski]. Available: https://codeburst.io/how-node-js-single-thread-mechanism-workunderstanding-event-loop-in-nodejs-230f7440b0ea.. [Poskus. dostopa. 07. September 2019]. [23]. Node.js Foundation, „NodeJS,“ 26 August 2011. [Elektronski]. Available: https://nodejs.org/en/knowledge/getting-started/npm/what-is-npm/. [Poskus dostopa 07 September 2019].. [24]. JavaTpoint,. „javapoint,“. JavaTpoint,. [Elektronski].. Available:. https://www.javatpoint.com/what-is-expressjs. [Poskus dostopa 09 september 2019]. [25]. P. Srivastav, „docker-curriculum,“ [Elektronski]. Available: https://dockercurriculum.com/. [Poskus dostopa 07 september 2019].. [26]. Docker. Inc.,. „docker,“. Docker. Inc.,. [Elektronski].. https://www.docker.com/resources/what-container.. [Poskus. Available: dostopa. 08. september 2019]. [27]. Eclipse Mosquitto™, „mosquitto,“ Eclipse Mosquitto™, [Elektronski]. Available: https://mosquitto.org/. [Poskus dostopa 15 september 2019].. [28]. Z.. Orman,. „researchgate,“. Avgust. 2011.. [Elektronski].. Available:. https://www.researchgate.net/publication/264878015_A_Study_On_Face_Ey e_Detection_And_Gaze_Estimation/references. [Poskus dostopa 14 september 2019].. 55.
(66)
Related documents
CHAPIQUIÑA ARICA CENTRAL ARICA CENTRAL IQUIQUE CERRO COLORADO POZO ALMONTE LA CASCADA TAMARUGAL IQUIQUE CAVANCHA Salar de Pintados LAGUNAS TARAPACÁ DOÑA INÉS DE COLLAHUASI CRUCERO
Firstly, the associations between preschoolers’ emergent literacy skills (print concepts, letter name and sound knowledge, name writing), home literacy environment (story books
Keywords: bullying, posttraumatic growth, sexual orientation, outness, social support, LGB... Bullying as a Source of Posttraumatic Growth in Lesbian, Gay, and
Process description: Biological treatment in a compact bioreactor containing small polymer foam cube media ‘Variopor’, followed by optional membrane filtration (the membrane
ITALY: staff 2,550 1 Headquarter Leather Goods: 4 production facilities Footwear 3 production facilities Ready To Wear 4 production facilities. UNITED KINGDOM:
It is essential to understand that the SIS , as well as any other scale that is designed to measure support needs, does not supplant the need for adaptive behavior scales or
For the initial analytics trend visualization, Figure 3 provides another aggregated data analytics summary of exam scores, task completion time, gender, academic level, and
The basic argument is that indebted taxpayers are better off if, instead of paying taxes to fund public pensions that earn the market return, they leave pensions unfunded, defer