(Aplica ție pentru îmbun ățire stare dispozi ție persoan ă ) [613649]
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRIC Ă ȘI
TEHNOLOGIA INFORMAȚIEI
DEPARTAMENTUL TEHNOLOGIA INFORMAȚIEI
FORMĂ DE ÎNVĂȚĂMÂNT IF
Lucrare de diplomă
(Aplica ție pentru îmbun ățire stare dispozi ție persoan ă )
Coordonator științific : Absolvent: [anonimizat]. Daniela -Elena Popescu Cornea Ionu ț – Daniel
ORADEA 2018
UNIVERSITATEA DIN ORADEA
FACULTATEA de Inginerie Electrică și Tehnologia Informației
DEPARTAMENTUL __________________________________________________
TEMA_________
Lucrare de Finalizare a studiilor a student: [anonimizat]________________________
1). Tema lucrării de finalizare a studiilor:____________________________________________
_______________________________________________________________________________
_______________________________________________________________________________
2). Termenul pentru predarea lucrării ______________________________________________
3). Elemente inițiale pentru elaborarea lucrării de finalizare a studiilor _______________ ___
________________________________________________________________________________
________________________________________________________________________________
4). Conținutul lucrării de finalizare a studiilor :_______________________________________
________________________________________________________________________________
________________________________________________________________________________
________________________________________________________________________________
____________ ____________________________________________________________________
5). Material grafic:________________________________________________________________
________________________________________________________________________________
_____________________ ___________________________________________________________
6). Locul de documentare pentru elaborarea lucrării:
________________________________________________________________________________
______________________________________________________________ __________________
7). Data emiterii temei_____________________________________________________________
Coordonatori științifici
(titlul științific și numele ) ,
Cuprins
1. Introducere ………………………….. ………………………….. ………………………….. ………………………….. …………… 1
1.1 Contextul proiectului ………………………….. ………………………….. ………………………….. …………………….. 1
1.2 Motivul alegerii și scopul proiectului ………………………….. ………………………….. ………………………….. .. 2
2. Tehnologii folosite ………………………….. ………………………….. ………………………….. ………………………….. …. 3
2.1 Java ………………………….. ………………………….. ………………………….. ………………………….. …………………. 3
2.2 JavaFX ………………………….. ………………………….. ………………………….. ………………………….. ……………… 4
2.3 AWT ………………………….. ………………………….. ………………………….. ………………………….. ………………… 5
2.4 Swing ………………………….. ………………………….. ………………………….. ………………………….. ………………. 5
2.5 Json ………………………….. ………………………….. ………………………….. ………………………….. ………………… 6
2.6 CSS ………………………….. ………………………….. ………………………….. ………………………….. ………………….. 6
2.7 MySQL ………………………….. ………………………….. ………………………….. ………………………….. …………….. 8
2.8 Hibernate ………………………….. ………………………….. ………………………….. ………………………….. ………… 9
2.9 Protocolul HTTP ………………………….. ………………………….. ………………………….. ………………………….. 10
2.10 Tomcat ………………………….. ………………………….. ………………………….. ………………………….. ………… 12
2.11 Face API ………………………….. ………………………….. ………………………….. ………………………….. ……….. 12
3. Mediul de d ezvoltare ………………………….. ………………………….. ………………………….. ……………………….. 13
3.1 Spring Tool Suite (STS) ………………………….. ………………………….. ………………………….. …………………. 14
3.2 MySQL Workbench ………………………….. ………………………….. ………………………….. ……………………… 14
3.3 SceneBuilder ………………………….. ………………………….. ………………………….. ………………………….. ….. 15
3.4 Android Studio ………………………….. ………………………….. ………………………….. ………………………….. .. 15
3.5 Arhite ctură Android ………………………….. ………………………….. ………………………….. …………………….. 17
4. Aspecte tehnice legate de implementarea aplicației ………………………….. ………………………….. ………… 19
4.1 Schema și utilizatorii aplicației ………………………….. ………………………….. ………………………….. ………. 19
4.2 Implementarea bazei de date ………………………….. ………………………….. ………………………….. ……….. 22
4.3 Proiectarea bazei de date ………………………….. ………………………….. ………………………….. …………….. 23
4.4 Descrierea structurii aplicației ………………………….. ………………………….. ………………………….. ………. 24
4.5 Autentificarea și notifi carea ………………………….. ………………………….. ………………………….. ………….. 27
4.6 Procesarea imaginii și comunicarea cu FaceApi ………………………….. ………………………….. …………… 28
4.7 Rulare joc/ video în funcție de procentul de tristețe ………………………….. ………………………….. …….. 29
4.8 Apariția username -ului logat și salvarea limbii selectate la închiderea și repornirea aplicației ……. 30
4.9 Setarea anumitor funcționalități și căile de acces ………………………….. ………………………….. ………… 31
4.10 Folosirea request -ului HTTP pentru a face legătura cu aplicația Android ………………………….. …… 31
4.11 Specificații genera le ale aplicației Android ………………………….. ………………………….. ………………… 33
4.12 Implementarea jocului Puzzle ………………………….. ………………………….. ………………………….. ……… 34
5. Utilizarea aplicației ………………………….. ………………………….. ………………………….. ………………………….. . 37
5.1 Modul de utilizare al aplicației și o scurtă previzualizare a acesteia ………………………….. ……………. 37
5.2 Fereastra de înregistrare ………………………….. ………………………….. ………………………….. ………………. 39
5.3 Fereastra principală ………………………….. ………………………….. ………………………….. …………………….. 39
5.4 Fereastra de monitorizare ………………………….. ………………………….. ………………………….. ……………. 41
5.5 Setarea aplicației ………………………….. ………………………….. ………………………….. …………………………. 42
5.6 Verificarea incidentelor ………………………….. ………………………….. ………………………….. ………………… 43
5.7 Pornirea camerei de filmat cu ajutorul aplicației Android ………………………….. ………………………….. 45
6. Concluzie ………………………….. ………………………….. ………………………….. ………………………….. …………….. 46
6.1 Posibile dezvoltări viitoare ………………………….. ………………………….. ………………………….. ……………. 46
Bibliografie ………………………….. ………………………….. ………………………….. ………………………….. ……………… 47
1
1. Introducere
1.1 Contextul proiectului
Supravegherea unui/unor copil/copii în momentul în care aceștia sunt lăsați singuri acasă
pentru o perioadă mai lungă ori fie ea mai scurtă de timp reprezintă o activitate cât se poate de
serioasă, mai ales în cazul copiiilor de vâ rstă fragedă. Copiii, în special cei mici sunt impredictibili
iar starea lor emoțională se schimbă deseori și din neatenție sau joacă pot să se lovească sau să
spargă diferite obiecte din casă.
Așadar soluția pentru a evita aceste posibile scenarii ar fi ca ei să fie supravegheați sau cel puțin
copiii să aibă o activitate în timpul în care părinții/ fratele/ sora ori persoana care are grijă de ei nu
sunt prin preajmă.
Tema mea de proiect de diplomă îmbină aceste două nevoi și anume „supravegherea și faptu l ca
ei să fie ocupați cu o activitate anume, în timpul în care nu sunt supravegheați de o persoană umană.
Aplicația aceasta a fost concepută cu acest scop, iar utilizarea ei poate să reducă astfel de
posibile incidente descrise mai sus. Pe scurt concept ul acestei aplicații este de a supraveghea copiii
cu ajutorul unei camere de filmare video ori chiar cu ajutorul unei camere Web (în cazul de față).
Cu ajutorul algoritmului FaceAPI dezvoltat de Microsoft Corporation aplicația poate detecta starea
emoționa lă a persoanei, iar când această persoană arată o stare de tristețe pe chipul ei, algoritmul
va lăsa aplicația să știe că un incident a avut loc, iar pentru a îmbunătății starea persoanei aplicația
va rula pe un monitor/ televizor un video animat sau un jo c de tip puzzle . Copiii fiind atrași de
culori și mai ales de ecrane cu imagini colorate vor fi preocupați să fie atenți la acest eveniment.
Totodată aplicația va înștiința prin E -mail persoana care se ocupă de supravegherea copilului/
persoanei cum că un incident a avut loc, cu data, ora și trei imagini cu copilul/ persoana. Aplicația
mai conține și o aplicație android cu ajutorul căreia utilizatorul se va loga cu datele sale și va putea
porni / opri camera web/ video din această aplicație oriunde s -ar afla acesta.
Cu ajutorul aplicației mele se pot reduce semnificativ riscul unor posibile accidente cum ar
fi riscul ca, copilul să producă un eveniment neplăcut care să -l pună în pericol, datorită schi mbării
lor de stare cum ziceam care la cei de vârstă fragedă se poate regăsi tot mai des, ei pot să se auto
accidenteze sau să spargă diferite obiecte din mediul înconjurător.
2
1.2 Motivul alegerii și scopul proiectului
Încă din sfârșitul anului trei în cepusem să mă gândesc la o temă de licență pe care să o
implementez pentru proiectul de diplomă, ideea pe care mă bazam era ca ”aplicația să fie de folos
celor care o folosesc, dar totodată să fie și unică față de restul proiectelor colegilor mei” așadar am
ales să implementez această aplicație. În perspectiva mea această proiect va permite părinților sau
persoanelor ce au grijă de acești copii să aibă o oarecare stare de relaxare atunci când sunt
întrebuințați cu această sarcină. De exemplu, în momentul în care părintele ce este singur acasă cu
un copil de vârstă fragedă și dorește să meargă până la supermarketul de la colțul străzii, tot ce este
de făcut este ca aplicația și camera de înregistrare să fie pornite înainte ca micuțul să fie lăsat
nesupravegheat. El va fi supravegheat în permanență, iar la producerea unui eveniment aplicația
va știi cum să gestioneze situația încât să câștige atenția copilului reducând promițător astfel orice
șansă în c are acesta să producă un eveniment ne fericit . Totodată părintele va fi alertat prin E -mail
la scurt timp după producerea incidentului, el știind asta va putea să se grăbească înapoi să aibe
grijă în continuare de copil.
Aplicația având ca principal scop a tragerea atenției copiiilor și schimbarea st ării lor, dintr -o
stare negativă, într -una pozitivă. Grupul țintă fiind nu doar copiii, dar și persoanele cu handicap ce
nu pot fi supravegheați în permanență.
Aplicația este implementată încât să fie o aplicație desktop, utilizatorul având nevoie doar de
un computer/ laptop unde să o instaleze alături de mediul de lucru MySQL ce se ocupă cu stocarea
informațiilor procesate de aplicație și desigur și o conexiune stabilă la internet. Un aspect foarte
impor tant este că utilizatorul va avea nevoie de o cheie licențiată de către Microsoft pentru a putea
folosi algoritmul FaceAPI , totuși cei de la Microsoft oferă și posibilitatea unui trial gratuit pe
perioada a șapte zile.
Camera Web/ Video va face poze încont inuu la fiecare trei secunde pe care le va trimite serverelor
celor de la Microsoft p rintr-un request HTTP, în momentul în care o stare emoțională negativă este
regăsită cei de la Microsoft vor trimite aceste rezultate înapoi aplicației care se va ocupa ma i
departe de acestea . La producerea schimbării de spirit a persoanei camera va detecta acest lucru,
iar dacă această stare emoțională negativă persistă mai mult de 8 -9 secunde, aplicația va salva trei
poze fiecare făcute la trei secunde distanță între ele. Această regulă de trei secunde este pusă în
cazul în care starea negativă a persoanei dispare rapid. Așadar cele trei poze vor fi sa lvate în
aplicație și se vor putea accesa din interiorul aplicației. Totodată utilizatorul care va avea propiul
3
său cont cu care se va loga pentru a putea folosi aplicația va primi și un email pe adresa cu care el
s-a înregistrat, referitor la faptul că un incident a avut loc , mail -ul va conține un text tip alertă și
cele trei poze făcute de aplicație .
La producere a incidentului aplicația va rula pe monitor un video /cântec sau un joc tip puzzle (în
funcție de procentul înregistrat de către algoritmul de citire a stării emoționale, în cazul de față
copiii aflați la vârste fragede ori persoane lor cu handicap.
2. Teh nologii folosite
2.1 Java
Java reprezintă un limbaj orientat pe obiecte, este conceput de James Gosling în jurul anilor
1990, fiind lansat în 1995. Scopul lui James Gosling a fost ca Java să fie un limbaj de programare
la nivel înalt și puternic tipizat, totodată să fie și cross -plaform, ceea ce înseamnă că poate fi rulat
atât pe mașini Mac cît și pe cele Windows. Asemănări între Java și alte limbaje de programare se
pot observa la limbajele C și C++ asta deoarece Java a fost derivat din acestea. Alte idei pe care
James Gosling le -a avut în minte la realizarea acestui limbaj au fost ca Java să aibă o performanță
ridicată, să fie securizat, să fie de n ivel cât mai simplu, dinamic și cu fire de execuție. [1]
Mai jos se poate regăsi mult cunoscutul Hello World , această bucată de cod a fost
concepută cu ideea de a arăta sintaxele ce diferă de la un limbaj de programare la altul, celor ce
sunt la început d e drum în artele programării, așadar se declară clasa numită ”Hello World ”, acest
cuvânt Class fiind foarte important în Java fiindcă orice cod scris în Java trebuie să facă parte
dintr-o clasă. După acest prim pas se fac e declararea metodei Main , și acest cuvânt este unul
special, dar nu doar în Java ci în aproape toate limbajele de programare, cuvântul Main lăsă
compilatorul să știe că aceasta este clasa principală care va trebui să fie rulată mai târziu și tot de
aici se va începe execuția prog ramului. O metodă Main trebuie să fie publică dar și statică având
ca parametru un tablou de tipul String, denumit args, care va conține parametrii trimiși de consolă
în momentul rulării aplicației. Ultima linie de cod se poate observa metoda System.out.pr intln care
4
va printa în consolă implicită cîmpul textului ce îi va fi dat de către dezvoltatorul aplicației.
public class HelloWorld
{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
2.2 JavaF X
JavaFX este o platformă software concepută pentru crearea și livrarea aplicațiilor desktop
pe mai multe tipuri de arhitecturi de calculatoare (Windows / Mac / Linux ). Scopul lui JavaFX este
de a înlocui librăria Java standard Swi ng, această librărie ocupându -se cu elementele grafice ale
aplicației. JavaFX se ocupă cu realizarea aplicațiilor ”rich clien t”, adică aplicații ce au o interfață
ce reprezintă partea de backend fără a încărca astfel interfața utilizator. JavaFX conține un set
complet de butoane, diagrame, containere și tabele pe care le folosim pentru a implementa interfețe
utilizator. În plus se poate folosi CSS -ul pentru a stiliza elementele acestor interfețe. [2]
În general, o aplicație rich client are următoarele caracteristici:
➢ Este o aplicație stand alone executabilă
➢ Conține o interfață -utilizator ce are controale sau formulare
➢ Se conectea ză la o bază de date și la un server de backend
Avem trei tipuri de aplicații JavaFX:
➢ Aplicații FXML. FXML se bazează pe XML și este folosit pentru a defini interfețe –
utilizator în aplicații JavaFX. Cu FXML vom defini layout -uri statice precum formulare,
controale sau tabele. Putem construi, de asemenea, layout -uri dinamice prin includerea
unui scrip t anume
➢ Aplicații propriu zise, ce folosesc sintaxa Java tradițională și API -ul JavaFX
➢ Aplicații preloader, folosite în procesul de deployment
5
Ce sunt fișierel e FXML? Sunt echivalentul fișierelor XML, ele ajutând dezvoltatori web în special,
FXML nu se compilează, de aceea nu este necesar să recompilăm codul în caz de modificări. Ori
de câte ori creăm o aplicație JavaFX FXML avem de realizat trei fișiere, și anu me: clasa main,
metoda FXMLLoader.load() încarcă ierarhia de obiecte din fișierul de resurse Sample.fxml ca pe
urmă să o asigneze variabilei numite root, iar ultima reprezintă setarea scenei. Totodată acest
principiu al aplicațiilor FXML se bazează pe conceptul MVC (Model -View -Controller).
2.3 AWT
(Abstract Window Toolkit) este o platformă dependentă ce reprezintă un API pentru
crearea interfețelor GUI a aplicațiilor Java. De ce este dependentă? Deoarece se folosește de
sistemul de operare pe care operează pentru a crea componente ca de exemplu : textbox, butoane,
etc.[3]
Recent Awt a devenit o op țiune tot mai nepopulară chiar din această cauză pe care am explicat -o
precedent.
Toate elementele ca de exemplu butoanele, câmpurile de text, scrollbar -urile, etc sunt cunoscute
fiind drept componente. În Awt există clase pentru fiecare componentă. Pentru a avea totul plasat
pe un ecran la o anumită poziț ie, trebuie să adăugam un cointaner. Container -ul are rolul unui ecran
unde vor fi plasate aceste componente, pe scurt poate fi descris ca layout -ul care permite controlul
asupra acestor elemente. Containere -le sunt de mai multe feluri :
➢ Window (nu conține bordur ă sau titlu)
➢ Dialog (conține bordură și titlu, dar nu poate exista fără să nu fie instanțiat)
➢ Panel (nu conține bordură, titlu ori scrollbar, este folosit pentru a găzdui componente)
➢ Frame (are titlu, bordură și bara de meniu, totodată poate conțin e mai multe componente
ca de exemplu : butoane, câmpuri de text, șamd.)
2.4 Swing
La fel ca Awt, Swing reprezintă tot o modalitate de a crea interfețe GUI în Java. Este un
produs ce a luat naștere în urma colaborării dintre Sun, Netscape și IBM. Datorită faptului că a
6
fost construit după modelul de bază al Awt se găsesc unele similarită ți între aceste două tehnologii,
dar s -a reușit ca Swift să fie mai bine optimizat în cele din urmă. Așadar între Swift și Awt
învingător iese Swift datorită faptului că acesta pune la dispoziție o paletă mult mai largă de
facilități. Compone ntele Swing su nt derivate dintr -o singură clasă de bază numită ”JComponent”,
care moștenește la rândul ei clasa Container din Awt. Câteva din componentele folosite pentru
crearea interfețelor grafice Swing sunt : JLabel, JButton, JFrame, JDialog, JWindow, șamd. Cum
ziceam containere -le reprezintă suprafețe de afișare prin care pot fi organizate mai eficient
componentele aplicației . Superclasa componentelor de acest tip este Container . Awt și Swing
fiind folosite pentru implementarea jocului puzzle. [4]
2.5 Json
JavaScript Object Notation este un format ușor de interschimbare a datelor. Este ușor de
citit de către oameni, de asemenea este ușor de parsat și generat de către mașini. [5]
JSON este construit pe două structuri :
➢ O colecție de perechi nume/valoare. În diverse limbaje aceasta este concepută ca un obiect ,
o înregistrare, o structură, un dicționar, o tabelă hash, o listă de chei, sau un tablou asocia-
tiv.
➢ O listă ordonată de valori. În cele mai multe limbaje, aceasta e ste realizată ca un tablou , un
vector, o listă, sau un șir.
2.6 CSS
CSS(Cascading Style Sheets) reprezintă un limbaj de stilizare al elementelor html. Fiecare
pagină web are stilul ei aparte, acesta este realizat cu ajutorul acestui limbaj CSS. Începând de la
culoare literelor, fontul textului, background și până la poziționarea elementelor în pagină , totul
este stilizat prin CSS. Aceste stilizări pot fi încorporate în interiorul paginei respective sau pot fi
apelate din fi șiere externe css. Este recomand at ca înaintea folosirii css -ului anumite cunoștințe a
HTML -ului să fie bine stăpânite pentra a înțelese mai bine tainele limbajului acestui limbaj de
stilizare. Există trei căi de a folosi CSS -ul: [6]
7
➢ External (crearea unui fișier extern.css va face ca în tregul proiect să fie stilizat mai eficient
➢ Internal (declarat între tag -urile <head></head> și poate stiliza toate elementele de pe
pagina respectivă
➢ Inline (se atribuie stilul dorit elementului dorit, aceasta stilizând doar un anumit element
anume .
<head>
<link rel="stylesheet " type="text/css " href="mystyle.css ">
</head>
/* Fisier extern CSS */
body {
background -color: blue-marin;
}
h1 {
color: green;
margin-left: 10px;
}
Mai sus se poate observa un exemplu d e metodă prin care se poate adăuga stilizare CSS
externă. Primul pas este de a face legătura între fișierul extern și indexul aplicației. Aceasta se face
prin adăugarea ace stui rând î ntre tag -urile <head > <link real=”stylesheet” type =”text/css”
href=”mystyle.css”> </head> . Pasul doi fiind creearea unui fi șier nou de exemplu style.css unde
se va scrie stilurile dorite.
În cazul stilizării Interne se va proceda exact ca în exemplul de mai jos, unde stilizarea dorită de
către dezvoltator se va adăuga tot între tag -urile <head></head> pe urmă se vor deschide tag –
ruile <style></style> apoi se va alege elementul ce se dorește a fi stilizat.
8
<head>
<style>
body {
background -color: light-orange;
}
h1 {
color: cyan;
margin-left: 10px;
}
</style>
</head>
Iar nu în ultimul rând stilizarea Inline, un anumit atribut va fi asignat elementului dorit, iar acesta
va schimba doar aspectul acelui element.
<h2 style="color: purple;margin-left:20px;">Acesta este un exemplu </h2>
2.7 MySQL
Aplicația având nevoie de un server local pe care să ruleze am decis să folosesc MySQL,
totodată, iar pentru conectarea la baza de date va fi nevoie de utilizarea credențialelor, ip și portul
implicit al MySQL care este 3306.
O bază de date reprezintă o colecție de date creată și menținută cu unele comenzi computerizate
ce pe rmit operații de ștergere, actualizarea, adăugare și interogare a datelor. Utilizatori unei astfel
de baze de date pot accesa datele memorate prin intermediul unui concept numit Sistem de gestiune
a bazei de date (DBMS), ce recepționează cererile date de u tilizatori și afișează rezultatul conform
cererilor făcute. Este foarte important ca să se știe că există mai multe modele de date utilizate :
model ierarhic, model rețea, model relațional, șamd.
În primul rând în construirea unei baze de date trebuie să se știe exact numărul de elemente
ce le va avea , totodată să se știe și foarte bine scopul proiectării acesteia și scopul aplicației în
detalii amănunțite. Proiectarea bazei de date constă în realizarea unui model conceptual
corespunzător. Această etapă este foarte importantă pentru că pe baza ei se va implementa
funcționalitățile bazei de date. În primul rând să zicem că ai uitat un aspect important a bazei tale
de date deja proiect ate, va fi mult mai greu să reconstruiești baza de date din nou, dar dacă ești
9
încă la stagiul modelului conceptual va fi mult mai ușor să modifici unele aspecte în acest punct .
Crearea unui model conceptual presupune o reprezentare grafică a acesteia, o r eprezentare a datelor
și a relațiilor dintre acestea. Reprezentarea datelor și relațiilor într -o formă convețională se numește
Entity Relationship Diagram (ERD).
Principalele concepte folosite într -un model conceptual sunt : entitatea, atributul și relația .
➢ Entitatea , este un obiect, real sau abstract prin care se memorează date și are semnificație
pentru problema modelată.
➢ Atributul , reprezintă o caracteristică a unei entități. Un atribut poate să fie obligatoriu sau
opțional. Dacă un atribut este o bligatoriu, atunci fiecare instanță a acelei entități trebuie să
fie caracterizată printr -o valoare a l acelui atribut.
➢ Identificatorul unic , este atributul sau un set de atribute ce indentifică în mod unic o
instanță a unei entități.
Relațiile între entităț i sunt de trei tipuri și ele au loc între două entități sau mai multe :
➢ 1-1 (unu la unu), unei instanțe a primei entități îi corespunde cel mult o instanță a celei
de-a doua entități.
➢ 1-n (unu -la-mulți), în acest exemplu o instanță a primei entități poate fi asociată cu una
sau mai multe instan țe ale celeilalte entități .
➢ m-m (mulți -la-mulți) , aici o instanță a primei entități poate fi asociată cu una sau mai
multe instanțe ale celei de -a doua entități și totodată pot exista mai multe instanțe ale primei
entități asociate unei instanțe a celeilalte entități.
2.8 Hibernate
Hibernate este o ustensilă concepută pentru limbajul de programare Java se ocupă cu ideea
de mapare obiect -direcție. Această unealtă are potențialul de a oferi posibilitatea de a mapa un
model orientat pe obiecte la tabelele bazei de date relațional e. Hibernate este free, adică este gratuit
având o licență de tip open -source GNU LGPL. At ributul prin care se evidențiează cel mai
categoric Hibernate este de a mapa clase Java la tabele din baza de date și maparea tipurilor de
date din Java la tipurilor de date SQL. Hibernate are posibilitatea de a oferi totodată și facilități de
10
interogare a bazei de date, procesul constă în generarea interogării SQL și scapă dezvoltatorul de
necesitatea de conversie manuală a rezultatelor interogărilor. Maparea claselor Java la tabele se
poate face cu ajutorul anotațiilor la nivel de clasă. Prin anotații se înțelege folosirea lor pentru a
ține baza de date la curent cu modificările structurale ale claselor. [7] Hibernate oferă și unelte
pentru a specifica relațiile one-to-many ori many -to-many între clase. Pe lângă asta față de aceste
relații one-to-many cu alte instanțe de aceluiași tip de clasă , hibernate este conceput să suporte
maparea tipurilor de date specificate de client. Acest lucru oferă posibilitatea următoarelor
scenarii :
➢ înlocuirea tipului SQL implicit c ând se mapează o coloană la o propietat e
➢ maparea Enum s Java la coloane ca și cum ar fi propietăți obișnuite
➢ maparea unei singure propietăți la mai multe coloane
2.9 Protocolul HTTP
HTTP (Hypertext Transfer Protocol), este un protocol foarte popular la nivel de aplicație
care stă la baza comunic ării web în WWW (World Wide Web). Totodată HTTP este un set de
elemente ce realizează conexiuni între noduri cu ajutorul unor legături logice, fiind numite
hyperlink -uri. HTTP permite transferul acestor elemente. [8]
Rolul acestui protocol este de a trimite un request de tip cerere -răspuns în tr-un model de arhitectură
clien t-server. Ca exemplu, web browserul este clientul nostru, trimite o cerere HTTP către un
server web care întoarce un răspuns. Acest răspuns conține datele completării cererii și în caz de
succes, informația cerută. [9]
Elementele HTTP sunt identificate și localizate pe rețea prin tr-un URL (Uniform Resource
Locators), folosind formula standard http Url ce arată astfel:
<nume le_schem ei>:<p artea _ierarhică > [ ? < întrebare >][#<fragment>]
Cu to ții știm cum arată mult cunoscuta adresă http, unde partea de început conține două bare de
slash ”//”, apoi urmat de numele de domeniu ori un IP (Internet Protocol) , urmat apoi de un port
opțional precedat de ”:”. După acestea urmează o cale construită ca o succesiune de segmente, ce
arată asemănător unei structuri de directoare, acel caracter separator fiind “/ ”. Porțiunea de
11
”query ” este opțională și începe cu “?” ce conține informație adițională care nu este ierarhică, ci
organizată tipic prin perechi de tip ”cheie & valoare ”, cu perechile separate prin ”: ” ori “&”. Partea
fragmentului este de asemenea opțională, ea începe cu ”#” și conține o directivă către o resurs ă
secundară, cel mai des un atribut id al principalei resurse , un fenomen asemănător se întâmplă și
în cazul documentelor HTML.
Cererea de tip HTTP are următoarele caracteristici :
➢ O linie de request, s pre exemplu GET/ diverse/ door.jpg http/ 1.3 care formuleaz ă o cerere
pentru resursa /diverse/ door.jpg de pe server
➢ Headere HTTP , cum ar f i Accept – Language : en-US, Accept -Charset : utf-8, etc.
➢ O linie ce este absolut goală
➢ Un corp al mesajului ce este opțional
Un răspuns HTTP are următoarele caracteristici :
➢ Linia status (spre exemplu HTTP/1. 2 100 ok, care arată completarea cu succes a cererii
clientului). Statusul 3xx indică necesitatea unei redirectări, 4xx și 5xx sunt statusuri de
eroare (4xx -eroare de la clie nt, 5xx -eroare de la server).
➢ Headere HTTP, de exemplu Index -Type :text/html
➢ O linie ce este goală
➢ Un element al mesajului opțional
Antetele HTTP sunt perechi ”cheie: valoare ”, scrise în bara de căutare și separate prin succesiunea
de caractere carriage return (CR) și line feed (FD). Aceste headere definesc parametrii cu care se
operează aceste cereri de tip cerere – răspuns.
Protocolul HTTP poate fi definit prin nouă metode cu care se arată acțiunea dorită asupra câmpului
accesat. Aceste nouă metode sunt : GET, HEAD, OPTIONS, TRACE, PUT, DELETE,
CONNECT, PATCH, POST . Cele mai utilizate din aceste nouă metode fiind chiar primele patru
înșirate, cu ajutorul acestor patru metode se modifică resursa. Metodele sigure vor fi considerate
cele prin care se intenționează doar citirea in formației, fără modificarea de stare a serverului.
12
2.10 Tomcat
Apache Tomcat, de altfel cunoscut sub numele de „Tomcat” este un server web open –
source, fiind dezvoltat și menținut tot de Apache Software Foundation. Este o implementare
software pentru tehnologiile Java și rulează pe Java Servlets și pagini Java Server, cunoscute sub
numele de JSP -uri. Față de Apache HTTP Server, Tomcat asigură suportul pe Java Servlet și JSP –
uri pentru paginile dinamice servite. De asemenea, Tomcat funcționează ca un se rver de testare și
poate rula în diferite moduri pentru a se garanta o bună performanță. Adesea folosite împreună,
Tomcat poate aduce un plus de valoare la instalarea Apache HTTP Server. Cu toate acestea,
Tomcat poate sta, de asemenea, pe cont propriu ca u n server web fără Apache HTTP Server. [10]
În final, ceea ce trebuie reținut este că pentru utilizatorii care au nevoie să ruleze Java Servlets sau
pagini JavaServer, Tomcat este cu siguranță cea mai bună opțiune pentru a fi pusă în aplicare. Cu
toate acestea, în cazul în care se execută simultan m ulte pagini statice sau este nevoie de alte tehnici
dinamice, este mai potrivit să se opteze pentru Apache HTTP Server și să se ruleze Tomcat in sau
out-of-process .
2.11 Face API
Face API este o tehnologie dezvoltată de gigantul Microsoft, cum îi zice n umele „API” se
înțelege faptul că nu este vorba despre ceva fizic, ci despre un concept anume ce poate fi apelat de
pe serverul celor de la Microsoft. Tehnologia vine ca free -trial ce înseamnă că oricine cine își va
face un account pe platforma Microsoft A zure va putea beneficia de o perioadă gratis de testare a
acestei tehnologii timp de șapte zile. Cei de la Microsoft desigur oferă posibilitatea de a cumpăra
licența care costă 76$ / lună sau 4000$ / an. [11]
Figur a 1. Poză descriptivă a Face API [18]
13
O tehnologie de recunoaștere facială este o tehnologie capabilă de a identifica și verifica o persoană
doar cu ajutorul unei imagini digitale sau o secvență a unui video. Face API poate detecta până la
șaizeci și patru de fețe umane diferite cu o precizie nemaipomenită. Serviciile acestui algoritm pot
fi accesate de pe o platformă cloud -based adică de pe un server. Acest algoritm are două atribute
principale și anume detectarea feței cu emoția prezentă la acel moment și recunoașterea facială.
În momentul scanării imaginii digitale algoritmul salvează acele imagini sub formă de biți pe care
la urmă îi va analiza, iar dacă ceva pare cunoscut în imagine spre exemplul detectării faciale, un
răspuns cu numele acelei persoane va fi accesat din serverul Microsoft dacă acel chip se află în
baza de date și trimis tot sub formă de biți aplicației ce folosește acest algoritm . [12]
Potențialul acestei tehnologii este unul imens, din această cauză am ales să -l folosesc în lucrarea
mea de diplomă. Poate fi folosit în instituții de securitate națională, de exemplu accesul într -o
cameră ce conține informații de secret național , accesul să -i fie acordat doar generalului sau
persoanei cu gradul ce permite accesul în acea încăpere. Prin imp lementarea acestui algoritm într –
o camera Video Smart ceea ce am descris mai sus poate fi realizat cu ușurință. Cum în aceste zile
robotica și construirea roboților ce se bazează pe AI (Inteligență artificială) este tot mai populară,
acest câmp semnifică o piață de desfacere foarte bună pentru acest algoritm de recunoaștere facială,
roboții având nevoie să -și recunoască stăpânii lor sau celelalte persoane cu care ei vor interacționa
pe viitor.
3. Mediu l de dezv oltare
Prin mediu de dezvoltare se înțelege un set de programare software care ajută dezvoltatorul
în implementarea programelor viitoare. Un mediu de dezvoltare are avantajul de a combina toți
pașii necesari în implementarea unei aplicații și anume : edita rea codului sursă, compilarea
acestuia, depanare. Uneori un mediu de dezvoltare este specific unui anumit limbaj de programare,
însă sunt și medii concepute pentru mai multe limbaje de programare .
14
3.1 Spring Tool Suite (STS)
Ca mediu principal de dezvoltare am folosit Spring Tool Suite, este un framework foarte
popular dezvoltat de către cei de la Pivotal Software . A fost construit pe baza arhitecturii IDE -ului
(Integrated development environment) Eclipse . Caracteristicile principale ale STS sunt și anume
poate fi folosit de către orice aplicație Java , aplicațiile web de asemenea pot fi implementate peste
cele Java EE (Enterprise Edition) . Această platformă a devenit foarte populară printre
programatorii de Java , iar dezvoltatorii văd în STS o înlo cuire perfectă a Enterprise JavaBeans
(EJB). [13]
Acesta oferă un mediu pentru dezvoltare gata de implementare, depanare, rulare și implementare
aplicațiilor ”spring” , inclusiv integrarea pentru serverul Pivotal tc, Pivotal Cloud Foundry, Git,
Maven, AspectJ .
Framework -ul STS are propriul cadru de aplicații web pentru modelele de vizualizare -control
(MVC), care nu a fost inițial planificat.
3.2 MySQL Workbench
Această platformă reprezintă un instrument grafic foarte popular cu ajutorul căruia se
lucrează cu serverele și bazele de date MySQL. Totodată permite unui dezvoltator să proiecteze,
să moduleze, să genereze și să administreze bazele de date. Acesta include tot ceea ce un modelator
de date are nevoie pentru a crea modele ER complexe. [14]
MySQL Workbench este foarte popular din cauză că tinde să fie un instrument ce acoperă cele mai
importante activități de gestionare a bazelor de date :
SQL Development : permite gestionarea conexiunilor la serverele MySQL, la fel oferă
posibilitatea de a exe cuta interogări a limbajului SQL. Această funcționalitate înlocuiește produsul
anterior MySQL Query Browser.
Data Modeling : permite crearea modelelor de baze de date în mod grafic, cât și editare a bazelor
de date deja existente. Funcția de Table Editor are rolul de a edita tabelele, coloanele, triggerele,
inserturi -le, privilegii le, șamd.
Server Administration : aceast ă opțiune permite să creezi și să administrezi instanțele de server/
15
Data Migration : permite s ă migrezi pe MySQL datele din alte platforme gen, Microsft SQL
Sever, SQLite, PostgreSQL, șamd. Totodată permite migrarea și a unuor versiune mai vechi de
MySQL.
3.3 SceneBuilder
Am să fiu scurt și concis în privința acestui software. Cu ajutorul SceneBuilder se pot
dezvolta interfețe grafice pentru aplicații JavaFX, într -un mod vizual generând fișierele FXML
corespunzătoare prelucrate în cadrul aplicațiilor.
Principalele c aracter istici ale programului SceneBuilder sunt:
➢ acces la întreaga bibliotecă de controale JavaFX 8;
➢ suport pentru CSS permite gestiunea flexibilă a modului în care arată aplicația;
➢ gratuitate pentru toate tipurile de utilizatori.
3.4 Android Studio
Android Studio este mediul de dezvoltare cel mai popular în cadrul developerilor de
Android. Aceste include toate ustensilele necesare și anume : editor de cod, emulator, debugger,
compilator, șamd.
Datorită faptului că termenul de Emulator nu este regăsit în majoritatea mediilor de dezvoltare am
să explic pe scurt rolul său în Android Studio și la ce ajută. Emulatorul joacă rolul unui telefon ce
rulează pe sistem de operare Android, dezvoltatorii aplicațiilor Android pentru a vedea cum va
arăta apli cația pe unul dintre tipurile de telefoane existente nu trebuie decât să selecteze telefonul
dorit din meniu după ce aceștia au dat Run la aplicație. Nu doar telefoane se pot selecta, dar și
SmartWatch es, SmartTV -uri și Tablete. [15]
16
Fiecare fereastră ori formular este reprezentat/ă de către un atribut numit Activity . Pentru a
dezvolta o aplicație mobilă cu mai multe ferestre, trebuie construită pentru fiecare activitate o nouă
clasă. Ca default numele clasei va fi MainActivity , dacă va fi nevoie de o nouă fereastră ea va
aparea sub numele de SecondActivity .
Cele mai importante atribute ale unei aplicații cu sistem de operare Android sunt :
Activity (Activitate)
➢ fiecare activitate are propiul său ciclu de viață, el este independent de ciclul de viață al
procesului asociat aplicației curente
➢ fiecare activitate are propia stare , iar datele acesteia dinamice , salvate și restaurate
➢ activitatea reprezintă o interfață cu utilizatorul, mai precis o fereastră
Intent (Intenție )
➢ un mesaj asincron utilizat pentru a activa activități sau servicii
➢ reprezintă o entitate utilizată pentru a descrie o operațiune c e urmează să fie executată, este
un mesaj transmis către o altă componentă pentru a anunța o nouă operațiune
➢ gestionează o instanță a clasei Intent
Service (Serviciu)
Figur a 1.2. Fereastră selectare Hardware, Android Studio
Figur a 1.3. Fereastră Emulator
17
➢ gestionată de o instanță a clasei Service
➢ un task ce se execută în fundal, fără interacțiunea directă cu utilizatorul
Broadcast receiver
➢ implementată cu o subclasă a clasei BroadcastReceiver
➢ seamănă extrem de mult cu conceptul de ”handler global ”
➢ o componentă ce răspunde la anunțuri funcționale la nivel de sistem
Content provider
➢ este implementată de o subclasă a clasei ContentProvider
➢ un API folosit pentru ges tionarea datelor ce sunt private ale unei aplicați i
➢ reprezintă o alternativă ale sistemul ui de fișiere, baze de date SQLite sau orice altă soluție
de stocare
Datorită faptului că această aplicați e Android ce am dezvoltat -o este un a simplistă nu voi intra
foarte pe lar g în prezentarea totală al acestui mediu de dezvoltare. Așadar am să prezint pe scurt
ciclul de viață al unei Activități , el descrie starea în care o activitate poate fi la un moment dat :
Running – Activitatea se creează la metota (onCreate()), se pornește la (onStart()) și este afișată
pe ecranul aparatului. În cazul în care activitatea a mai fost utilizată iar aplicația a salvat starea ei
actua lă, metoda (onSaveInstanceState()), activitatea este reluată exact din locul unde s -a rămas.
Paused – Precum zice și numele, aplicația este pusă pe repaus la metoda (onPause()), deoarece
altă activitate este executată în acel moment. Dacă se dorește reluarea aplicațiiei metoda
(onResume()) face exact acest lucru.
Stopped – Activitatea va fi oprită la metoda (onStop()). Destroyed – La folosirea metodei
(onDestroy()) activitatea va f i distrusă, iar memoria va fi eliberată, deoarece nu mai este necesară.
3.5 Arhitectură Android
Android este o platformă Opern -Source pentru dezvoltare, arhitectura acestui sistem de
sistem de operare poate fi ob servată mai jos.
18
După cum se poate observa în figura 1.4, arhitectura sistemului de operare Android este
alcătuită din mai multe straturi ce comunică între ele : Linux Kernel, Libraries, Android
Runtime, Application Framework și Applications.
Primul dintre acestea este Linux Kernel , Android este construit o bună parte din acesta pe fundația
de kernel a Linux. Acest strat este rezervat programatorului și user -ului. Al doilea strat Libraries
(Librării) reprezintă bibliotecile native ale Android , ele sunt scrise în C și C++. Aceste biblioteci
se ocupă cu gestiunea bazelor de date SQLite, redarea filmelor și afișarea fișierelor HTML. Al
treilea strat Android Runtime conține mașina virtuală Dalvik și bibliotecile Java. Programele sunt
scrise deci în Java și compilate sub formă de bytecode. Aplicațiile Android rulează pe mașina
virtuală Dalvik, iar fișierele cu extensia .class sunt transformate în fișiere executabile Dalvik.
Application Framework reprezintă partea cu care programato rul va lucra. Cele mai importante
nuclee din acest strat fiind : Activity Manager (controlează ciclul de viață al aplicațiilor) , Content
Provider (conține date ce sunt împărțite între aplicații, Location Manager (are acces la GPS, iar
Notification Manager ( emite alerte trimise la user atunci când o activitate este în derulare în
background). [16]
Figur a 1.4. (Straturile arhitecturii Android) [19]
19
4. Aspecte tehnice legate de implementarea aplicației
4.1 Schema și utilizatorii aplicației
Aplicația este așadar concepută din alte trei ramuri, primul proiect constă în aplicația
“mam ă” adică aplicația ce se ocupă cu analizarea stării persoanei supravegheate, al doilea proiect
reprezintă jocul tip puzzle realizat pentru a fi folosit de către aplicația principală în momentul în
care aceasta îi cere. Al treilea proiect constă în aplicația Android cu ajutorul căruia utilizatorul se
va putea loga ca pe urmă să poată porni / opri camera video/ web să filmeze persoana care se dorește
a fi supravegheată.
Este important să se știe că atunci când ut ilizatorul dorește să pornească camera video cu ajutorul
aplicației Android, aplicația „mamă„ va fi nevoită să ruleze pentru a porni serverul pe care aplicația
Android îl va apela cu ajutorul unui request HTTP. Pe scurt, dacă aplicația principală nu va rul a și
nu se va avea acces la internet, aceasta nu va funcționa. (Figura 1.5)
Figura 1.5 (Descrierea funcționării request -ului HTTP[Sur să internet]) [20]
20
Autentificare
Fereastră
principală
Fereastră
monitorizare Setări
utilizator Incidente Setări app Logout
Schimbare E -mail/
Parolă Vizualizare
incidente
Fereastră fotografie
Figur a 1.6. Structura aplica ției principale
21
Mai sus în figura 1. 7 se poate observa conceptul aplicației Android care va avea rolul de a
ușura pornirea aplicației și anume pornirea înregistrării a camerei conectate la aplicație. Misiunea
acestei aplicații este de a permite utilizatorului să poate efectua această activitate de oriunde s -ar
afla el, atât timp cât există o conexiune la internet și serverul aplicației rulează.
În figura 1. 8 se poate observa fereastra ce va conține jocul Puzzle la momentul dat.
Figur a 1.7. Structur ă aplicație Android
Figur a 1.8. Fereastră joc puzzle
22
În figura 1. 6 se poate observa schema structurii aplicației principale . Aplicația are un singur tip de
utilizator, cum se vede în figura 1.5 prima fereastră pe care utilizatorul o va întâlni este cea de
Autentificare , din această fereastră se va putea ajunge în Fereastra principală , aceast a constă în
meniurile principale ale aplicației. Din fereastra principală utiliz atorul va putea accesa următoarele
meniuri: Fereatra de monitorizare (cea în care user -ul va putea porni și opri funcționarea
aplicației), Setări utilizator (rolul acestei ferestre este de a oferii utilizatorul de aș -i schimba parola
și E-mailul), cea de a t reia fereastră este Incidente (această opțiune va fi accesată în momentul în
care se dorește să se vadă incidentele petrecute, data, ziua și bineînțeles pozele făcute persoanei
supravegheate , a patra fereastră Setări app semnifică opțiunea de a schimba unele setări ale
aplicației în sine, cum ar fi schimbarea limbii în română, engleză sau franceză , totodată se mai
poate schimba valoarea globală pe care aplicația o recunoaște ca fiind minimul de la cât să
descopere nivelul de tristețe a persoanei. Tot în Setări app se pot adăuga video -uri sau cântece,
care vor fi folosite de aplicație pentru a le reda în momentul în care un nivel anume de tristețe se
detectează . Și în cele din urmă opțiunea de Logout unde utilizatorul va putea să se delogheze. Din
ferestrele Setări app și Incidente se va putea ajunge în fereastra unde schimbarea parolei și al E –
mailul va avea loc, respectiv fereastra unde se vor putea vizualiza fiecare incident în parte separat.
Fiecare din aceste ferestre având opțiunea de ” Return to the Home Page/ Return to the previous
page ”.
Chiar dacă aplicația tinde să fie mai mult o aplicație desktop , am decis să implementez și
opțiunea de Autentificare pentru a oferi utilizatorilor acest avantaj de aș -i proteja datele înregistrate
și salvate doar pentru ei. Asta în cazul în care aplicația este folosită într -un centru colectiv de mai
mulți utilizatori, de exemplu un azil pentru persoane ce suferă de un handicap anume.
Un aspect foarte important ce țin să -l precizez este faptul că aplic ația este în proporție de 80% o
aplicație desktop, restul procentului de 20% fiind partea web al acestei aplicații. Datorită utilizării
tehnologiei client -server pe care am utilizat -o în acest proiect și anume protocolol de request
HTTP putem spune că apli cația este una ”hybrid”.
4.2 Implementarea bazei de date
Pentru a îndeplini toate cerințele proiectului și pentru a demonstra că stăpânesc și această
ramură a proiectului am implementat o bază de date relațională pentru a stoca datele. Un avantaj
23
al acest ui mod de structurare a datelor, bazat pe legături între date, permite eliminarea redundanței,
astfel încât stocarea și mai ales, modificarea unei informații se face într -un singur loc, iar din punct
de vedere funcțional, această structură permite ordonare a datelor în mod simplist și natural.
Baza de date a fost creată în MySQL Server cu ajutorul mediului de dezvoltare MySQL
Workbench și conține cinci tabele necesare pentru a stoca datele și relațiile între ele.
4.3 Proiectarea bazei de date
După ce aveam imprimată ideea acestui proiect de diplomă în minte am început să iau în
considerare următoarele aspecte :
➢ scopul întregii baz e de date
➢ reguli de normalizare ce împiedică eventuale greșeli în proiectarea acesteia
➢ protecția datelor
➢ dimensiunea acesteia
Figură 1 .9 Diagrama ERD a bazei de date
24
Componența bazei de date (Fig. 1. 9) include următoarele tabele :
➢ Tabela principală User_account – conține toate datele nevoite pentru ca utilizatorul să se
înregistreze , Username, Parolă și E -mail.
➢ Tabela Photo – această tabelă este legată la tabela principală și conține poziția pozelor și
anume ordinea grupelor lor (deoarece aplicația va face trei poze, iar aceastea vor fi salvate
în această tabelă pe grup de câte trei în ordine crescătoare) , fiecar e grup de câte trei poze
va fi numerotată crescător începând de la zero, mai conține pozele propiu -zise și în cele
din urmă poziția pozelor în ordinea în care camera Web/ Video a făcut aceste poze, ele vor
fi salvate de asemenea crescător.
➢ Tabela Age, aceasta este legată doar la tabela Photo, în această tabelă putem observa
informații precum : vârsta minimă, vârsta maximă.
➢ Tabela Settings, rolul acesteia este de a stoca date referitoare la limba curentă selectată a
aplicației, limita de tristețe de la ca re algoritmul FaceApi să detecteze eventuală schimbare
de stare și în ultimul rând setarea ce permite video -ul să ruleze un timp specific setat din
aplicație.
➢ Ultima tabelă Incidents, are rolul de a salva ora la care s -a petrecut incidentul, data, numele
utilizatorului care este logat în momentul petrecerii incidentului și numele video -ului ce a
rulat.
4.4 Descrierea structurii aplicației
Cum am mai zis această aplicație este construită în framework -ul Spring Tool Suite, acest
framework conține conceptul de MVC (Model -View -Controller). Arhitectura MVC este alcătuit
din:
➢ Model , manipuleaz ă operațiunile logice și de utilizare de informație, este conectat la baza de date
și comunică doar cu controller -ul
➢ View , conține informații prezentate user -ului, comunic ă doar cu controller -ul și est e independent
față de baza de date
➢ Controller , acesta procesează request -ul, prelucrează datele primite și este intermediarul dintre
view și model
25
Pentru a da o esteticitate programului am decis să separ principalele ramuri în pachete, un lucru
foarte popular în dezvoltarea Java. Și anume în figura 2.0 se poate observa în fereastra explorer
modul în care pachetele au fost aranjate .
Numărul pachetelor este de șapte, iar fiecare din acestea are
rolul său important în implementarea acestei aplicații. De
exemplu se poate observa că fiecare pachet are un nume
specific atribuit rolului pe care acesta îl are.
Am să explic conotațiile unora dintre aceste pachete pentru
a fi înțeles. De exemplu pachetul webcam .ui are ca și
conținut toate fișierele java și fxml, acestea având rolul prin-
cipal în implementarea elementelor de grafică a aplicației.
Totodată în pachetul webcam.ui se poate observa și un fișier
CSS, acel fișier conține toate stilizările necesare, Pachetul
Webcam.ui.language conține fișierul java destinat setărilor
celor tre i limbi pe care aplicația le va avea.
.menu-bar .label {
-fx-font-size: 8pt;
-fx-font-family: "Segoe UI Light" ;
-fx-text-fill: white;
-fx-opacity: 0.9;
}
.menu .left-container {
-fx-background -color: black;
}
.text-field {
-fx-font-size: 8pt;
-fx-font-family: "Segoe UI Semibold" ;
}
Figure 1.2. Exemplu de cod CSS din fișierul StyleTheme.css
Figura 2.0. Structurarea pachetelor a
aplicației pr incipale
Figura 2. 1. Structura pachetelo r web-
cam.ui ș i webcam.ui.language
26
În momentele ce urmează am să explic rolul celor mai importante ramuri ale acestei
aplicații și am să explic și anumite bucăți de cod ce au legătura cu aceste a.
În fol derul sursă src/main/resources se regăsește setarea necesară bazei de date pentru o
funcționare corectă și eficientă a acesteia. (Fig. 2. 3)
➢ Linia unu reprezintă o setare ce permite bazei de date să updateze baza de date când aceasta
pornește în cazul în care o nouă tabela a fost creată.
➢ Pe urmă avem locația serverului MySQL, portul unde acesta rulează
➢ În cele din urmă se pot observa informații legate de username -ul și parola prin care se face
conexiunea la baza de date .
Figur a 2.4. (Clasa Incident, exemplu de crearea a unui tabel din baza de date)
Figura 2.3. Setări baze de date
27
În pachetul webcam.entities avem fișierele java unde se creează tabele din baza de date
și de unde cu ajutorul unor Query -uri vom putea face anumite operații asupra acestei baze de date.
În figura 2. 4 se poate observa clasa Incident.java în interiorul acestei clase se creează
tabelul Inc ident din baza de date.
Pe linia 10 din fig. 2. 4 se poate observa o anotație @Entity , rolul acesteia este a trasnforma clasa
Incident într-o entitate și anume într -un tabel în baza de date . Liniile de cod cuprinse între 15 și
21 reprezintă coloanele ce vor fi create în baza de date, fiecare variabilă declarată acolo pk,
minimumValue, maximumValue, sadnessProcent, videoTitle, timeStamp, username reprezintă de
exemplu : PK-ul (Primary Key -ul este un ID unic ce deosebește fiecare tabelă de altele),
sadnessProcent reprezintă procentul de tristețe pe care persoana l -a avut în urma analizei de către
FaceApi, username -ul constă în numele utilizatorului logat în acel moment în aplicație.
Mai jos se observă constructorul Incident și parametrii săi, acesta va fi apelat automat
la crearea unui nou obiect.
4.5 Autentificarea și notificarea
Utilizatorul se poate loga în interiorul aplicației după ce acesta și -a creat un cont , în urma
înregistr ării utilizatorul va primi o notificare prin E -mail ce-l va anunța pe acesta că înregistrarea
a avut loc cu succes. (Fig 2. 7)
Figur a 2.7. (Notificare înregistrare prin E -mail)
Figura 2. 5. (Secvență de cod unde se trimite mesajul prin notificare prin E -mail în
limba selectată din app
Figur a 2.6. (Linie cod din fișierul extern JSON ce conține toate textele de UI)
28
Așadar în figura 2 .5 se face trimiterea notificării prin E -mail, după cum se poate observa în această
linie de cod mesajul va fi luat cu ajutorul obiectului texts ce reprezintă totalitatea mesajelor text
din UI -ul aplicației, aceastea aflându -se întru -un fișier JSON extern . Iar cu ajutorul metodei
getEmailRegistrationSubject() câmpul necesar de text de care aplicația are nevoie îl va extrage
din fișierul JSON (fig 2. 5). Ca mai apoi pe platforma de E -mail pe care utilizatorul o folosește să
poată vedea notificarea prin E -mail e xact cu mesajul ”Registration successfully”.
4.6 Procesarea imaginii și comunicarea cu FaceApi
Aplicația este nevoită să comunice cu serverele celor de la Microsoft pentru a accesa
această tehnologie pe care o folosesc în proiectul meu de diplomă și anume FaceApi. În primul
rând app -ul meu este nevoit să facă cel puțin o poză, iar apoi să o trimită la serverele Microsoft
pentru ca aceștia să analizeze starea emoțională a persoanei respecti ve din acea poză , pasul trei
constă în primirea rezultatelor de la Microsoft, ca pe urmă acestea să fie salvate în baza de date și
procesate de către aplicație.
În figura 2. 8 se poate observa constructorul clasei ImageProcess, în această secvență de cod se
petrec următoarele și anume, în primul rând avem o buclă while care este setată pe valoarea true,
acest lucru înseamnă că ea va rula permanent. Pentru a evita ca execuția să aibă loc la înco ntinuu
am decis să pun un Thread Sleep de durata a cinci milisecunde după fiecare execuție.
În if avem două condiții, atunci când camera Web este activă poza făcută se va salva pe disc apoi
se va accesa clasa FaceApi ca apoi poza să fie trimisă la serverele de la FaceApi.
Figura 2. 8. Exemplu cod procesare imagine
29
În următorul if se va decide dacă pozele analizate de către algoritmul FaceApi îndeplinesc
condițiile de tristețe setate în aplicație , așadar dacă rezultatul venit de la serverele FaceApi este
true adică ele îndeplinesc toate condițiile, atunci triggerVideo++ se va incrementa ce înseamnă că
video -ul va rula deoarece persoana din poză are o stare emoțională negativă , iar dacă rezultatul
analizei acelei imagini este negativ triggerVideo va fi setat pe 0, adi că nu va rula.
Ce de -al treilea if are rolul de a decide când are loc un incident nou sau nu, dacă variabila
triggerVideo s-a incrementat de trei ori atunci un incident va apărea și va fi salvat.
4.7 Rulare joc/ video în funcție de procent ul de tristețe
În figura 2. 9 avem blocul de decizie al aplicației unde se decide dacă în urma analizei celor
trei poze se va rula jocul puzzle ori un video.
Regula de decizie este că dacă procentul de tristețe trece peste nivelul de 60% atunci
aplicația va porni video player -ul setat ca fiind prestabilit, iar el va rula cât a fost setat din aplicație
de către utilizator, minimul fiind 1 minut, iar maximul 9 minute. După scurgerea acestui timp,
video player -ul va primi comandă de la aplicația video să se închidă automat, folosind comanda
”Taskkill /F/ IM mpc -hc.exe” , rolul acestei comande este de a da ”kill” procesului denumit.
Dacă procentul de tristețe este sub 60% aplicația video va rula jocul puzzle.
Figura 2. 9. (Bloc decizie rulare joc/ video)
30
4.8 Apariția username -ului logat și salvarea limbii selectate la închiderea și
repornirea aplicației
Pentru a da un aspect de profesionalism aplicației am decis să adaug aceste funcționalități,
deși nu mi -a trecut prin minte din prima, în urma testării aplicației am văzut că user -ul logat nu
poate să vadă nicăieri username -ul său, iar acest simplu fapt po ate da dureri mari de cap celorlalți
care de exemplu mai folosesc aplicația și au conturi diferite, la fel și cu limba care a fost ultimadată
setată, ideea este ca la repornirea aplicației să rămână salvată. În figura 2. 10 putem observa
implementarea acest or două funcționalități, în linia 411 variabilei baseStage îi setată metoda
.setTitle care are rolul de a seta titlul elementelor specificate în paranteză și anume Application –
TitleText acesta fiind setat în limba setată ultima oară și numele user -ului cur ent.
Titlul textelor este preluat dintr -un folder extern numit lang unde se află trei fișiere Json,
fiecare fișier conținând cele trei limbi de care aplicația dispune: Română, Engleză și Franceză.
Figura 2. 10. (Salvarea User -ului logat și a limbii curente)
Figură 2. 11. (Fișierele JSON de setare a limbii )
31
4.9 Setarea anumitor funcționali tăți și căile de acces
În figura 2. 12 avem fișierul java WebcamApi unde se fac setări pentru UI și unde se d ă
calea de unde aplicația să acceseze elemente le necesare cum ar fi fișierele Json, de unde să ruleze
executabilul de la jocul puzzle, folder -ul unde să se salveze ultimele trei poze , numele adresei de
e-mail pe care aplicația o va folosi pentru a trimite notificări de asemenea și rezoluția ferestrei
aplicației.
4.10 Folosirea request -ului HTTP pentru a face legătura cu aplicația Android
În figura 2. 13 are loc cum zice și subtitlul folosirea protocolului de comunicare HTTP, este
nevoit de acest protocol pentru a comunica cu aplicația Android, dar acest protocol mai este utilizat
în această aplicația pentru a trimite pozele salvate către serverele de la Microsoft.
Anotația @GetMapping este folosită pentru maparea acestor tipuri de request -uri HTTP, este o
anotare compusă ce acționează ca o prescurtare pentru @RequestMapping.
Anotația @ResponseBody mapează scheletul request -ului HTTP la un obiect de transfer ori
domeniu, permițând deserializarea automată a scheletului într -un obiect Java.
Pe urmă putem observa cele două String -uri username și password ca paramentrii al
constructorului, acești parametrii vor fi folosiți pentru verificarea în baza de d ate dacă username -Figura 2. 12. Declararea căilor și setarea unor elemente importante
32
ul și parola ce urmează a fi introduse de pe aplicația Android sunt întradevăr existente , dacă nu,
acesul va fi restricționat.
Tot în figura 2. 13 în exemplul următor avem partea de cod ce se ocupă cu închiderea și
pornirea camerei.
În figura 2.9 aveam doar o parte din request -ul HTTP scris în Spring Tool Suite, este nevoie și ca
în Android Studio s ă fie un astfel de request. (Fig 2.14)
Figura 2. 13. HTTP Request
Figur a 2.14 ( HTTP Request Android Studio)
33
În figura 3.0 se observă linia de cod din mijlocul imaginii acel final String urlString unde se
specifică adresa IP și portul pe care aplicația va rula și acele două variabile &username și &pass –
word. Acestea fiind necesare pentru ca , conectarea la server să fie cu succes.
4.11 Specificații generale ale aplicației Android
Această aplicație Android conține două activități exact ca și în figura 1. 7, rolul acestei
aplicații este de a oferii oportunitatea utilizatorului să pornească camera de filmat de oriunde s -ar
afla acesta, atât timp cât este conectat la internet.
Prima activitate constă în pagina de login, ce conține câmpurile de login, password, butonul
de login, un text care îi specifi că utilizatorului în caz de introducere greșită a datelor de logare, că
acestea au fost incorecte, iar numărul de cinci încercări va scădea descrescător la fiecare apăsare a
butonului Login cât timp crendețialele sunt introduse incorect.
A doua activitate reprezintă interfața unde se poate porni și oprii camera din filmat, această
interfață conținând un singur buton pe care se apasă pentru a porni și opri camera.
Figura 2.15 reprezintă , modul de implementare al interfeței unui aplicații Android este unul
relativ simplu, elementele prin metoda drag and drop se extrag din librărie.
Figura 2.15. (Implementarea interfeței aplicației Android)
34
4.12 Implementarea jocului Puzzle
Pentru a crește complexitatea acestei lucrări de licență am decis să implementez un joc 2D
de tip puzzle. Pentru a face acest lucru în Java este nev oie de utilizarea celor două widget -uri
pentru interfețele grafice, AWT și Swing. Accesarea acestor librării se face prin declararea acestora
la început de exemplu, import java.awt. (…); și import javax.swing. (…);.
În primul rând într -un joc tip puzzle avem nevoie de o fotografie, în cazul de față am ales
să folosesc o imagine a cunoscutul ui pește din desenele animate Nemo. [17]
În figura 2.16 putem observa ImageIO.read() care încarcă imaginea după disk. Clasa privată
BufferedImage reprezintă cea mai importantă clasă de manipulare a imaginii din Swift.
Pasul următor ar fi ca această poză să fie împărțită în mici dreptunghiuri care la încep ut să
fie amestecate, jucătorul fiind nevoit să le mute pentru a forma imaginea originală.
Avem nevoie de o matrice de 4×3 care să conțină 12 dreptunghiuri, iar aceste drept unghiuri trebuie
să fie toate de aceași mărime .
Figur a 2.16 (Încărcare imagine de pe disc)
Figura 2.17 (Crearea listei tip matrice)
35
Pentru a face toate dreptunghiurile de aceeași mărime am folosit GridLayout , este specific
tehnologiei Awt și are rolul d e a da tuturor elementelor din interiorul acelui strat o mărime egală
între ele.
În figura 2.17 este reprezentată matricea rectlist care conține dreptunghiurile ce for-
mează imaginea. Fiecare dreptunghi este reprezentat de către un set de puncte din listă.
O implementare ce ajută jucătorul să știe care dreptunghi este selectat cu exactitate constă într -un
addMouseListener al cărui rol este de a adăuga un ”listener” atunci când cursorul mouse -ului se
află deasupra unui dreptunghi anume .
Pentru a se deosebi ma i bine marginile fiecărui dreptunghi am adăugat o bordură verde care lasă
jucătorul să poată vedea cu exactitate unde se află marginile acelei bucăți de piesă puzzle mou-
seExited(MouseEvent e), iar cu setBorder(BorderFactory. createLineBorder (Color. GREEN));
se setează culoare marginei.
Din acele 12 dreptunghiuri unul va trebui să fie complet gol fără nici o imagine, pentru ca celelalte
dreptunghiuri de lângă să poată fi mutate. (Fig 2.18)
Pentru a decupa cele 12 dreptunghiuri folosesc CropImageFilter , va tăia imaginea originală în
douăsprezece bucățele mai mici așezate sub formă de matrice de 4×3. (Fig 2.19)
Dreptunghiul ce nu conține absolut nimic este denumit EmptyActionComponent și este plasat mereu
la pornirea jocului să fie în colțul dreapta jos și își va schimba poziția cu dreptunghiurile alăturate
lui.
Figura 2.18 Exemplu cod, golirea dreptunghiului c are va fi schimbat cu vecinii s ăi
Figura 2.19 Funcția de decupare a celor 12 drep tunghiuri
Figura 2.20 Metoda de amestecare a vecinilor dreptunghiului gol
36
În figura 2.20 se poate observa funcția ce permite amestecarea tuturor dreptunghiurilor la fiecare
început de joc.
Imaginea actuală folosită pentru jocul puzzle este setată să aibe mărimea de 800×800 , așadar
container -ul imaginii care este setat să aibe aceeași mărime cu ajutorul GridLayout va trebui să
dimensioneze celelalte dreptunghiuri echilateral între ele.
Figura 2.21, arată metoda prin care se calculează mărimea pozei, în primul rând se calculea –
ză înălțimea imaginii în funcție de lățimea dorită, prin metoda getResizedHeight.
Dreptunghiurile ce reprezintă piesele de puzzle sunt stocate într -o matrice tip listă, iar
această listă este mapată la container -ul imaginii. Știind deja locul unde acel dreptunghi gol știm
și indexii acestuia, la fel și acelor dreptunghiuri care sunt vecini cu el. Aceștia fac schimb de poziții
folosind fu ncția Collections. swap(). (Figura 2.22)
Figura 2.21 (Mărirea dreaptunghiurilor)
Figur a 2.22 (Amestecarea dreptunghiurilor)
37
În momentul schimbării poziției precendente updateSmallScreens() va updata noile pozi-
ții ale acestor elemente. Dar înainte ca noile poziții să fie updatate este nevoie ca ele să fie șterse,
acest lucru se face cu metoda removeAll() , al treilea pas mai rămâne doar validarea noilor poziții,
cu ajutorul metodei validate() .
Și în final în momentul în care va reuși cu succes să formeze poza inițilă în totalitate, el ar
trebui să știe că jocul s -a terminat cu succes.
checkForEndGame() are rolul de a verifca dacă lista elementelor corect așezate este la fel cu cea
original, dacă da un mesaj va apărea zicând: ”Felicitari ! Joc Terminat! ”. (Figura 2.23)
5. Utilizarea aplicației
5.1 Modul de utilizare al aplicației și o scurtă previzualizare a acesteia
Așadar aplicația fiind o aplicație ”hybrid” este necesar deci să avem o conexiune la internet
pentru ca aplicația să poată face comunicarea cu serverele prin acele request -uri HTTP. În subcapi –
tolele ce urmează am să descriu modul de funcționare al aplicaț iei și pașii necesari în ordinea lor.Figur a 2.23. (Verificarea pieselor de puzzle și finalizarea jocului)
38
Figura 2.24. (Funcționarea aplicației și pașii acesteia )
39
În figura 2.24 se observă structura aplicației și pașii prin care se ajunge la rezultatul final.
5.2 Fereastra de înregistrare
Primul pas pe care utilizatorul va trebui să -l facă este și anume să dea dublu -click pe exe –
cutabilul aplicației . Fereastra de autentificare a aplicației va apărea dându -i oportunitatea utilizato –
rului să se înregistreze dacă acesta nu are cont înregistrat până acum , ori dacă acesta are deja cont
creat să se logheze cu acesta cu ajutorul butonului Login. La apăsarea acestui buton un dialog va
apărea ce îi va pemite utilizatorului să se logheze cu credențialele sale. (Fig 2.25)
În cazul în care utilizatorul nu are con tul creat el va accesa butonul Register unde își va
introduce viitoarele credențiale : Username -ul, E -mailul și parola. Prin E -mail el va primi o
notificare cum că înregistrarea a avut loc cu succes.
Figur a 2.25 (Fereastra de înregistrare)
40
5.3 Fereastra principală
După ce logarea a avut succes, utilizatorul va accesa panoul principal de comandă a apli-
cației. Din acest panou utilizatorul va putea să monitorizeze persoana dorită, să -și personalizeze
anumite setări dorite cum ar fi limba dorită s au video -ul care să ruleze, ori limita de tristețe pe care
acesta vrea aplicația să înregistreze viitorul incident.
Totodată din acest panou se poate accesa fereastra de incidente unde user -ul poate să vadă fiecare
incident și detaliile acestuia.
În cazul în care user -ul dorește să -și schimbe parola, acesta va accesa butonul User Settings . Iar
dacă aplicația este folosită de mai mulți utilizatori, user -ul curent poate să se delogheze folosind
butonul Logout. (Fig 2.26)
Figur a 2.26. (Fereastra cu meniurile principale)
41
5.4 Fereastra de monitorizare
În interiorul acestui panou utilizatorul va putea să activeze camera de filmat, sau să o
oprească atât din aplicație cât și cu ajutorul aplicației Android. (Figura 2.27)
Figura 2.27. (Fereastra de monitorizare și interfața aplicației Android )
42
5.5 Setarea aplicației
Acest panou are rolul de a da oportunitatea utilizatorului de a face unele schimbări după
placul acestuia. În partea de sus a panoului se poate observa un tabel în care sunt adăugate o gamă
variată de vârste, acestea sunt adăugate cu ajutorul butoanelor din dreapta tabelului.
Fiecare categorie de vârstă poate să aibe propiul video/ cântec preferat de către utilizator.
Ele pot fi șterse sau adăugate cu butoanele din dreapta celui de -al doilea tabel al panoului.
Cele trei butoane din partea de jos al panoului au rolul și anume cel din stânga are funcțio –
nalitatea unui buton de ”return home”, Global Values este chiar fereastra deschisă, în aceasta se
poate seta lungimea pe care aplicația să o respecte în rularea video -ului, dar și limita de tristețe pe
care să o ia în considerare la analiza facială a persoanei. Ultimul buton fiind setarea limbii dorite
de către utilizator, în cazul de față sunt implementate : Româna, Engleza și Franceza. (Fig 2.28)
Figura 2.28. (Panoul de setări)
43
5.6 Verificarea incidentelor
Pentru a verifica ce fel de incidente s -au petrecut utilizatorul poate accesa butonul View
Incidents din panoul principal al aplicației. În acest fereastr ă din figura 2.29 se poate verifica ora,
data, procentul de tristețe care semnifică cât de trist a fost acesta, dar și pozele făcute de cameră.
Se poate observa existența a patru coloane, Data, Ora, Tristesțe % și Titlu Video . Fiecare din
aeste coloane conține date legate de incidentul petrecut pe care utilizatorul le poate folosi pentru a
știi cu exactitate ce s-a petrecut și gravitatea acestuia.
Incidentul se poate și sterge, dacă acesta este selectat din tabelul de mai sus. Accesând butonul
View Incident user-ul poate vedea cele trei poze făcute de cameră ce au declanșat incidentul. (Fig
2.30). Figur a 2.29. (Fereastra Incident)
44
Utilizatorul poate să verifice incidentul și dacă acesta nu se află în fața calculatorului, la apariția
acestuia user -ul va fi notificat prin e -mail de către aplicație printr -un mesaj și cele trei fotografii
făcute de către aplicație persoanei supravegheat e. (Fig 2.31)
Figura 2.30. (Verificarea pozelor)
Figur a 2.31. (Notificare prin E -mail al incidentului)
45
5.7 Pornirea camerei de filmat cu ajutorul aplicației Android
În figura 2.32 se poate observa interfețele aplicației Android care va permite utilizatorului
să poată porni camera de filmat de oriune s -ar afla pentru a -și supraveghea copilul, asta în cazul
acesta are acces la internet.
Pentru a putea folosi această aplicație este n evoie de un telefon ce rulează sistem ul de operare
Android , de asemenea este nevoit ca aplicația principală să ruleze pe calculator și ca serverul să
fie pornit, pentru a se putea face requestul HTTP.
La atingerea iconiței de pe telefon, utilizatorul va putea accesa această aplicație, fereastra
de autentificare va fi prima care -i va apărea, iar acesta va treb ui să-și introducă aceleași credențiale
prin care s -a logat și pe aplicația principală. Dacă aceast ea sunt greșite, mesajul de sub butonul de
Login îl va înștiința că aceastea au fost introduse incorect și mai are patru încercări .
La introducerea credențialelor corecte user -ul se va putea loga și va putea porni/ opri camera.
Figura 2.32. (Interfețele aplicației Android)
46
6. Concluzie
Cum am precizat în primele capitole, dezvoltarea acestei aplicații a fost o provocare pe
care am vrut să o duc la bun sfârșit. La îndrumarea profesorului meu de proiect am luat hotărârea
că această temă de diplomă este una chiar interesantă și cu siguran ță unică printre celelalte lucrări,
acest lucru m -a ambiționat să nu renunț la această temă chiar dacă am întâmpinat unele greutăți pe
drum.
În prim ul capitol am vorbit despre decizia mea de a alege această temă și rolul ei pentru
public. Capitolul doi constă în tehnologiile folosite de mine în implementarea acestei aplicații. În
capitolul trei sunt prezentate mediile de dezvoltare care le -am utilizat în scrierea codului acestei
aplicații. Capitolul patru constă în specificațiile tehnice a le aplicației și conceptul acesteia, iar nu
în cele din urmă fiind capitolul cinci în care am prezentat modul de utilizare al aplicației.
6.1 Po sibile dez voltări viitoare
Pe parcursul implementării acestei aplicații m -am gândit ce aspect ar putea îmbunătății
această aplicație, iar în cele din urmă am căzut la următoarele idei :
➢ În primul rând eu consider că interfața poate fi îmbună tățită atât UI -ul aplicației
principale, cât și cel a aplicației Android
➢ A doua posibilă dezvoltare constă în posibilit atea ca utilizatorul să poat ă vedea ce
camera filmează în timp real, pe telefonul prin care este loga t la aplicație.
➢ O altă optimizare poate fi adăugarea unui sistem ce funcționează pe bază de
inteligență artificială. Cei care au urmărit filmul celor de la Marvel, Iron Man vor
știi exact despre ce fel de mecanism vorbesc. Utilizarea unei voci artificiale care să
discute cu persoana de ca re această inteligență artificială are grijă în momentul
producerii unui incident poate să reducă riscul eventualelor accidente în opinia mea
aproape de 95%, fiindcă persoana ar fi ocupată în a purta o discuție cu acest sistem
de inteligență artificială , în lipsa ființelor umane.
47
Bibliografie
[1] https://en.wikipedia.org/wiki/Java_(programming_language)
[2] https://www.todaysoftmag.ro/article/1048/javafx -in-platforma -java-standard -8
[3] https://whatis.techtarget.com/definition/Abstract -Window -Toolkit -AWT
[5] https://ro.wikipedia.org/wiki/JSON
[4] https://www.tutorialspoint.com/awt/
[6] https://developer.mozilla.org/en -US/docs/Learn/CSS
[7] https://www.theserverside.com/definition/Hibernate
[8] https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol
[9] https://ro.wikipedia.org/wiki/Internet_Protocol
[10] https://blog.webland.ro/2015/05/diferentele -dintre -apache -http-server -si-apache –
tomcat/
[11] https://docs.microsoft.com/en -us/azure/cognitive -services/face/overview
[12] https://en.wikipedia.org/wiki/Facial_recognition_system
[13] https://en.wikipedia.org/wiki/Spring_Framework
[14] https://www.mysql.com/products/workbench/
[15] https://en.wikipedia.org/wiki/Android_(operating_system)
[16] https://en.wikipedia.org/wiki/Android_(operating_system)
[17] http://www.edu4java.com/en/game/game0 -en.html
[18] https://docs.microsoft.com/en -us/azure/cognitive -service s/face/overview
[19] https://developer.android.com/topic/libraries/architecture/
[20] https://skolakoda.org/images/koncepti/web/zahtev -odgovor.png
48
DECLARAȚIE DE AUTENTICITATE A LUCRĂRII DE
FINALIZARE A STUDIILOR
Titlul lucrării ________________________________________________________
___________________________________________________________________
___________________________________________________________________
Autorul lucrării _____________________________________________
Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finali-
zare a studiilor organizat de către Facultatea _________________________________________
din cadrul Universității din Oradea, sesiunea_______________________ a anului universitar
______________.
Prin prezenta, subsemnatul (nume, prenume, CNP)_____________________
___________________________________________________________________
________________________ ___________________________________________,
declar pe proprie răspundere că această lucrare a fost scrisă de către mine, fără nici un ajutor neau-
torizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.
Declar , de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folosite
fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.
Oradea,
Data Semnătura
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: (Aplica ție pentru îmbun ățire stare dispozi ție persoan ă ) [613649] (ID: 613649)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
