Documente Academic
Documente Profesional
Documente Cultură
Îndrumător: Doctorand:
Prof. Univ. Dr. Ing. Florin SANDU Drd. George Alex STELEA
- Braşov 2018 –
2
Cuprins
1. INTRODUCERE .......................................................................................... 4
2. WEBRTC – WEB REAL TIME COMMUNICATIONS ............................ 6
2.1. Arhitectura WebRTC ........................................................................................ 7
2.2. API-ul WebRTC................................................................................................ 8
2.3. Semnalizarea în WebRTC ............................................................................... 21
2.4. Avantaje și motive pentru a folosi tehnologia WebRTC ................................ 22
2.5. Biblioteci si seturi de instrumente WebRTC .................................................. 24
2.6. Aplicabilitatea WebRTC ................................................................................. 26
2.1. Construirea unei aplicații WebRTC ................................................................ 27
2.2. Concluzii ......................................................................................................... 33
3. WEBSOCKETS .......................................................................................... 35
3.1. Prezentare generală ......................................................................................... 35
3.1. Socket.IO ......................................................................................................... 36
3.1. Socket.IO & NodeJS ....................................................................................... 37
3.1. WebSockets în Cloud ...................................................................................... 42
3.1.1. Google Cloud ............................................................................................ 42
3.1.1. Microsoft Azure - Windows Azure Web Sites ......................................... 44
3.1.1. Cloud Foundry .......................................................................................... 47
4. RECUNOAȘTEREA FACIALĂ ÎN CLOUD ........................................... 50
4.1. Tehnologii și implementare............................................................................. 51
4.1.1. OpenFace .................................................................................................. 51
4.1.1. Microsoft Azure Cognitive Services ........................................................ 57
4.1. Concluzii ......................................................................................................... 61
5. DIRECȚII DE CERCETARE..................................................................... 63
6. BIBLIOGRAFIE......................................................................................... 63
3
1. INTRODUCERE
Cloud Computing, tradus "calcul în nori" este un concept modern de tehnologii bazate
pe Internet, care oferă resurse de procesare a datelor si informațiilor computerizate.
Este un model construit pentru a permite accesul omniprezent și ubicuu, la cerere,
către un grup comun de resurse configurabile (de exemplu, rețele de calculatoare,
servere, spații de stocare, aplicații și servicii) care pot fi furnizate rapid și eliberate cu
un minim efort de management. Soluțiile de calcul și stocare în Cloud furnizează
utilizatorilor diferite capabilități pentru a-și stoca și procesa datele în centre de date
private sau terțe, care pot fi situate la distanță (de exemplu în alt oraș, sau în altă țară).
Cloud Computing se bazează pe partajarea resurselor pentru a obține o coerență
asemănătoare unei utilități într-o rețea informatică. Cloud Computing oferă mijloace
prin care se pot accesa aplicațiile ca utilități - ca servicii (as a service – ”-aaS”) – pe
Internet, permiţând crearea, configurarea și personalizarea aplicațiilor.
Termenul Cloud se referă la o rețea sau la Internet. Cu alte cuvinte, putem spune
despre "Cloud" că este ceva, care este prezent într-o locație îndepărtată. Cloud poate
furniza servicii prin intermediul rețelelor publice și private, adică WAN, LAN sau
VPN. Cloud Computing permite manipularea, configurarea și accesarea de la distanță
a resurselor hardware și software, oferind posibilitatea de stocare online a datelor,
acces la infrastructură și crearea/rularea de aplicații.
4
Cloud Computing oferă independență de platformă, deoarece software-ul nu este
necesar să fie instalat local pe PC. Prin urmare, Cloud Computing face ca aplicațiile
să fie mobile și colaborative.
5
2. WEBRTC – WEB REAL TIME
COMMUNICATIONS
API-ul WebRTC include opțiuni de captare media, codare și decodare audio și video,
metode de transport al informatiei și de management al sesiunii.
Comunicațiile web în tip real deschid ușa către o nouă gamă de aplicații, inclusiv
chat-uri bazate pe text, partajare de fișiere si ecran, jocuri online, video chat-uri și
multe altele. În afară de comunicare tehnologia WebRTC poate fi utilizată și pentru
alte scopuri, cum ar fi:
6
Publicitate în tip real (real-time advertising);
Sisteme de comunicații back office (CRM, ERP, SCM, FFM);
Managementul resurselor umane (HR management);
Sisteme de management educational (LMS - Learning Management Systems)
Rețele sociale;
Servicii matrimoniale;
Consultații medicale online
Servicii financiare;
Servicii de supraveghere (surveillance);
Jocuri multiplayer
Transmisiuni în direct (live broadcasting)
e-Learning
7
Arhitectura WebRTC
8
Stiva API-ului WebRTC
MediaStream API
Un flux media în timp real este reprezentat de un obiect flux sub formă de
video sau audio;
Acesta oferă un nivel de securitate prin permisiuni de utilizator solicitând
acceptul utilizatorului înainte ca o aplicație web să poată porni preluarea unui
flux;
9
Selectarea dispozitivelor de intrare este manipulată de către API MediaStream
(de exemplu, atunci când există două camere sau microfoane conectate la
dispozitiv).
Fiecare obiect MediaStream include mai multe obiecte de tip MediaStreamTrack, care
reprezintă fluxuri video și audio de la diferite dispozitive de intrare. Fiecare obiect
MediaStreamTrack poate include mai multe canale (de exemplu canalele audio
dreapta si stânga). Acestea sunt cele mai mici părți definite de API MediaStream.
10
MediaStream.ended − returnează true în cazul în care evenimentul a fost
încheiat, ceea ce înseamnă că fluxul a fost citit complet, sau false în cazul în
care nu a fost atins sfârșitul fluxului;
MediaStream.id − reprezintă un identificator unic pentru obiect;
MediaStream.label − reprezintă un identificator unic atribuit de către agentul
utilizator;
1. home.html
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
</style>
</head>
<body>
<div>
12
<video autoplay></video>
</div>
<script src="script.js"></script>
</body>
</html>
2. script.js
navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
function successCallback(stream) {
window.stream = stream;
if (window.URL) {
video.src = window.URL.createObjectURL(stream);
} else {
video.src = stream;
video.play();
function errorCallback(error){
13
În momentul execuției paginii home.html în navigatorul web se genereaza un pop-up
implicit în care utilizatorul este întrebat dacă dorește să partajeze accesul camerei web
locale cu navigatorul:
Dupa ce utilizatorul și-a dat consimțământul cu privire la accesul camerei web locale,
streaming-ul web este afișat în navigator:
14
În extensia Firebug a navigatorului se poate observa cum API-ul WebRTC a generat
un URL de tip blob pentru obiectul MediaStream.
RTCPeerConnection
var pc = RTCPeerConnection(configuratii);
În exemplul de mai sus argumentul "configuratii" trebuie să conțină cel puțin o cheie
de tip iceServers. Argumentul reprezintă o matrice de obiecte care conține informații
despre protocoalele de rețea TURN și STUN utilizate în găsirea candidaților ICE.
15
Mecanismul RTCPeerConnection folosește protocolul ICE (Interactive Connectivity
Establishment), împreună cu servere TURN (Traversal Using Relays around NAT) și
STUN (Session Traversal Utilities for NAT) pentru a asigura traversarea fluxurilor
media bazate pe UDP (User Datagram Protocol) prin firewall-uri și dispozitive de tip
NAT (Network Address Translation)
STUN (Session Traversal Utilities for NAT) este un set standardizat de metode,
inclusiv un protocol de rețea, pentru traversarea dispozitivelor NAT - Network
Address Translation (Translatarea Adreselor de Rețea) în aplicațiile de voce în timp
real, video, mesagerie, precum și alte comunicări interactive. STUN este un
instrument folosit de alte protocoale, cum ar fi Interactive Connectivity Establishment
(ICE) sau protocolul Session Initiation Protocol (SIP). Acesta oferă un instrument
pentru descoperirea prezenței unui IP în interiorul unei rețele care folosește un
translator de adrese de rețea. Protocolul necesită asistență de la un server de rețea de
tip terță parte (server STUN), situat de obicei public pe Internet.
16
de comunicare. ICE oferă, de asemenea, o măsură de securitate, deoarece împiedică
paginile web și aplicațiile nesigure sa trimităt date către gazde, care nu se așteaptă să
le primească.
17
RTCPeerConnection.localDescription − returnează un obiect
RTCSessionDescription care descrie sesiunea locală. Acesta poate fi null în
cazul în care nu a fost încă stabilit;
RTCPeerConnection.peerIdentity − returnează un obiect
RTCIdentityAssertion. Se compune dintr-un IDP (nume de domeniu) și un
nume care reprezintă identitatea peer-ului remote;
RTCPeerConnection.remoteDescription − returnează un obiect
RTCSessionDescription care descrie sesiunea remote (aflată la distanță). Acesta
poate fi null în cazul în care nu a fost încă stabilit;
RTCPeerConnection.signalingState − returnează un obiect
RTCSignalingState care descrie starea de semnalizare a conexiunii locale. Un
eveniment signalingstatechange este declanșat când această valoare se
modifică.
RTCDataChannel
18
Modul fiabil garantează transmiterea mesajelor, precum și ordinea în care
acestea sunt livrate. Acest mod necesită informații adiacente încapuslate în
pachetele transmise, ceea ce ar putea face acest mod mai lent;
Modul nefiabil nu garantează că fiecare mesaj va ajunge în cealaltă parte, nici
în ce ordine vor ajunge mesajele. Astfel, se elimină informa ț iile suplimentare
în pachetele transmise, făcând acest mod de lucru mult mai rapid.
19
RTCDataChannel.maxPacketLifeType − returnează lungimea în milisecunde
a timpului desfășurat în modul unreliable (nefiabil);
RTCDataChannel.maxRetransmits − numărul maxim de ori, pe care un
canal, va retransmite datele în cazul în care acestea nu sunt livrate;
RTCDataChannel.negotiated − returnează un boolean care indică dacă
canalul a fost negociat de către un utilizator-agent, sau de către aplicație;
RTCDataChannel.reliable − returnează un boolean care indică dacă o
conexiune poate trimite mesaje în modul reliable (fiabil);
RTCDataChannel.stream − omolog cu RTCDataChannel.id.
20
RTCDataChannel.close() − Închide canalul de date;
RTCDataChannel.send() − Transmite datele în parametrii prin canalul deschis
de către conexiune. Datele pot fi de forma "blob", șir de caractere,
"ArrayBuffer" sau "ArrayBufferView".
21
2.4. Avantaje și motive pentru a folosi tehnologia
WebRTC
Este gratis - WebRTC este un API open-source, propus pentru prima dată de către
Google în 2011. Obiectivul Google pentru WebRTC este de a oferi un motor
media bazat pe standarde în timp real, care este liber și rezident în toate browserele
disponibile;
Este independentă de dispozitive si platforme - Orice browser cu suport
WebRTC pe orice sistem de operare poate crea o conexiune în timp real către un
alt dispozitiv WebRTC sau către un server media WebRTC. Sistemul de operare
pe care este instalat browser-ul nu este relevant deoarece WebRTC lucrează cu
API-uri standard de la W3C și protocoale IETF;
Transfer de date audio/video securizat - Protocolul Secure RTP (SRTP) este
utilizat pentru criptare și autentificare atât a fluxurilor audio cat și video. Acest
lucru este benefic în special în rețelele WiFi, deoarece previne interceptarea și
înregistrarea vocii și a fluxurilor video;
Calitate avansată audio si video - WebRTC folosește codecul audio Opus care
produce voce de înaltă fidelitate. Codec-ul VP8 este utilizat pentru video. Aceste
codecuri asigură interoperabilitatea și evitarea necesității de a descărca alte
codecuri care pot conține cod dăunător;
Sistem de încredere pentru stabilirea sesiunii - WebRTC folosește conceptul de
Reliable Session Establishment care reduce latența, crește calitatea și evită
încărcarea serverului;
Fluxuri media multiple - WebRTC este o soluție adaptivă de rețea care se
ajustează la schimbarea condițiilor de rețea (WebRTC ajustează calitatea
comunicațiilor, răspunde la lățime de bandă disponibilă, detectează si evită
22
congestionarea). Acest lucru se realizează cu ajutorul protocoalelor RTP Control
Protocol (RTCP) și Secure Audio Video Profile with Feedback (SAVPF);
Adaptarea la condițiile de rețea – WebRTC suportă negocierea a multiple
obiecte media. Acest lucru produce o utilizare eficientă a lățimii de bandă oferind
cele mai bune posibilități de comunicații de voce și video. API-urile de
semnalizare pot negocia dimensiunea și formatul pentru fiecare punct (peer) în
mod individual;
Interoperabilitatea cu VoIP - acesta include dispozitivele care utilizează SIP,
Jingle, XMPP, și PSTN;
Dezvoltarea rapidă a aplicațiilor - Dezvoltatorii vor experimenta un proces de
dezvoltare simplificat care reduce timpul de implementare a aplicațiilor.
Cunoștințe detaliate despre WebRTC nu sunt necesare datorită API-urilor
standardizate, iar codecurile audio și video sunt open-source. Într-o lume aflata în
continua mișcare posibilitatea de a construi rapid și sigur aplicații poate să devină
un atu important în creșterea sectorului business. Cu ajutorul WebRTC si a
tehnologiilor încorporate direct în browser-ul web se permite implementarea
rapidă de solutii și dezvoltarea de noi aplicații scalabile, care pot fi accesate
instantaneu de către utilizatori;
Comunicatii incorporate (Embedded communication) - deoarece browserele
web folosesc protocoalele HTTP (HyperText Transfer Protocol) și HTTPS (HTTP
Secure) împreună cu libajul de markup HTML (HyperText Markup Language)
care reprezintă formatul informațiilor afisate, tehnologia WebRTC poate fi
integrată oriunde, nu numai pe browserele web. Deorarece tehnologia web este
reprezentată de abilitatea de a prelua informatii de la serverele web pentru a le
interpreta si afișa, aceasta poate fi integrată in aproape orice (inclusiv in aplicații
native de pe smartphone-uri sau alte dispozitive moderne);
23
Virusi, Malware, Ransomware si spionaj industrial - Utilizatorii sunt si devin
din ce in ce mai reticenti in descărcarea de plugin-uri și instalarea de noi programe,
in companii se practica blocarea sistemelor, care nu permit angajaților să instaleze
programe fără acceptul organizației, deoarece descărcarea si rularea de programe
pot deschide riscuri de securitate, ceea ce poate duce la o supraaglomerare a
departamentului IT. Cu tehnologia WebRTC costurile cu departamentul IT pot fi
reduse, fara mai a avea griji cu privire la descărcarea de programe (software) noi,
deoarece tehnologiile necesare pentru comunicare sunt construite nativ în browser-
ul web si in protocolul pe care acesta il folosește. În comunicarea WebRTC
criptarea semnalizarilor se poate realiza folosind DTLS (Datagram Transport
Layer Security) iar fluxurile media pot fi criptate folosind SRTP (Secure Protocol
de Transport în timp real) pentru evitarea atacurilor de tip "man-in-the-middle";
Internetul lucrurilor (IoT - Internet of Things) este conceptul care presupune
controlul prin intermediul Internetului a dispozitivelor active (si conectate la
Internet) care ne inconjoara precum telefoane mobile (smartwatches), aparatura
electrocasnica, sisteme de iluminat și chiar automobile. Tehnologia WebRTC
poate oferi conectivitate rapida, acces facil la date si interconectarea ecosistemelor
generând costuri mai mici și optimizând eficiența utilizării resurselor.
24
de cod, biblioteci și componente de server, scrise și documentate pentru acces si
dezvoltare facila.
adapter.js este o bibliotecă care, pentru fiecare versiune a fiecărui browser care
acceptă WebRTC, implementează blocurile de cod necesare, stabilește denumirile
non-prefixate de API-uri, și aplică modificările necesare pentru a face browser-ul
sa ruleze corespunzator codul sursa conform specificatiilor WebRTC.
simpleWebRTC este o bibliotecă compusă din mai multe module independente
precum:
o Signalmaster - server de semnalizare alimentat de node.js/socket.io;
o RTCPeerConnection - normalizează conexiunile peer.
o getUserMedia - normalizează obținerea de acces la camera/microfonul
utilizatorului
o attachMediaStream - normalizează adăugarea de fluxuri la reprezentările
video și gestionează elementele muting/mirroring într-un singur API
simplu.
o webrtcsupport - verifică capacitățile navigatorului si suportul pentru
canalele de date precum si managementul constructorilor pentru
RTCPeerConnection și RTCSessionDescription;.
o getScreenMedia - extinde metoda getUserMedia pentru accesul la ecranul
dispozitivului (screensharing).
o mediastream-gain - oferă un controler de volum pentru intrarile audio
(audio input).
o WildEmitter - este un emitator de evenimente cu suport pentru
metacaractere.
Socket.IO este o bibliotecă JavaScript care asigură comunicarea bidirecțională în
timp real bazată pe evenimente. Este o bibliotecă multi-platformă, multi-browser si
multi-dispozitiv, concentrându-se în mod egal asupra fiabilității și vitezei.
25
rtc.io este o colecție de module node.js care simplifică dezvoltarea WebRTC
oferind diferite caracteristici precum:
o acces la camera web si microfonul local;
o creare de apeluri audio si video intre browsere;
o creare de canale de date intre browsere;
o asigurare management-ului de comunicare;
o creare server-ului de semnalizare.
ShareFest este un instrument construit pe canalele de date ale API-ului WebRTC
folosit pentru partajarea peer-to-peer a fisierelor;
Hoodie este un set de instrumente cu o arhitectura "offline-first" si fara back-end,
scrisa in JavaScript si NodeJS, bazata pe CouchDB. Hoodie ofera o serie de
unelte precum stocare de date, inregistrare si adminsitrare de utilizatori, e-mail-uri,
plati online sau sincronizari.
26
sa completaze o cerere. Pacientul poate să acceseze o pagină web și să aibă acces
imediat (în timp real) la servicii medicale prin apăsarea unui buton;
Social media - rețelele sociale continuă să crească rapid, creând o piață mare
pentru aplicații și produse noi. Majoritatea platformelor populare de social media
au început deja să utilizeze și să adapteze WebRTC.
27
Modulul de control al apelurilor: în Node.js, toate modulele exportă elemente care
pot fi ușor apelate oriunde în cod, iar pentru logare este utilizată o instanță a
modulului Express. Express este un modul rapid de dezvoltare web care oferă diferite
funcții pentru vizualizare, testare, rutare, dar și pentru generarea de aplicații
executabile.
După apelarea funcției logger, funcția app.get este utilizată pentru a obține utilizatorii
din baza de date cu subprogramul user.js. Funcția app.get este structurată ca „rută ->
răspuns” și este utilizată pentru rutarea punctelor finale (URI) și pentru răspunsul la
cererea clientului prin metoda HTTP GET.
Subprogramul user.js, care este driver-ul soluției software, conectează aplicația web
și creează un număr de variabile Java Script pe care le conectează în diferite pachete,
dependențe, funcții sau rute.
Functia logon()
28
Cea de-a doua operație după autentificare este preluarea conversațiilor utilizatorilor.
Pentru excepții, funcția catch este utilizată pentru a verifica dacă logarea are loc cu
succes sau dacă numele de utilizator sau parola sunt incorecte. Funcția logout
dezactivează modulul Client, revenind la pagina originală.
Functia addClientEventListeners()
Subprogramul index.js conține funcția cerere-răspuns care exportă pagina web care
include aplicația. De asemenea se genereaza serverul virtual care găzduiește aplicația
(ex: https://localhost:8080)
29
Functia addClientEventListeners()
Un alt aspect de conectare este adăugarea tag-ului <script> care conține elementele
de sub-interfață index.ejs. Etichetele se referă fie la un link, la un tip de document
script, fie la un fișier client.js local. Codul din figura următoare conectează interfața
index.ejs la toate subprogramele programului principal numit client.js.
Interfata index.ejs
Gestionarea fluxului: funcția start() verifică mai întâi dacă utilizatorul este logat și
creează variabile de timp, apoi este selectată o conversație iar streaming-ul media este
pornit. Funcția join() verifică dacă utilizatorul este conectat, crează variabile pentru
tipurile de suporturi media și permite utilizatorului să aleagă o conversație. Pentru a
participa la o conversație, funcția trebuie să aibe starea "started". Funcția leave() are
aceleași elemente ca și funcția join(), dar în funcție de ID-ul conversației, elimină
utilizatorul din conferință. Schimbarea stării conferinței la încheierea acesteia are loc
prin intermediul funcției updateList(calll) așa cum este prezentat în imaginea de mai
jos:
30
Functia updateList()
Functia setCallUI()
Când se inițiază conectarea la o conversație, fluxul audio și video este activat automat
și trimis la funcția onVideoChange(). Funcția resetCallUI(), prezentată în imaginea de
31
mai jos, este apelată pentru fiecare schimbare făcută de alte funcții în timp ce se
acceseaza aplicația sau conversația:
Functia resetCallUI()
Functia updateButtons(), prezentată mai jos, se referă la butonul care își schimbă
textul în funcție de starea conversației. Dacă o conferința a început deja, funcția va
afișa "Join" iar dacă un utilizator inițiază conferința, funcția va afișa "Start" și va
ascunde butonul "Start". Când conferința nu este pornită, funcția va ascunde butonul
"Exit conference".
Functia updateButtons()
32
2.8. Concluzii
33
Costache - Editura Universității Transilvania din Brașov – 2016 – ISBN: 978-606-
19-0820-2:
34
3. WEBSOCKETS
Comunicațiile sunt efectuate pe portul TCP 80, lucru benefic pentru rețelele care
blochează conexiunile la Internet de tip non-web print-un firewall. Protocolul
35
WebSocket este suportat în prezent de majoritatea navigatoarelor web populare
precum Google Chrome, Microsoft Edge, Internet Explorer, Firefox, Safari sau Opera.
3.2. Socket.IO
Socket.IO este o bibliotecă JavaScript pentru aplicații web în timp real. Aceasta
permite comunicarea bidirecțională în timp real între clienți și servere web. Socket.IO
este format din două părți: o bibliotecă client-side care se execută în browser-ul web și
o bibliotecă de server-side pentru Node.js. Ambele componente au un API aproape
identic. La fel ca Node.js, Socket IO, are o structură de bazată pe evenimente.
Socket.IO este o bibliotecă JavaScript pentru aplicații web în timp real. Aceasta
permite comunicarea bidirecțională în timp real între clienți și servere web. Socket.IO
este format din două părți: o bibliotecă client-side care se execută în browser-ul web și
o bibliotecă de server-side pentru Node.js. Ambele componente au un API aproape
identic. La fel ca Node.js, Socket IO, are o structură de bazată pe evenimente.
37
pentru aplicații web în timp real (ex: programe de comunicare în timp real, chat-uri
etc.).
Caracteristici:
Următoarele sunt câteva dintre caracteristicile importante care fac Node.js să fie una
din primele alegeri ale arhitecților software:
38
răspunde solicitărilor, astfel poate furniza servicii unui număr mult mai mare de
cereri decât serverele tradiționale, cum ar fi serverul HTTP Apache;
Nu există buffering - Aplicațiile Node.js nu "tamponează"(buffer) niciodată
date, acestea fiind transmise în bucăți;
Licență de tip sursă deschisă - Node.js este un software open-source sub
licența MIT.
eBay;
General Electric;
GoDaddy;
Microsoft;
PayPal;
Uber ;
Yahoo!;
Yammer etc.
Aplicații I/O;
Aplicații de streaming de date;
Aplicații în timp real (DIRT - Data-Intensive Real-Time);
Aplicații bazate pe JSON API;
Aplicații de tip one-page.
39
Ce este un "Callback"?
Node.js folosește evenimentele în mod intensiv, acest lucru este unul dintre motivele
pentru care Node.js este mai rapid în comparație cu alte tehnologii similare. În
momentul în care Nod.js pornește serverul, acesta își inițiază variabilele, declară
funcțiile și apoi "așteaptă" pur și simplu ca un evenimentul să apară.
Într-o aplicație bazată pe evenimente, există în general, o buclă principală care ascultă
evenimentele și apoi declanșează
40
Biblioteca Socket.IO folosită pe un server HTTP Node.js:
app.listen(80);
res.writeHead(200);
res.end(data);
});
}
<script src="/socket.io/socket.io.js"></script>
<script>
41
var socket = io('http://localhost');
socket.on('mesaj', function (data) {
console.log(data);
socket.emit('un nou eveniment', { my: 'data' });
});
</script>
Platforma Google Cloud oferă un Load Balancer (echilibrator de încărcare) TCP care
este utilizat ca punct de intrare public al rețelei. Traficul se va „echilibra” între mai
multe instanțe HAProxy.
Configurarea HAProxy:
frontend public
bind *:80
maxconn 10000
acl is_websocket hdr_end(host) -i ws.node-example.com
use_backend ws if is_websocket
default_backend www
backend www
timeout check 5000
option httpchk GET /status?haproxy=1
balance roundrobin
server www1 10.142.0.3:3001 maxconn 1000 weight 10 check inter 10000 rise 1
fall 3
server www2 10.142.0.6:3001 maxconn 1000 weight 10 check inter 10000 rise 1
fall 3
43
server a fost folosit, apoi utilizează acel cookie pentru a alege același server pentru
solicitările ulterioare.
backend ws
timeout check 5000
option httpchk GET /status?haproxy=1
balance roundrobin
cookie HAPROXY_WS_COOKIE insert indirect nocache
server ws1 10.142.0.4:3002 maxconn 1000 weight 10 check inter 10000 rise 1
fall 3 check cookie ws1
server ws2 10.142.0.7:3002 maxconn 1000 weight 10 check inter 10000 rise 1
fall 3 check cookie ws2
Încă din 2013 Azure Web Sites a adăugat suport pentru protocolul WebSocket. Atât
dezvoltatorii .NET, cât și dezvoltatorii Node.js pot activeza și utilizeze WebSockets în
aplicații. Opțiunea de activare a suportului WebSockets se află în fila „Configure” a
panoului Azure, dupa cum urmează:
44
Odată ce WebSockets a fost activat, se pot utiliza biblioteci, frameworks și API-uri
pentru a lucra cu WebSockets.
45
Pachet Distribuit: (35) conexiuni concurente pentru fiecare instanță de aplicație
web
Pachet De bază: (350) conexiuni concurente per instanță de aplicație web
Pachet Standard: fără limită
Dacă aplicația încearcă să deschidă mai multe conexiuni WebSocket decât limita
admisă, Windows Azure va returna un cod de stare de eroare 503 HTTP.
Există o singură privință pe care dezvoltatorii ar trebui să țină cont atunci când
lucrează cu WebSockets. Deoarece protocolul WebSockets se bazează pe anumite
antete HTTP mai puțin folosite, în special antetul Upgrade, nu este neobișnuit ca
dispozitivele de rețea intermediare, cum ar fi proxy-urile Web, să desființeze aceste
antete. Soluția pentru a rezolva această problemă este stabilirea conexiunii
WebSockets prin SSL. Cei doi pași pentru a realiza acest lucru sunt:
Windows Azure acceptă SSL chiar și pe aplicatiile web gratuite, utilizând un certificat
SSL implicit pentru *.azurewebsites.net. Ca urmare, nu este necesară configurarea
propriului certificat SSL pentru a utiliza soluția. Exista, de asemenea, posibilitatea de
a înregistra domenii personalizate cu configurarea de certificate SSL bazate pe IP.
Mai multe detalii despre configurarea domeniilor personalizate și a certificatelor SSL
46
cu site-urile Web Windows Azure sunt disponibile pe site-ul web al documentației
Windows Azure:
https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-
custom-domain
https://docs.microsoft.com/en-us/azure/app-service/app-service-web-tutorial-
custom-ssl
Pentru a implementa aplicația în mediul Cloud Foundry, este nevoie de crearea unui
fisier de tip manifest.yml:
---
47
applications:
- name: websocket_cf
command: node server.js
buildpack: https://github.com/cloudfoundry/nodejs-buildpack
health-check-type: none
memory: 256M
random-route: true
Se foloseste linia de comandă (CMD, Terminal, ...) pentru a naviga la dosarul unde
sunt create fișierele server.js, package.json și manifest.yml:
> cd /folder/to/the/manifest/
> cf login
> cf push
48
O descriere amănunțită a tehnologiilor bazate pe WebSockets sunt publicate în
capitolul „COMUNICAȚII WEB ÎN TIMP REAL - WebSockets” din monografia
"Programarea în Internet, mediu distribuit și Cloud " - George-Alex STELEA,
Florin SANDU, Livia SANGEORZAN - 448 Pagini, Editura Universității Transilvania
din Brașov – 2017 – ISBN: 978-606-19-0949-0:
49
4. RECUNOAȘTEREA FACIALĂ ÎN CLOUD
Perspectiva utilizării solutiei cercetate este orientată mai mult pe testarea inteligentă
bazată pe comunicații în timp real, cu „clienți subțiri” și afișare a fețelor încorporate
în browserele obișnuite, dar cu analize puternice de date în Cloud, pentru autentificare
sau clasificare. Conceptul de recunoaștere a feței este frecvent în sistemele de
securitate și comparațiile se fac cu alte date biometrice furnizate prin recunoașterea
amprentelor digitale sau prin recunoașterea irisului ocular. Recent, recunoașterea feței
a devenit populară ca instrument comercial de identificare și comercializare, prin
urmare poate juca un rol cheie în sistemele de analiză, statistică și eLearning, unde
imaginile faciale sunt înregistrate încă de la începutul proceselor educaționale. Un caz
important de utilizare este autentificarea - pentru orice fază oficială de testare
50
inteligentă, de exemplu. VUE(Virtual University Enterprises) - mediile universității
virtuale ar trebui să beneficieze în mare măsură de recunoașterea feței, în special
pentru examene de certificare, dar și pentru înregistrarea bazată pe WebRTC a
oricărei contribuții personale într-o dezbatere video multipartită (clasa deschisă).
Soluțiile prezentate sunt bazate pe Cloud, folsind "clienți subțiri – eng: thin clients"
(tablete sau smartphone-uri) și fără dependențe computaționale localizate - de
exemplu, simplul streaming al camerei web spre afișare în browserele obișnuite prin
WebRTC lasă ca toate procesele de fundal pentru analiza datelor sa se efectueze in
Cloud, folosind concepte de Machine Learning/Deep Learning. Recunoașterea este
implementată cu metode de rețea neuronală Tensorflow/OpenFace/Microsoft Azure
Cognitive Services, utilizând Python, Torch, OpenCV și Face API.
4.1.1. OpenFace
51
3. Reprezentarea feței pe o hipersferă 128-dimensională utilizând rețele neuronale
profunde (deep neural networks.)
OpenFace poate fi descărcat de pe GitHub și poate fi instalat manual sau prin Docker
folosind următoarea comandă:
PIP este un sistem de gestionare a pachetelor creat pentru a gestiona și instala liste de
pachete software scrise în limbajul de programare Python. În figurile de mai jos este
prezentată configurația sistemului de gestionare a pachetelor PIP în sistemul de
operare Ubuntu Linux:
52
Comanda sudoeasy_install pip in Linux CLI
53
asemenea, subpachete cum ar fi: cluster, weave, sparse, ndimage, linalg,
constants sau fftpack.
Scikit-learn este o bibliotecă open source utilizată pentru machine learning care
include mai mulți algoritmi pentru clasificare, grupare sau regresie folosind
support vector machines, k-means, random forests, DBSCAN etc. Biblioteca
Scikit-learn este construită pentru a lucra împreună cu extensia NumPy și
biblioteca SciPy pentru aplicații de data mining și analize de date.
Scikit-image este folosit pentru procesarea imaginilor și include diversi
algoritmi pentru transformările geometrice, filtrarea, segmentarea, detectarea
caracteristicilor, manipularea și analiza spațiului de culoare. Biblioteca Scikit-
image este construită pentru a funcționa împreună cu extensia NumPy și
biblioteca SciPy și este open-source.
OpenCV este o bibliotecă inter-platformă și open-source, atât pentru uz
comercial, cât și academic, construită pentru a lucra cu achiziționarea,
procesarea, analiza și înțelegerea în timp real a materialelor video sau
imaginilor digitale. Biblioteca OpenCV oferă suport pentru dezvoltarea de
aplicații dedicate: recunoașterii faciale, recunoașterii gesturilor, interacțiunii
om-calculator, urmăririi mișcării, realității augmentate sau estimării emoțiilor.
Torch este o bibliotecă open-source și un cadru de lucru (framework) de tip
deep machine learning, oferind diverși algoritmi care lucrează cu matrice N-
dimensionale, rețele neuronale, algebra liniara și rutine de optimizare numerică.
54
Accesul la camera web este realizat prin interfața nativa WebRTC MediaStream API,
care a fost concepută pentru accesul facil la fluxurile media de la camere web sau
microfoane locale folosind obiecte HTML5 și JavaScript.
Când utilizatorul intră în aplicație, browserul web generează un pop-up implicit unde
utilizatorul este întrebat dacă dorește să acorde accesul la camera web:
Odată ce utilizatorul și-a dat acordul pentru accesul la camera web locală, streaming-
ul web este afișat în browser și poate începe analiza recunoașterii feței, așa cum este
prezentat în imaginea urmatoare:
55
Setul de date privind antrenamentul pentru recunoașterea feței este în Cloud și poate fi
procesat cu ajutorul bibliotecii software TensorFlow pentru machine learning sau a
altor sisteme și algoritmi de rețele neuronale de deep learning (“învățare profundă”).
56
4.1.2. Microsoft Azure Cognitive Services
Una dintre cele mai remarcabile caracteristici ale serviciilor Microsoft Azure
Cognitive este Face API. Face API este un serviciu bazat pe Cloud, care utilizează
algoritmi avansați și mecanisme de deep learning pentru a asigura două funcții
principale: detectarea feței folosind atribute și recunoașterea feței.
Unul dintre cele mai remarcabile avantaje ale Microsoft Face API este că, pe
lângă recunoașterea reală a feței, poate oferi și informații valoroase despre emoțiile
subiectului și poate organiza chipurile împreună în grupuri, pe baza asemănării lor
vizuale. Având la dispoziție aceste date brute, pot fi realizate diverse studii statistice
care pot oferi informații importante despre impactul unui curs sau pot cum poate
57
Universitatea să îmbunătățească un anumit program de studiu. Procesul de dezvoltare
și implementare a unei astfel de aplicații este relativ simplu si direct, deoarece este în
întregime bazat pe Cloud. Trebuie să se creeze un cont Microsoft Azure și, din tabloul
de bord, să se selecteze tipul de aplicație și resursele necesare.
detectarea feței cu
urmărirea emoțiilor și
aproximarea vârstei,
identificarea feței și
verificarea feței.
58
Exemplu de identificare a feței.
59
Exemplu de identificare a feței cu rezultate pozitive
60
Pentru toate caracteristicile, aplicația utilizează imagini statice, dar fără eforturi
semnificative, acest lucru poate fi schimbat într-un flux live capturat și transmis către
masina virtuală printr-o cameră IP. În acest fel, se poate efectua o analiză în timp real
și pot fi furnizate statistici foarte precise, în funcție de criteriile vizate.
4.2. Concluzii
61
API-urile și standardele WebRTC vor democratiza și descentraliza instrumentele
pentru crearea de conținut și comunicare - pentru telefonie, jocuri, producție video,
producție de muzică, colectarea știrilor și multe alte aplicații. WebRTC va avea un
impact deosebit asupra tehnologiilor web deschise și interoperabile ale browser-ului,
inclusiv a soluțiilor enterprise existente.
Pe scurt, Cloud Computing are multe beneficii, dar are și o serie de probleme
specifice care ar putea fi ridicate. Atunci când sunt stocate în centrul mare de date din
întreaga lume, datele ar putea deveni o țintă pentru atacurile hackerilor sau ar putea fi
utilizate în mod greșit de către angajații furnizorilor de servicii de Cloud Computing.
În plus, stocate în locații diferite, datele ar putea fi supuse altor legislații locale pe care
proprietarii lor nu le cunosc. De asemenea, profesioniștii implicați în Cloud
Computing trebuie să se asigure că acesta nu devine un serviciu pe care doar câțiva
utilizatori îl pot folosi.
Cloud-ul reprezintă unul dintre cele mai semnificative schimbări al modului de calcul
și procesare de date, astfel nu se mai trimit datele la proces ci procesele sunt trimise la
masivele de date. Pe măsură ce ne mutăm spre "nor", vom descoperi o nouă lume
bazată pe servicii, unde mulți termeni care au fost o dată comuni în departamentele IT
locale (cum ar fi servere, centre de date, sisteme de operare, middleware și clustering)
vor dispărea.Cloud Computing a ajutat deja companiile să-și sporească performanța și
va juca un rol important în asigurarea competitivității în mediul business de mâine.
Cei care continuă să respingă soluțiile Cloud, nefiind flexibili, siguri sau suficient de
buni, vor eșua sub apăsarea propriilor costuri IT și a lipsei de agilitate.
62
Soluția și conceptul prezentate în acest capitol au fost publicate în: "Face Recognition
for Education in the Cloud ", George-Alex STELEA, Cristinel GAVRILA, Florin
ZAMFIR, Radu CURPEN - eLSE: International Scientific Conference - eLearning and
Software for Education - 2017, Vol. 2, p181-188. 8p. - doi.org/10.12753/2066-026x-17-
111 - Bucuresti- Aprilie 2017
5. DIRECȚII DE CERCETARE
6. BIBLIOGRAFIE
Salvatore Loreto, Simon Pietro Romano, Real-Time Communication with WebRTC, O’Reilly
Media, Inc., 2014, ISBN: 978-1-449-37187-6;
Alan B. Johnston, Daniel C. Burnett, WebRTC: APIs and RTCWEB Protocols of the HTML5 Real-
Time Web, Digital Codex LLC, 2014, ISBN: 978-0985978860;
63
Ruben Picek, Samuel Picek, WebRTC Multipoint Web Real-Time Communication, Springer
International Publishing, 2014, ISBN: 978-3-319-07214-2;
Andrew Lombardi, WebSocket: Lightweight Client-Server Communications, O’Reilly Media, Inc.,
2015, ISBN: 978-1449369279;
Siani Pearson, George Yee, Privacy and Security for Cloud Computing, Springer-Verlag London,
2013, ISBN: 978-1-4471-5793-9;
Mike Cantelon, Marc Harter, T.J. Holowaychuk, Nathan Rajlich, Node.js in Action, Manning
Publications Co., 2013, ISBN: 9781617290572;
Azat Mardan, Practical Node.js: Building Real-World Scalable Web Apps, Apress, 2014, ISBN:
978-1430265955;
John D. Kelleher, Brian Mac Namee, Fundamentals of Machine Learning for Predictive Data
Analytics, MIT Press. 2016 - ISBN: 978-0262029445
Stan Z. Li, Anil Jain, Handbook of Face Recognition, Springer, 2nd ed. 2011 - ISBN: 978-
0857299314
Shai Shalev-Shwartz, Shai Ben-David, Understanding Machine Learning: From Theory to
Algorithms, Cambridge University Press , 2014 - ISBN: 9781107057135
Ian Goodfellow, YoshuaBengio, Aaron Courville, Deep Learning, MIT Press, 2016 - ISBN: 978-
0262035613
Nishant Shukla, Machine Learning with TensorFlow, MEAP - Manning Publications, 2016 - ISBN:
9781617293870
OpenFace - Free and open source face recognition with deep neural networks,
https://cmusatyalab.github.io/openface/, Accessed. 2018
https://github.com/Microsoft/Cognitive-Face-Windows, Accessed 2018
64