Listă de figuri ……………………………………………………………………………………………………….. 3 1…. [608188]

Universitatea POLITEHNICA Bucure
ș
ti

Facultatea Automatică
ș
i Calculatoare

Departamentul Automatică
ș
i Informatică Industrială

LUCRARE DE DIPLOMĂ

Recunoa
ș
terea facială pentru aplica
ț
ii de securitate

Coordonator
Absolvent: [anonimizat]. Bogdan Dumitrescu
Bogdan-Marius Georgescu

2019

Cuprins

Listă de figuri ……………………………………………………………………………………………………….. 3

1. Introducere ………………………………………………………………………………………………………… 4

1.1 Motiva
ț
ia lucrării …………………………………………………………………………………… 4

1.2 Obiectivul lucrării ………………………………………………………………………………….. 4

1.3 Sumar …………………………………………………………………………………………………. 6

2. Recunoa
ș
terea facia lă …………………………………………………………………………………………. 7

2.1 Recunoa
ș
terea facială în via
ț
a cotidiană ……………… …………………………………… 7

2.2 Concepte de recunoa
ș
tere facială …………………………………………………………… 7

3. Problema recunoa
ș
terii faciale
ș
i solu
ț
ia propusă ……………………………………………. 11

3.1 Histograma Orientării Gradien
ț
ilor ………………………………………….. 11

3.1 Algoritmul Support Vector Machine ..……………………………………….. 14

4. Prezentarea aplica
ț
iei …………………………………………………………………………………….. 20

4.1 Sumar .…….……………………………………………………………………………………….. 20

4.2 Interfa
ț
a ……………………………………………………………………………………………. 22

4.3 Implementarea solu
ț
iei ………………………………………………………………………… 25

5. Concluzii și dezvoltări ulterioare ……………………………………………………………………….. 31

6. Bibliografie ……………………………………………………………………………………………………… 33

7. Anexe ……………………………………………………………………………………………………………… 34

2

Listă de figuri

2.1 Imagini cu persoanele din setul de date ………………………………………………………………. 8

2.2 Imaginea originală, imaginea binarizată
ș
i vectorii de caracteristici ……………………….. 9

2.3 SVM pentru clase multiple ………………………………………………………………………………… 9

2.4 Structura clasificatorului …………………………………………………………………………………. 10

2.5 Matricea de confuzie ………………………………………………………………………………………. 10

2.6 Eticheta rezultată
ș
i scorurile pentru fiecare clasă ………………………………………………. 10

3.1 Orientarea gradientului după varia
ț
ia intensită
ț
ii culorii ………………………………………. 10

3.2 Calculul gradientului ………………………………………………………………………………………. 10

3.3 Realizarea histogramei gradien
ț
ilor orienta
ț
i ……………………………………………………… 13

3.4 Puncte liniar separabile
ș
i dreptele de decizie …………………………………………………….. 14

3.5 Suprafa
ț
a de decizi e ………………………………………………………………………………………… 15

3.6
Vectorii
suport
ș
i
hiper-planul
optim
………………………………………………………………….

16

3.7 Modificarea dimensiunii vectorului de caracteristici …………………………………………… 18

4.1 Imaginile unui subiect folosite pentru antrenare …………………………………………………. 21

4.2 Imaginea unui subiect folosită pentru validare ……………………………………………………. 21

4.3 Descriptori de tip cascade Haar specifici ochilor, nasului
ș
i gurii …………………………. 22

4.3
Mediul
de
dezvoltare
MATLAB
App
Builder
……………………………………………………..

22

4.4 Interfa
ț
a aplica
ț
iei ………………………………………………………. ………………………………….. 23

4.5 Structura setului de date ………………………………………………………………………………….. 23

4.6 Posibile mesaje de eroare ………………………………………………………………………………… 24

4.7a Rezultatul predic
ț
iei cu o imagine ce descrie o persoană cunoscută ……………………. 24

4.7b Rezultatul predic
ț
iei cu o imagine ce descrie o persoană necunoscută ………………… 24

4.8 Obiect de tipul ImageDatastore ………………………………………………………………………… 25

4.9 Obiect de tipul ClassificationECOC ………………………………………………………………….. 26

4.9 Compara
ț
ie între c ontururile ob
ț
inute cu diverse mărimi ale celulei ……………………… 27

4.10 Matricea de confuzie …………………………………………………………………………………….. 29

3

4.11
Predic
ț
ia
identită
ț
ii
unei
persoane
cunoscute
……………. ……………………………………….

29

4.12 Predic
ț
ia identită
ț
ii unei persoane necunoscute …………….. ………………………………….. 30

4

1. Introducere

1.1 Structura lucrării

Din punct de vedere al con
ț
inutului, lucrarea este structurată în cinci capitole.

În
introducere
sunt
prezentate
motiva
ț
ia
alegerii
temei
recunoa
ș
terii
faciale,

compara
ț
ia
cu
alte
sisteme
de
securitate
biometrice,
posibile
modalită
ț
i
de
implementare
ș
i

obiectivul lucrării de fa
ț
ă.

Capitolul
2
ilustrează
necesitatea
sistemelor
de
identificare
facială
în
diverse

contexte
ș
i
vasta
expa nsiune
pe
care
acestea
le-au
suferit
în
ultima
perioadă,
urmând

fie

prezenta
ț
i conceptual p a
ș
ii necesari pentru atingerea obiectivul ui.

În
capitolul
3
este
descrisă
în
detaliu
partea
teoretică
a
procesului
de
extragere
a

vectorilor
de
caracteristici
din
imagini
prim
metoda
histogramei
orientării
gradien
ț
ilor,

felul
în
care
ace
ș
tia
sunt
folosi
ț
i
pentru
antrenarea
clasific atorului,
modul
de
predic
ț
ie

propriu-zis, precum
ș
i principalele avantaje
ș
i dezavantaje ale acestei metode.

Capitolul
4
conturează
felul
în
care
a
fost
realizată
interfa
ț
a,
legătura
acesteia
cu

algoritmul
de
antrenare
ș
i
recunoa
ș
tere,
tehnologia
ș
i
toolbox-urile
folosite
în
proces,

modul
de
utilizare
al
aplica
ț
iei
ș
i
setul
de
date
folosit.
Sunt
comentate
apoi
rezultatele

ob
ț
inute.

Lucrarea
se
încheie
cu
capitolul
de
concluzii
în
care
sunt
eviden
ț
iate
posibile

dezvoltări
ulterioare
ale
aplica
ț
iei,
compara
ț
iile
abordării
recunoa
ș
terii
faciale
cu

algoritmul
Support
Vector
Machine
cu
cea
bazată
pe
re
ț
ele
convolu
ț
ionale
ș
i
aspecte

relevante legate de aplica
ț
ie.

1.2 Motiva
ț
ia lucrării

Conform
piramidei
lui
Maslow
,
ce
ilustrează
ierarhia
de
nevoi
ale
omului,
urmând

1
elementelor
esen
ț
iale
vie
ț
ii
(apa,
mâncarea
ș
i
adăpostul),
se
află
securitatea
ș
i
siguran
ț
a.

Până
recent,
problema
securită
ț
ii
cibernetice
nu
a
fost
prezentă
în
vie
ț
ile
noastre,
doar
cea
a

securită
ț
ii
fizice.
Însă,
odată
cu
avansurile
tehnologiei
ș
i
cu
rapida
digitalizare
a
lumii

înconjurătoare,
apare
ș
i
nevoia
de
protec
ț
ie
a
datelor
ș
i
a
dispozitivelor
împotriva
furtului

de informa
ț
ie.

Majoritatea
sistemelor
sunt
protejate
prin
folosirea
unei
parole.
Impedimentul
în

această
abordare
este
că,
de
ș
i
parolele
sunt
stocate
în
format
criptat,
ele
pot
fi
“sparte”
cu

ajutorul
programelor
specializate
ce
generează,
în
paralel,
mii
de
combina
ț
ii
pe
secundă

1
Abraham Maslow –

https://en.wikipedia.org/wiki/Abraham_Maslow

5

(John
the
Ripper
),
a
ș
a
cum
este
men
ț
ionat
ș
i
în
[5].
Din
această
cauză,
au
fost
introduse

2
sistemele
biometrice

sisteme
bazate
pe
autentificare
prin
recunoa
ș
terea
irisului,
a

amprentei sau a fe
ț
ei.

Prin
recunoa
ș
terea
facială
se
în
ț
elege
compararea
caracteristicilor
faciale
ale
unui

individ,
extrase
dintr-o
poză,
un
cadru
de
la
o
cameră
de
securitate
sau
dintr-o
captură

făcută
în
timp
real,
cu
un
set
de
caracteristici
ce
provin
din
imagini
stocate
într-o
bază
de

date
ce
con
ț
ine
imagi ni
ale
persoanelor
cunoscute.
Această
opera
ț
iune
este
realizată
pe

scară
largă,
de
la
aeroporturi
ș
i
locuri
publice
până
la
deblocarea
dispozitivelor
mobile
de

uz personal, precum telefoane, tablete
ș
i laptop-uri.

Tehnica
recunoa
ș
terii
faciale,
la
fel
ca
ș
i
celelalte
tehnici
biometrice,
prezintă

propriile
avantaje
ș
i
dezavantaje.
Aceasta
este
o
metodă
neinvazivă,
informa
ț
iile
fiind
luate

fără
contact
direct
cu
individul,
poate
fi
realizată
în
masă,
nu
necesită
echipament
dedicat

pentru
colectarea
de
date
(precum
un
scanner
de
retină
sau
de
amprentă)
ș
i
majoritatea

dispozitivelor
au
această
capacitate
încorporată
pentru
autentificarea
mai
rapidă
ș
i
fără

necesitatea
de
re
ț
inere
a
parolelor.
Totu
ș
i,
la
fel
ca
oricare
altă
metodă,
ea
poate
fi
trucată

într-un
fel
sau
altul
sau
poate
sa
prezinte
probleme
când
imaginea
nu
este
clară
ori

subiectul
prezintă
schimbări
majore
fa
ț
ă
de
imaginea
stocată
ce
îl
reprezintă
(prezen
ț
a
sau

absen
ț
a
bărbii,
a
oche larilor,
modificarea
drastică
culorii
părului
sau
a
lungimii
acestuia,

accidente
ce
au
lăsat
semne
etc.).
În
general
se
recomandă
folosirea
autentificării
cu
factor

multiplu (MFA
), precum o combina
ț
ie de recunoa
ș
tere facială
ș
i introducerea unei parole.

3
Un
studiu
realizat
la
începutul
anilor
2000
în
Universitatea
din
Toronto
de
către

Anthony
Norcia
ș
i
Giuseppe
Mirabella
asupra
formării
mecanismului
vizual
al
bebelu
ș
ilor,

arată
ca
oamenii
sunt
capabili

recunoască
fe
ț
e
încă
de
la
vârsta
de
4-5
luni,
a
ș
a
cum
este

prezentat
în
[2].
Dacă
această
sarcină
este
atât
de
u
ș
oară
pentru
oameni,
cât
de
complicată

poate fi pentru o ma
ș
ină de calcul?

O
posibilă
abordare
în
recunoa
ș
terea
facială
este
cea
bazată
pe
contururi
ale
fe
ț
ei

realizată
prin
extragerea
vectorilor
de
caracteristici
din
imagini
cu
metoda
histogramei

orientării
gradien
ț
ilor
(HOG
)
ș
i
antrenarea
unui
clasificator
cu
algoritmul
vectorilor
suport

4
(SVM
)
pe
baza
acestora,
precum
este
specificat
ș
i
în
[11].
Odată
antrenat,
clasificatorul

5
returnează
identitatea
cuiva.
De
asemenea,
la
întâmpinarea
de
persoane
necunoscute,
acesta

poate
fi
reantrenat
în
a
ș
a
fel
încât
identită
ț
ile
acestora

devină
noi
clase
recunoscute
în

modelul deja existent.

Un
concurent
principal
al
acestei
abordări
este
implementarea
bazată
pe
re
ț
ele

neuronale
convolu
ț
ionale
(CNN
),
care
se
bazează
pe
crearea
unui
“plase”

6
multi-dimensionale
de
neuroni,
sub
forma
unui
graf
conex.
Acesta
oferă
o
scalabilitate

ridicată,
însă
necesarul
de
putere
de
calcul
este
superior
abordării
specificate
anterior,
în

2
John the Ripper Password Cracker –

https://www.openwall.com/john/

3
Multi-factor authentication –

https://en.wikipedia.org/wiki/Multi-factor_authentication

4
Histogram of Oriented Gradients –

Histogram of Oriented Gradients explained using OpenCV

5
Support Vector Machine –

https://scikit-learn.org/stable/modules/svm.html

6
Convolutional Neural Networks –

http://cs231n.github.io/convolutional-networks/

6

general
antrenarea
acestora
ș
i
stocarea
modelelor
realizându-se
prin
intermediul
serviciilor

de
calcul
paralel
ș
i
a
ma
ș
inilor
virtuale
din
cloud,
de
unde
ș
i
costul
ridicat
al
operării

acestora. O compara
ț
ie detaliată a acestor două abordări este realizată în [1].

1.3 Obiectivul lucrării

Se
dore
ș
te
antrenarea
unui
clasificator
facial,
pe
baza
caracteristicilor
imaginilor

dintr-un
set
dat,
capabil

identifice
ș
i

numească
indivizii
cunoscu
ț
i
ș
i,
totodată,
luarea

unei
decizii
în
cazul
unei
încercări
de
recunoa
ș
tere
cu
o
persoană
necunoscută,
precum
ș
i

stocarea
modelului
pentru
utilizări
viitoare.
Interac
ț
iunea
dintre
utilizator
ș
i
algoritm
este

realizată
prin
intermediul
unei
aplica
ț
ii
desktop
ce
permite
selec
ț
ia
setului
de
date
pe
baza

căruia
se
face
antrenarea
ș
i
încărcarea
ulterioară
de
imagini
cu
indivizi
ce
se
dore
ș
te
a
fi

identifica
ț
i,
urmând
ca
această

afi
ș
eze
eticheta
corespu nzătoare
ș
i
un
procent
de

acurate
ț
e sau faptul că persoana este necunoscută.

7

2. Recunoa
ș
terea facială

2.1 Recunoa
ș
terea facială în via
ț
a cotidiană

În
ziua
de
azi,
sistemele
de
recunoa
ș
tere
facială
au
luat
amploare,
oferind
solu
ț
ii
de

securitate
fiabile,
astfel
captând
aten
ț
ia
corpora
ț
iilor
ș
i
organiza
ț
iilor
guvernamentale
din

întreaga
lume.
Totodată,
aceste
sisteme
oferă
vaste
avantaje
în
compara
ț
ie
cu
alte
sisteme

de
securitate
biometrice,
precum
scanarea
amprentelor
sau
a
retinei.
Recunoa
ș
terea
facială

este
posibilă
de
la
distan
ț
ă,
fără
a
interac
ț
iona
cu
persoana
respectivă
ș
i
fără
echipament

specializat în colectarea de date biometrice.

Având
ca
scop
reducerea
criminalită
ț
ii,
aceste
sisteme
sar
în
ajutorul
multor

organiza
ț
ii
prin
ident ificarea
persoanelor
cu
cazier
judiciar
sau
oricare
alte
probleme

juridice.
De
exemplu,
aeroportul
din
Atlanta,
SUA
a
inaugurat
în
Noiembrie
2018
primele

terminale
cu
recunoa
ș
tere
facială
automată
.
Cu
ajutorul
acestora,
persoanele
ce
au

7
interdic
ț
ie în părăsirea
ț
ării pot fi identificate mult mai rapid.

De
asemenea,
este
posibilă
identificarea
angaja
ț
ilor
unei
firme
ș
i
permiterea

accesului
acestora
în
diverse
clădiri,
incinte
sau
birouri,
deblocarea
dispozitivelor
mobile

precum
smartphone-uri,
tablete,
laptop-uri,
sau
chiar
ș
i
confirmarea
identită
ț
ii
unei

persoane
la
crearea
de
conturi
pentru
platforme
ce
necesită
un
nivel
de
securitate
ridicat,

precum aplica
ț
iile de b anking online.

Recunoa
ș
terea
facială
este
prezentă
ș
i
în
serviciile
de
stocare
a
pozelor
în
cloud,

precum
Google
Photos,
sau
pe
re
ț
elele
de
socializare,
automatizând
procesul
de
identificare

ș
i etichetare a prietenil or din pozele postate.

2.2 Conceptul de recunoa
ș
tere facială

Problematica
recunoa
ș
terii
faciale
reprezintă
o
sarcină
dificilă
ș
i
provocatoare.

Pentru
realizarea
recunoa
ș
terii,
trebuie
luate
în
considerare
multiple
aspecte
precum
sexul,

vârsta,
rasa,
expresia
facială
ș
i
a
ș
a
mai
departe.
Condi
ț
iile
de
iluminare
ș
i
orientarea
joaca,

de
asemenea,
un
rol
important
în
procesul
recunoa
ș
terii.
Acesta
este
motivul
pentru
care

identificarea
persoanelor
prin
diverse
acte
de
identitate
este
deseori
realizată
din
poze

standard,
cu
fundal
neutru,
expresie
facială
neutra
ș
i
este
necesară
schimbarea
actului
de

identitate la apari
ț
ia semnelor sau la schimbări majore în înfă
ț
i
ș
are.

Recunoa
ș
terea
facială
este
o
problemă
de
clase,
unde
este
numărul
de

K

K

persoane
cunoscute.
Însă
algoritmul
Support
Vector
Machine
realizează
o
clasificare

7
First US Face Recognition Terminal Opens At Atlanta Airport –

https://learningenglish.voanews.com/a/first-us-face-recognition-terminal-opens-at-atlanta-airport/4688125.ht
ml

8

binară.
Deci,
este
necesară
reformularea
problemei
ș
i
reinterpretarea
rezultatelor
furnizate

de
clasificator,
precum
este
men
ț
ionat
în
[9].
Problema
recunoa
ș
terii
faciale
este
formulată

sub
forma
unei
probleme
în
spa
ț
iul
diferen
ț
elor,
spa
ț
iu
ce
vizează
discrepan
ț
a
dintre
doua

imagini.
Devine
astfel
posibilă
abordarea
clasificării
binare
pe
care
SVM
o
oferă
într-una

din următoarele metode:


fie
se
realizează
câte
o
suprafa
ț
ă
de
decizie
pentru
fiecare
persoană
ce
îl

separă
pe
respectivul
de
restul
(pentru
clase
se
generează

N

N

clasificatori,
în
care
pentru
clasa
,
etichetele
notate
vor
fi
pozitive
ș
i

i

i

toate celelalte negative)


fie
câte
una
pentru
fiecare
pereche
de
indivizi,
creându-se
un
graf
de
decizie

pentru
determinarea
clasei
din
care
face
parte
noul
punct
(pentru
clase
se

N

generează
clasificatori, fiind verificată fiecare pereche de clase)
2
N
(
N

1
)

A
doua
abordare
conduce
la
rezultate
mai
precise
însă
este
mai
costisitoare
din
punct
de

vedere
computa
ț
ional.
Modificând
interpretarea
hiper-planului
generat
de
algoritm,
este

generată
o
metrică
de
similitudine
ce
provine
din
caracteristicile
de
diferen
ț
ă
a
mai
multor

persoane.

Conceptual,
procesul
integral
de
recunoa
ș
tere
facială
presupune
următorii
pa
ș
i,
a
ș
a

cum este specificat
ș
i în [4]:

1.
Crearea unui set de imagini cu persoane pe care dorim sa le identificam

a.
este
important
ca
o
persoană

fie
surprinsă
în
mai
multe
ipostaze
ș
i

condi
ț
ii de iluminare

b.
fiecărei
persoane
îi
este
atribuită
o
etichetă
ce
va
reprezenta
o

categorie a clasificatorului.

Fig. 2.1 – Imagini cu persoanele din setul de date

2.
Parcurgerea
directoarelor
ce
con
ț
in
imaginile
normalizate
ș
i
extragerea

vectorului de caracteristici pentru fiecare imagine

a.
se
face
trecerea
de
la
spa
ț
iul
de
culoare
RGB
la
vectori
numerici

unidimensionali

b.
este
creata
o
matrice
în
care
fiecare
rând
reprezintă
o

N
×
M

observa
ț
ie,
un
vector
de
caracteristic
de
lungime
,
ș
i
o
matrice

M

ce
con
ț
ine
etichetele
celor
observa
ț
ii
(putem
considera
N
×
1

N

etichetele ca fiind numele persoanelor)

9

Fig. 2.2 – Imaginea originală, imaginea binarizată
ș
i vectorii de caracteristici

3.
Antrenarea
clasificatorului
pe
baza
vectorilor
de
caracteristici
ș
i
a

etichetelor ce îi înso
ț
esc

a.
se
generează
un
model
multi-clasă
de
hiper-plane
separatoare
prin

aplicarea
algoritmului
Support
Vector
Machine
între
to
ț
i
vectorii
de

caracteristici

b.
ace
ș
tia
sunt
separa
ț
i
de
hiper-planele
respective,
vectorii
rezulta
ț
i
în

urma
extragerii
lor
din
pozele
aceleia
ș
i
persoane
formând
grupuri

separabile de vectorii rezulta
ț
i din pozele alteia

Fig. 2.3 – SVM pentru clase multiple

10

Fig. 2.4 – Structura clasificatorului

4.
Testarea clasificatorului pe setul de date de test

a.
setul pentru testare con
ț
ine imagini etichetate ale acelora
ș
i persoane

b.
etichetele
cunoscute
sunt
comparate
cu
cele
prezise
de
clasificator
ș
i

este realizată matricea de confuzie

8

Fig. 2.5 – Matricea de confuzie

(pentru 5 indivizi, matricea are dimensiunea
, unde elementul de pe pozi
ț
ia
5
×
5

este cunoscut ca având eticheta
iar clasificatorul le încadrează în clasa
)
i
,
)
(
j
i
j

5.
Predic
ț
ia individuală a identită
ț
ii unui individ

a.
încărcarea unei imagini căreia îi va fi extras vectorul de caracteristici

b.
introducerea
acestuia
în
clasificator
ș
i
ob
ț
inerea
unei
etichete
ș
i
a

unui scor pentru rezultatul ob
ț
inut

Fig. 2.6 – Eticheta rezultată
ș
i scorurile pentru fiecare clasă

8
Matricea de confuzie –

http://inf.ucv.ro/documents/rstoean/7.%20Evaluarea%20performantei.pdf

11

3. Problema recunoa
ș
terii faciale
ș
i solu
ț
ia propusă

3.1 Histograma Orientării Gradien
ț
ilor

O
tehnică
des
întâlnită
în
vederea
artificială
cu
scopul
detec
ț
iei
obiectelor
ș
i
a

persoanelor
este
extragerea
descriptorilor
de
tip
histogramă
a
orientării
gradien
ț
ilor,

precum
este
men
ț
ionat
în
[3].
Această
tehnică
contorizează
numărul
de
apari
ț
ii
a
unei

anume orientări a gradientului într-o regiune din imagine.

Gradientul
unei
imagini
este
definit
ca
schimbarea
direc
ț
ională
a
intensită
ț
ii
sau
a

culorii într-o imagine.

f

,
]

=
[

f

x

f

y

Fig 3.1 – Orientarea gradientului după varia
ț
ia intensită
ț
ii culorii

Magnitudinea
gradientului
specifică
cât
de
abruptă
este
schimbarea
ș
i
este
dată
de

rela
ț
ia:

|

f
|
|

|
=

(
)

f

x
2
+
(
)

f

y
2

Fig. 3.2 – Calculul gradientului

12

Putem
descrie
aspectul
local
ș
i
forma
unei
fe
ț
e
dintr-o
imagine
prin
distribu
ț
ia

orientării
muchiilor.
Ob
ț
inerea
descriptorilor
este
realizată
prin
parcurgerea
imaginii
cu
o

celulă
ș
i
calcularea,
la
fiecare
pas,
a
histogramei
orientării
muchiilor
din
pixelii
ce

constituie
celula
respectivă.
Descriptorul
întregii
imagini
este
dat
de
combinarea

histogramelor
tuturor
celulelor.
Performan
ț
a
algoritmului
de
extragere
a
descriptorilor
este

dată
de
normalizarea
histogramelor
locale
prin
calcularea
unei
măsuri
a
intensită
ț
ii
pe
o

regiune
mai
mare
ș
i
apoi
folosind
măsura
pentru
normalizarea
tuturor
celulelor
din
regiune.

În acest fel se cre
ș
te gradul de invarian
ț
ă la schimbarea condi
ț
iilor de iluminare.

Pa
ș
ii necesari o b
ț
inerii gradientului sunt:

1.
Calculul magnitudinii fiecărui pixel

a.
se efectuează o convolu
ț
ie pe direc
ț
ie orizontală cu un filtru
D
x

;

0

1
]

D
x
=
[
1

I
x
=
I
*
D
x

b.
se efectuează o convolu
ț
ie pe direc
ț
ie ve rticală cu un filtru
D
y

;

0

1
]

D
y
=
[
1
T

I
y
=
I
*
D
y

2.
Calculul gradientului orientat pentru fiecare pixel

a.
r
c
t
g
θ
=
a
I
x
I
y

b.
8
0
/
π

[

8
0
,
1
8
0
]

α
=
θ
*
1

1

c.
Se determina gradientul

sau
,
α
=
α
s
i
g
n
e
d
=
α

>
0
6
0
,
α
α
s
i
g
n
e
d
=
α
+
3

<
0

3.
Calculul întregii histograme a gradien
ț
ilor orienta
ț
i

a.
Pe
împarte
domeniul
în
sectoare
egale,
în
care
primul

0
,
3
6
0
]

[

k

sector
cuprinde
unghiuri
între
ș
i
,
al
doilea
sector
unghiuri

0

D
|

|
<
k

între
ș
i
ș
i
a
ș
a
mai
departe,
unde

D
|

|
<
k

D
|

2

|
<
k

k
=
{
4
,
,
,
8
,
6
,
.
.
}
8
9
1
3
.

b.
Pentru
fiecare
sector
se
numără
pixelii
a
căror
orientare
cade
în

sectorul respectiv

c.
Se
ponderează
numărul
de
pixeli
din
fiecare
sector
cu
una
dintre

op
ț
iunile:

i.
voturi binare

ii.
voturi bazate pe magnitudinea gradientului

iii.
voturi bazate pe pătratul magnitudinii

iv.
voturi bazate pe rădăcina pătrată a magnitudinii

13

Fig. 3.3 – Realizarea histogramei gradien
ț
ilor orienta
ț
i

Este
necesară
gruparea
celulelor
în
structuri
spa
ț
iale
mai
mare,
numite
blocuri,

pentru
a
ț
ine
cont
de
varia
ț
iile
de
contrast
ș
i
iluminare.
Descriptorul
HOG
este
vectorul

format
din
componentele
ce
trebuie
normalizate
ale
histogramelor
ce
apar
ț
in
fiecărei
celule

din
bloc.
Deoarece
blocurile
se
suprapun
par
ț
ial,
ele
contribuie
de
mai
multe
ori
la

descriptorul
final.
Tipurile
principale
de
blocuri
sunt:
R-HOG,
bloc
rectangular,
ș
i
C-HOG,

bloc
circular.
Blocurile
R-HOG
au
formă
de
grilă
pătrată
ș
i
este
definită
prin
trei
parametri:

numărul
de
celule
din
bloc,
numărul
de
pixeli
dintr-o
celulă
ș
i
numărul
de
pozi
ț
ii
în

histograma unei celule.

Dalal
ș
i
Triggs
numesc
următoarele
patru
metode
pentru
normalizarea
blocurilor.

9
Fie
vectorul
ne-normalizat
con
ț
inând
histogramele
unui
bloc.
Se
define
ș
te
norma

v

|
v
|
|

|
k

k

cu
ș
i
o
constantă
de
valoare
foarte
mică.
Factorul
de
normalizare
se

k
=
{
1
,
}
2

e

calculează cu una dintre următoarele norme:

L2-norm:

f
=
v

|
|
v
|
|
+
e
2
2
2

L1-norm:
f
=
v
|
|
v
|
|
+
e
1

L1-sqrt:

f
=

v
|
|
v
|
|
+
e
1

9
N. Dalal and B. Triggs – Histograms of oriented gradients for human detection – Conference on Computer

Vision and Pattern Recognition (CVPR), 2005

14

3.2 Algoritmul Support Vector Machine

Algoritmul
Support
Vector
Machine
reprezintă
un
set
de
modele
de
învă
ț
are

supravegheată
folosit
pentru
problemele
de
clasificare
binară.
Clasificatorul
este
antrenat

10
pe
seturi
de
date
etichetate
ce
descriu
obiecte
apar
ț
inând
unei
anumite
categorii,
mai
apoi

urmând
sa
fie
folosit
pentru
a
identifica
noi
obiecte
ș
i
a
le
încadra
într-o
anumită
clasă.

Obiectele
sunt
adesea
descrise
de
vectori
numerici,
dar
pot
fi,
de
asemenea,
folosite
ș
i
alte

reprezentări.
Pentru
încadrarea
obiectelor
în
mai
multe
clase
posibile,
problema
de
clasă

multiplă trebuie redusă la o problemă de clasificare binară.

Ceea
ce
SVM
încearcă

ob
ț
ină
este
un
hiper-plan
separă
date
liniar
separabile
ce

descriu
două
clase
posibile,
a
ș
a
cum
este
detaliat
în
[10].
După
calculul
suprafe
ț
ei
de

decizie,
noi
puncte
necunoscute
pot
fi
încadrate
în
una
din
cele
doua
clase
existente
cu

ajutorul acesteia.

În
figura
3.4
sunt
reprezentate
două
seturi
de
puncte
ș
i
trei
drepte.
De
ș
i
toate

dreptele
reu
ș
esc

separe
punctele
ro
ș
ii
de
cele
verzi,
putem
spune,
fără
a
efectua
vreun

calcul
sau
măsurătoare,

dreptele
(1)
ș
i
(2)
nu
sunt
la
fel
de
favorabile
precum
(3).

Distan
ț
a
dintre
drepte le
(1),
(2)
ș
i
câteva
dintre
puncte
este
mult
mai
mică
decât
în
cazul

dreptei
(3).
Astfel,
dacă
am
alege

clasificam
un
alt
punct
ro
ș
u,
de
exemplu,
ar
fi
acesta

încadrat
corect
împreună
cu
celelalte
puncte
din
clasa
lui,
sau
ar
fi
etichetat
ca
un
punct

verde? Linia (3) oferă cel mai bun grad de generalizare.

Fig. 3.4 – Puncte liniar separabile
ș
i dreptele de decizie

10
Supervised Learning –

https://skymind.ai/wiki/supervised-learning

15

În
exemplul
din
fig.
3.4,
punctele
se
află
în
spa
ț
iul
bidimensional
iar
ele
sunt

separate
de
o
dreaptă,
un
spa
ț
iu
unidimensional.
Astfel,
când
punctele
apar
ț
in
un
spa
ț
iu
de

grad
superior,
dreapta
devine
un
hiper-plan.
În
spa
ț
iul
unidimensional,
acesta
este
un

punct;
în
spa
ț
iul
bidim ensional,
o
dreaptă;
în
spa
ț
iul
tridimensional,
un
plan.
Se
observă
ca

un hiper-plan este întotdeauna cu o dimensiune mai mic decât datele pe care le separă.

Fig. 3.5 – Suprafa
ț
a de decizie

Ecua
ț
ia ce desc rie un hiper-plan este dată de:

,
(
x
)

f
=
w
·
x
+
b
=
0

unde
este
normal
la
hiper-plan,
iar
o
constantă.
Dacă
un
punct
apar
ț
ine

w

b

x

hiper-planului,
,
altfel
sau
.
Pe
baza
acestor
inegalită
ț
i
vom

(
x
)

f
=
0

(
x
)

f
<
0

(
x
)

f
>
0

decide
dacă
un
punct
apar
ț
ine
unei
clase
sau
alteia.
Pentru
a
putea
calcula
trebuie

(
x
)

f

aflate necunoscutele
ș
i
.

w

b

Este
cunoscut
faptul
că,
pentru
punctele
ce
apar
ț
in
unei
păr
ț
i
pozitive
hiper-planului

(
), ecua
ț
ia este:

x
+

(
x
)

f
+
=
w
·
x
+
+
b
>
0

Se impune condi
ț
ia ca punctele ce apar
ț
in păr
ț
ii pozitive să îndeplinească:

(
x
)

f
+
=
w
·
x
+
+
b
>
δ

Prin
conven
ț
ie,
.
În
esen
ț
ă,
este
o
func
ț
ie
discriminant
doar
al
cărei
semn

δ
=
1

(
x
)

f

este relevant. Acest lucru dă na
ș
tere următoarelor ecua
ț
ii:

w
·
x
+
+
b

1

w
·
x

+
b

1

16

Fig. 3.6 – Vectorii suport
ș
i hiper-planul optim

Pentru
fiecare
punct
introducem
o
nouă
variabilă
,
eticheta,
care,
pentru

x
i

y
i

x
+

ș
i, pentru
,
. Astfel, ecua
ț
iile anterioare pot fi reduse la:

y
i
=
1

x

y
i
=
1

(
w
)

y
i
·
x
i
+
b

1

0

Pentru punctele ce apar
ț
in hiper-planului avem:

(
w
)

(
1
)

y
i
·
x
i
+
b

1
=
0

Pentru
două
puncte
ș
i
aflându-se
la
cea
mai
scurtă
distan
ț
ă
de
hiper-plan,

x
+

x

putem calcula această lă
ț
ime astfel:

x
)

(
2
)
W
=
(
+

x

·
w
|
|
w
|
|

Din (1)
ș
i (2) o b
ț
inem:

W
=
|
|
w
|
|
1
+
b
+
1

b
=
2
|
|
w
|
|

Dorim
ca
distan
ț
a

fie
maximă,
deci
avem
ca
obiectiv
maximizarea
lui
,

W

echivalent cu a spune că putem minimiza
. Problema devine:
|
w
|
|

|

i
n
|
|
w
|
|
,
y
(
w
)

m

i
·
x
i
+
b

1

0

Problema
de
minimizare
poate
fi
rezolvată
prin
folosirea
multiplicatorilor

Lagrange.
Func
ț
ia
care
se
dore
ș
te
a
fi
minimizată
este
sau,
echivalent,
.
Se

|
w
|
|

|

|
|
w
|
|
2
1
2

preferă
nota
ț
ia
din
urmă
deoarece
este
convenabilă
în
viitor
la
derivare.
Având

constrângerea de mai sus, func
ț
ia Lagrange are forma:

|
|
w
|
|
y
(
w
)
L
p
=
2
1
2


l
i
α
i
i
·
x
i
+
b
+

l
i
α
i

17

Pentru rezolvare, se derivează
în func
ț
ie de variabilele

ș
i
:

L

w

b

y
x

L

w
=
w


l
i
α
i
i
i

=
0

y

b

L
=

l
i
α
i
i
=
0

Rezultatul la care se ajunge din aceste două calcule este:

y
x
w
=

l
i
α
i
i
i

Folosind această rela
ț
ie în
ob
ț
inem:

L
p

α
y
y
x
L
D
=

l
i
α
i

2
1

l
i
α
i
j
i
j
i
·
x
j

unde
indicii
ș
i
sunt
folosi
ț
i
pentru
a
diferen
ț
ia
însumările
ce
aveau
loc
ini
ț
ial
în
de

i

j

L
p

cele
ce
au
fost
înlocuite
ulterior.
Această
ultimă
ecua
ț
ie
se
nume
ș
te
problema
Lagrange

duală
ș
i maximizarea e i este echivalentă cu minimizarea problemei Lagrange ini
ț
ială.

Motivul
pentru
care
se
face
această
trecere
este
acela

acum
ecua
ț
ia
nu
mai

depinde
decât
de
produsul
scalar
al
perechilor
.
Ambii
ș
i
au
fost
substitui
ț
i,
iar

x

w

b

produsul
scalar
poate
fi,
mai
târziu,
înlocuit
cu
oricare
altă
func
ț
ie
nucleu
ce
depinde
de
x

pentru performan
ț
e îmbunătă
ț
ite în anumite situa
ț
ii.

Pentru
a
maximiza
,
se
pot
folosi
diverse
metode
de
programare
pătratică,

L
D

precum
algoritmul
SMO
.
Acesta
va
furniza
necunoscutele
ș
i
ce
sunt
folosite
pentru

w

b

11
determinarea func
ț
iei de decizie
.
(
x
)

f

O
problemă
des
întâlnită
este
încercarea
separării
unor
puncte
ce
nu
sunt
liniar

separabile,
lucru
ce
va
genera
coeficien
ț
i
Lagrange
relativ
mari
ș
i
hiper-planul
optimul
nu

va
fi
găsit,
pentru
ca
nu
există.
Pentru
a
preveni
acest
lucru,
se
introduc
noi
variabile
ce

controlează
cât
de
mult
pot
cre
ș
te
coeficien
ț
ii.
Acest
lucru
permite
determinarea

hiper-planului în prezen
ț
a unor puncte clasificate eronat.

Astfel,
se
introduce
variabila
ce
relaxează
condi
ț
iile
ini
ț
iale,
constrângerile

ξ

devenind:

w
·
x
+
+
b

1

ξ
i

w
·
x

+
b

1
+
ξ
i

ξ
i

0

11
Sequential Minimal Optimization –

http://fourier.eng.hmc.edu/e176/lectures/ch9/node9.html

18

Pentru introducerea acestor condi
ț
ii în problema de minimizare:

|
|
w
|
|
2
1
2
+
C

ξ
i

unde
este
limita
superioară
a
erorilor
de
clasificare
admise
ș
i
o
constantă
aleasă

ξ
i

C

de utilizator în care valori mai mari pentru
corespund unei erori mai mari.

C

Problema
de
optimizare
nu
se
schimbă
foarte
mult
în
urma
introducerii

constrângerilor.
Ecua
ț
ia
rămâne
neschimbată,
iar
constrângerile
vizează
doar
coeficien
ț
ii

Lagrange.
Prin
această
abordare
se
asigură
găsirea
unei
solu
ț
ii
fără
ca
multiplicatorii
sa

crească prea mult.

α
y
y
x
L
D
=

l
i
α
i

2
1

l
i
α
i
j
i
j
i
·
x
j

y
x

L

w
=
w


l
i
α
i
i
i

=
0

y

b

L
=

l
i
α
i
i
=
0

0

α
i

C

În
felul
acesta
problema
este
rezolvată
ca
în
cazul
anterior,
doar

se
permite

clasificarea gre
ș
ită a un or puncte.

Dacă
vectorii
nu
par
a
fi
separabili,
este
posibil
ca,
prin
modificarea
dimensiunii

x

curente, ace
ș
tia să dev ină separabili.

Fig. 3.7 – Modificarea dimensiunii vectorului de caracteristici

19

În
figura
3.7,
când
punctele
apar
ț
in
spa
ț
iului
bidimen sional,
se
observă
faptul
ca

acestea
nu
sunt
liniar
separabile
însă,
prin
trecerea
la
spa
ț
iul
tridimensional,
acest
lucru

devine
posibil.
Este
men
ț
ionat
anterior
faptul
ca
produsul
scalar
poate
fi
substituit
cu
o

func
ț
ie nucleu. Func
ț
iile nucleu transpune vectorul de caracter istici
într-un spa
ț
iu diferit.

x

Prin aplicarea func
ț
iei nucleu, problema devine:

α
y
y
K
(
x
,
)
L
D
=

l
i
α
i

2
1

l
i
α
i
j
i
j
i
x
j

Printre cele mai folosite nuclee se numără:

(
x
,
)
K
i
x
j
=
(
x
)
i
·
x
j
+
c
n

(
x
,
)
K
i
x
j
=
2
σ
2
|
|
x
·
x
|
|
i
j
2

Oricare
poate
constitui
o
func
ț
ie
nucleu
ș
i
alegerea
sa
este
deseori
specifică

(
x
,
)

f
i
x
j

setului de date pe care algoritmul este antrenat.

SVM
este
prin
natura
sa
un
algoritm
de
clasificare
binară.
Un
obiect
poate

apar
ț
ină
unei
clase
sau
alteia.
Totu
ș
i,
algoritmul
poate
fi
folosit
în
probleme
cu
clase

multiple.
Acest
lucru
este
posibil
prin
reducerea
problemei
de
clasă
multiplă
la
o
problemă

de clasificare binară prin una dintre următoarele metode:

1.
1:N

2.
1:1

Prima
abordare
presupune
construc
ț
ia
de
clasificatoare
în
număr
egal
cu
etichetele

ce
marchează
clasele
existente
ș
i
trecerea
noului
element
prin
toate,
fiecare
spunând
dacă

apar
ț
ine
clasei
sale
sau
celorlalte.
Eticheta
prezisă
este
dată
de
clasificatorul
care
o
poate

identifica cu cea mai mică eroare.

A
doua
abordare
implică
construc
ț
ia
unui
clasificator
pentru
fiecare
pereche
de

etichete existente, eticheta prezisă fiind cea selectată de cei mai mul
ț
i clasificatori.

20

4. Prezentarea aplica
ț
iei

4.1 Prezentare generală

Aplica
ț
ia
prezentată
permite
identificarea
mai
multor
persoane
dintr-un
grup

cunoscut.
Aceasta
este
compusă
din
algoritmul
de
clasificare
ș
i
interfa
ț
a
cu
utilizatorul.

Pentru
realizare
s-a
folosit
mediul
de
dezvoltare
MATLAB
R2016a
împreună
cu
serviciile

Statistics
and
Machine
Learning
Toolbox,
Computer
Vision
Toolbox
ș
i
MATLAB
App

Designer oferite de acesta.

Prin
intermediul
interfe
ț
ei,
utilizatorii
î
ș
i
pot
încărca
propriul
set
de
date
pentru

antrenarea
clasificatorului,
apoi
aplica
ț
ia
este
gata

preia
orice
nouă
imagine
ș
i

returneze
eticheta
selectată
alături
de
un
procentaj
de
acurate
ț
e
a
predic
ț
iei.
În
cazul
în
care

în
această
imagine
este
prezentă
o
persoană
necunoscută,
aplica
ț
ia
va
în
ș
tiin
ț
a
utilizatorul

cu privire la acest lucru.

4.2 Setul de date

Setul
de
date
“The
Yale
Face
Database”
con
ț
ine
165
de
imagini
în
format
GIF
ce

12
descriu
15
subiec
ț
i.
Fiecăruia
dintre
ace
ș
tia
îi
corespund
11
imagini
ce
îl
prezintă
în
diverse

ipostaze
ș
i
condi
ț
ii
de
iluminare
diferite.
Pentru
reducerea
necesarului
de
calcul,
sunt

păstra
ț
i
doar
5
ca
fiind
persoanele
cunoscute
ș
i
încă
2
ce
joacă
rolul
celor
necunoscute.

Imaginile celor din urmă nu sunt luate în considerare la antrenare
ș
i validare.

Setul
este
compus
din
directoarele

training

ș
i

test

.
În
primul
se
regăsesc
directoare

etichetate pentru fiecare individ cu imagini expunând următoarele condi
ț
ii:


iluminat central


cu ochelari


fericit


iluminat din stânga


fără ochelari


iluminat din dreapta


trist


obosit


surprins


încrezător

urmând
ca
cel
de-al
doilea

con
ț
ină
directoare
etichetate
similar,
dar
doar
cu
o
singură

ipostază
neutra,
cea
mai
comună
capturilor
din
căr
ț
ile
de
identitate
sau
pa
ș
apoarte.
Au
fost

adăugate
versiuni
cu
iluminare
ș
i
contrast
modificate
pentru
îngreunarea
sarcinii

12
The Yale Face Database –

http://vision.ucsd.edu/content/yale-face-database

21

clasificatorului.
Etichetele
de
test
vor
fi
folosite
pentru
realizarea
matricei
de
confuzie

într-un pas ulterior.

Fig. 4.1 – Imaginile unui subiect folosite pentru antrenare

Fig. 4.2 – Imaginea unui subiect folosită pentru validare

Este
important
ca
imaginile

aibă
acela
ș
i
format,
aceea
ș
i
dimensiune,
orientare

similară
ș
i
fundal
neutru.
O
dimensiune
diferită
pentru
fiecare
imagine
conduce
la
un

vector
de
caracteristici
de
lungime
diferită,
produsul
scalar
fiind
afectat,
iar
un
fundal

încărcat
va
genera
contururi
suplimentare
la
extragerea
histogramei
gradien
ț
ilor,
alterând

22

performan
ț
ele.
Dacă
se
încearcă
recunoa
ș
terea
în
imagini
ce
provin
de
la
camere
video

amplasate
în
spa
ț
ii
publice,
care
sunt
de
regulă
montate
superior
nivelului
mediu
al
fe
ț
ei
ș
i

prezintă
un
fundal
încărcat,
mai
întâi
este
necesară
detec
ț
ia
ș
i
extragerea
fe
ț
elor
folosind

descriptori
de
tipul
cascade
Haar
pentru
a
se
ajunge
la
imaginile
standardizate
men
ț
ionate

13
anterior.

Fig. 4.3 – Descriptori de tip cascade Haar specifici ochilor, nasului
ș
i gurii

4.3 Interfa
ț
a

Fig. 4.3 – Mediul de dezvoltare MATLAB App Builder

13
Haar Feature-based Cascades –

https://docs.opencv.org/3.4.1/d7/d8b/tutorial_py_face_detection.html

23

Interfa
ț
a
aplica
ț
iei
a
fost
realizată
folosind
App
Design er
,
o
componentă
din
suita

14
MATLAB
în
care
se
pot
construi
aplica
ț
ii
desktop
cu
rolul
mijlocirii
interac
ț
iunii
dintre

utilizator
ș
i algoritm.

Programul
func
ț
ionează
prin
tragerea,
plasarea
ș
i
stilizarea
unor
elemente

predefinite
(butoane,
meniuri,
grafice,
comutatoare
etc.)
în
cadrul
unei
ferestre.
În
decursul

acestui
proces,
App
Designer
generează
un
cod
orientat-obiect
ce
specifică
schema
ș
i

design-ul
aplica
ț
iei.
Componentelor
adăugate
li
se
pot
atribui
func
ț
ii
de
tip
callback
ș
i

interac
ț
iuni
pentru
mouse
ș
i
tastatura
ce
sunt
executate
când
utilizatorul
interac
ț
ionează
cu

interfa
ț
a.
După
creare,
aplica
ț
ia
se
poate
“împacheta”
într-un
fi
ș
ier
de
tipul
.mlappinstall
ce

poate fi apoi accesat din galeria mediului de dezvoltare de oricare utilizator o de
ț
ine.

Fig. 4.4 – Interfa
ț
a aplica
ț
iei

După lansarea în execu
ț
ie, se urmează pa
ș
ii următori:

1.
Se apasă butonul “Încarcă setul”

a.
setul de date trebuie sa aibă structura:

yalefaces

|_____
training

|_____subject01

|_____
img1.gif

|_____

|_____…

|_____
test

|_____…

Fig. 4.5 – Structura setului de date

14
MATLAB App Designer –

https://www.mathworks.com/products/matlab/app-designer.html

24

b.
dacă
se
încearcă
antrenarea
clasificatorului
sau
o
predic
ț
ie

individuală
înaintea
încărcării
setului,
aplica
ț
ia
va
genera
erori

precum cele din fig. 4.6

Fig. 4.6 – Posibile mesaje de eroare

2.
Se apasă butonul “Antrenează”

a.
fiecărei
imagini
din
setul
de
date
încărcat
anterior
îi
este
extras

vectorul de caracteristici
ș
i este antrenat clasificatorul

b.
este
realizată
ș
i
matricea
de
confuzie
cu
ajutorul
datelor
de
test
ș
i

afi
ș
ată în linia de comandă

3.
Pentru predic
ț
ii individuale, se apasă buton “Recunoa
ș
te”

a.
în
cazul
în
care
imaginea
descrie
o
persoană
din
setul
de
date,

aplica
ț
ia
va
afi
ș
a
eticheta
rezultată
în
urma
predic
ț
iei
ș
i
un
scor
ce

reprezintă acurate
ț
ea (figura 4.7a)

b.
altfel,
un
mesaj
de
eroare
va
informa
utilizatorul

persoana
nu
este

cunoscută (figura 4.7b)

Fig. 4.7a – Rezultatul predic
ț
iei cu o imagine ce descrie o persoană cunoscută

Fig. 4.7b – Rezultatul predic
ț
iei cu o imagine ce descrie o persoană necunoscută

25

4.4 Implementarea solu
ț
iei

Odată
realizată
schema
interfe
ț
ei,
un
cod
este
generat,
acesta
specificând
care
sunt

obiectele
ce
trebuiesc
generate
în
contextul
ferestrei
la
lansarea
în
execu
ț
ie.
Acesta
poate
fi

găsit în anexa A.1 – Codul sursă al elementelor interfe
ț
ei.

Primul
pas
în
realizarea
algoritmului
este
specificarea
variabilelor
ce
vor
fi
folosite

de-a
lungul
execu
ț
iei
programului.
Acestea
sunt
declarate
în
sec
ț
iunea

properties
imediat

după
lista
de
componente
vizuale.
Din
cauza
faptului
ca
acestea
sunt
definite
de

programator,
nu
generate
de
mediul
de
dezvoltare,
se
va
crea
o
noua
sec
ț
iune

properties

.

Sunt necesare variabile pentru:


căile
absolute
către
directoarele
cu
imagini
pentru
test
ș
i
antrenament;
sunt

de tip

string

(de exemplu:

C:\Users\User1\Documents\MATLAB\yalefaces\test

)


container-ele
de
imagini;
sunt
de
tip
obiect

ImageDatastore
;
con
ț
in
căile

15
absolute
către
imaginile
propriu-zise,
lista
de
etichete
corespunzătoare

imaginilor
ș
i diverse metode pentru manipularea imaginilor

Fig. 4.8 – Obiect de tipul

ImageDatastore


listele de etichete pentru fiecare imagine; sunt de tip

categorical array

16
(de exemplu:

[subject01 subject03 subject04 … ]

)


liste
de
vectori
de
caracteristici;
sunt
de
tip

single-precision
matrix

;

fiecare
linie
reprezintă
vectorul
aferent
imaginii
din
care
a
fost
extras;
în

exemplul
curent,
directorul
de
antrenament
con
ț
ine
50
de
imagini,
deci

matricea va avea dimensiunea
, unde
este lungimea vectorilor
0

5
×
n

n


dimensiunile
celulei
pentru
extragerea
histogramei
gradien
ț
ilor
orienta
ț
i;

este
de
tip

double-precision
array

;
vector
cu
două
elemente
unde
primul

element
specifică
numărul
de
linii
al
celulei
ș
i
al
doilea
element
numărul
de

coloane

15
Image Datastore –

https://www.mathworks.com/help/matlab/ref/matlab.io.datastore.imagedatastore.html

16
Categorical Array –

https://www.mathworks.com/help/matlab/categorical-arrays.html

26


dimensiunile
vectorului
de
caracteristici
rezultat
în
urma
aplicării

histogramei gradien
ț
ilor orienta
ț
i; este de tip

double-precision array


container-ul
modelului
clasificatorului;
este
de
tip
obiect

ClassificationECOC

17

Fig. 4.9 – Obiect de tipul

ClassificationECOC

Fragmentul
de
cod
ce
specifică
declararea
variabilelor
poate
fi
găsit
în
anexa
A.1

Declararea variabilelor
ș
i metodelor.

Pentru
a
încărca
setul
de
date
dorit,
butonului
“Încarcă
setul”
îi
este
ata
ș
at
un

callback
,
numit

loadDataset

,
apelat
în
momentul
apăsării
butonului
de
către
utilizator.

18
Acest
callback
este
programat

deschidă
o
fereastră
Windows
Explorer
dedicată
selectării

unui
director.
Odată
selectat
directorul
părinte,
prin
API-ul

uigetdir()
se
ob
ț
ine
calea

absolută
a
acestuia
în
sistemul
de
fi
ș
iere,
cale
căruia
îi
sunt
concatenate

\training
ș
i

\test
pentru
ob
ț
inerea
directoarelor
fiu.
Pentru
fiecare
din
subseturile
de
antrenament
ș
i
de

test
se
creează
câte
un
obiect
de
tipul

ImageDatastore

.
Parametrii
func
ț
iei
numesc,
în

ordine,
calea
absolută
către
director,
faptul

se
dore
ș
te
includerea
subdirectoarelor
ș
i

imaginile
con
ț
inute
într-un
director
vor
lua
numele
etichetei
de
la
numele
acestuia.
După

creare
se
afi
ș
ează
câte
o
imagine
cu
fiecare
individ
pentru
confirmarea
corectitudinii

setului
de
date
selectat.
În
anexa
A.2

loadDataset(app)
poate
fi
găsit
codul
sursă
al
acestui

pas
ș
i
în
A.5

helperDisplaySubjectImages(trainingSet,
ImagesPerIndividual)
scriptul

pentru afi
ș
are.

Dacă
setul
de
date
este
încărcat,
se
va
antrena
clasificatorul
prin
apăsarea
butonului

“Antrenează”.
Acesta
are
ata
ș
at
callback-ul

trainClassifier

;
codul
respectiv
este
prezent

în
anexa
A.3

trainClassifier(app).
Se
alege
dimensiunea
celulei
pentru
histograma

gradien
ț
ilor
orienta
ț
i
de
,
deoarece
această
dimensiun e
oferă
cel
mai
bun
raport

4
×
4

ansamblu-detaliu
al
contururilor.
O
celulă
de
dimensiuni
mai
mici,
va
surprinde
contururi

mai
fine,
însă
forma
generala
va
fi
pierdută,
iar
o
celulă
de
dimensiuni
mai
mare
nu
este

suficient
de
precisă
ș
i
va
conduce
la
clasificări
eronate.
O
compara
ț
ie
a
gradien
ț
ilor

rezulta
ț
i este ilustrată î n figura 4.9.

17
ClassificationECOC –

https://www.mathworks.com/help/stats/classificationecoc.html?s_tid=doc_ta

18
Callback Function –

https://www.mathworks.com/help/matlab/creating_plots/callback-definition.html

27

Fig. 4.9 – Compara
ț
ie între contururile ob
ț
inute cu diverse mărimi ale celulei

Pentru
extragerea
vectorilor
de
caracteristici
din
toate
imaginile,
este
necesar

se

cunoască
lungimea
unuia.
Astfel,
se
extrage
acest
vector
din
prima
imagine
a
setului
ș
i
se

păstrează
lungimea
lui
pentru
crearea
unei
matrice
de
zerouri
de
dimensiuni
unde

N
×
M

este
numărul
de
imagini
ș
i
este
lungimea
unui
vector
de
caracteristici.
Pentru
N

M

popularea
matricei,
se
va
folosi
script-ul

helperExtractHOGFeaturesFromImageSet(imds,
hogFeatureSize,
cellSize)

.
Acesta

preia
în
argumentul

imds
un
set
de
date
cu
subdirectoare
ce
con
ț
in
imaginile
etichetate,

lungimea
unui
vector
de
caracteristici
ș
i
dimensiunea
celulei
ce
va
fi
folosită
la
extragerea

histogramei.
Script-ul
întoarce
o
listă
de
vectori
ș
i
etichetele
corespunzătoare
fiecăruia.

Codul
script-ului
este
men
ț
ionat
în
anexa
A.6

helperExtractHOGFeaturesFromImageSet(imds,
hogFeatureSize,
cellSize).
Rezultatele

sunt
stocate
în

app.trainingFeatures

,

app.trainingLabels

,

app.testFeatures

,

app.testLabels

.

Pasul
următor
constă
în
antrenarea
clasificatorului.
S-a
folosit
API-ul

fitcecoc(featureVectors,
labels)
pentru
ob
ț
inerea
obiectului

app.classifier

.

Acesta este definit de următoarele proprietă
ț
i:


BinaryY

:
matrice
de
dimensiune
unde
este
numărul
de
observa
ț
ii

X
×
Y

X

(imagini)
din
setul
de
date
ș
i
numărul
de
clasificatori
binari;
elementele

Y

pot
avea
valori
din
mul
ț
imea
,
valoarea
corespunzând
unei
clase

{

,
,
}
1
0
1

dihotomice;
descrie
felul
în
care
clasificatorul
atribuie
valoarea

j

k

elementului

BinaryY(k,j)

28


CodingName

:
specifică
felul
în
care
suprafe
ț
ele
de
decizie
au
fost
generate;

în
exemplul
de
fa
ț
ă
este
1:1,
adică
pentru
fiecare
clasificator,
o
clasă
este

pozitivă,
alta
negativă
ș
i
restul
ignorate;
sunt
acoperite
astfel
toate

combina
ț
iile de asignări de perechi de clase


Y

: lista de etichete folosite pentru antrenament împreună cu etichetele din

X


X

:
lista
de
vectori
de
caracteristici
folosi
ț
i
pentru
antrenament,
împreună
cu

etichetele din

Y


W

:
parametrii
(greută
ț
ile

influen
ț
a
fiecărei
observa
ț
ii)
folosi
ț
i
pentru

antrenarea
clasificatorului;
s-au
folosit
valori
egale
deoarece
toate

observa
ț
iile curente au aceea
ș
i pondere


NumObservations

: numărul de observa
ț
ii folosite


PredictorNames

:
numele
fiecărei
celulă
din
vectorul
de
caracteristici;
în

exemplul curent sunt indicii vectorului (

[x1 x2 x3 …]

)


ClassNames

:
lista
etichetelor
unice
folosite
în
antrenare
(

[subject01

subject02 subject03 subject04 subject05]

)


Prior

: probabilită
ț
ile anterioare pentru fiecare clasă existentă


Cost

:
costurile
de
clasificare
eronată;
matrice
de
dimensiune
unde

K
×
K

este
numărul
de
clase;

Cost(i,j)
este
costul
încadrării
gre
ș
ite
a
unui
K

punct în clasa

j

dacă acesta apar
ț
ine clasei

i


BinaryLearners

: lista tuturor clasificatorilor binari


CodingMatrix:
codurile
de
atribuire
a
clasei
pentru
clasificatorii
binari;

matrice
de
dimensiune
unde
este
numărul
de
clase
ș
i
numărul

X
×
Y

X

Y

de
clasificatori
binari;
elementele
pot
avea
valori
din
mul
ț
imea
,

{

,
,
}
1
0
1

valoarea
corespunzând
unei
clase
dihotomice;
descrie
felul
în
care

clasificatorul
atribuie valoarea
elementului

CodingMatrix(k,j)
j
k


LearnerWeights

:
listă
de
dimensiune
egală
cu
lista
clasificatorilor
binari;

LearnerWeights(i)
este
suma
ponderilor
observa
ț
iilor
pe
care
le
folose
ș
te

clasificatorul

i

Odată
ob
ț
inut
clasificatorul,
îi
este
evaluată
performan
ț
a
prin
matricea
de
confuzie.

Pentru
realizarea
acesteia,
este
folosit
setul
de
test
ș
i
func
ț
ia

predict(classifier,

testFeatures)

,
ce
încadrează
vectorii
de
caracteristici
ai
setului
în
modelul
antrenat
ș
i

returnează
eticheta
clasei
cu
probabilitatea
posterioară
cea
mai
mare,
adică
incertitudinea

cea
mai
mică
fa
ț
ă
de
datele
existente.
Astfel,
se
vor
compara
etichetele
cunoscute
cu
cele

prezise.
API-ul

confusionmat(testLabels,
predictedLabesl)
va
furniza
matricea
pe

baza
etichetelor,
iar
printarea
acesteia
se
face
cu
ajutorul
scriptului
din
anexa
A.7

helperDisplayConfusionMatrix(confMat, labels).

29

Fig. 4.10 – Matricea de confuzie

Matricea
de
confuzie
reprezintă
un
instrument
important,
o
măsură
a
performan
ț
ei

pentru
algoritmii
de
clasificare.
Se
observă
faptul
că,
pentru
primii
patru
subiec
ț
i,

clasificatorul
are
o
acurate
ț
e
de
100%,
fiecare
dintre
cele
cinci
imagini
ce
îi
descriu
pe

fiecare
având
aceea
ș
i
etichetă
prezisă
precum
cea
ș
tiută.
Însă,
una
dintre
imaginile

ultimului
individ
este
încadrată
în
clasa
numărul
2.
Rata
generală
de
eroare
a

clasificatorului
este
de
12%.
Aceasta
este
calculată
prin
validare
încruci
ș
ată
prin
pliere
de

ordin
.
Această
eroare
este
datorată
unui
contrast
mult
prea
mare
sau
a
unei

K

19
luminozită
ț
i mult prea mici a imaginii.

Acum
modelul
este
existent
în
memorie
ș
i
se
pot
realiza
predic
ț
ii
individuale
ori
de

câte
ori
este
nevoie
prin
apăsarea
butonului
“Recunoa
ș
te”
din
interfa
ț
ă.
Callback-ul

executat
la
apăsarea
butonului
este
prezent
în
anexa
A.4

predictNewID(app).
Procesul

prin
care
se
ajunge
de
la
o
imagine
ce
descrie
o
persoană
la
o
etichetă
sau
un
mesaj
de

alarmă
este
în
mare
parte
similar
cu
pa
ș
ii
anteriori.
După
încărcarea
imaginii
de
către

utilizator,
este
aplicată
extragerea
histogramei
gradien
ț
ilor
orienta
ț
i
pentru
a
ob
ț
ine

vectorul
de
caracteristici
care
este
apoi
trecut
prin
clasificator
pentru
ob
ț
inerea
unei

etichete. S-a refolosit func
ț
ia

predict

pentru a ob
ț
ine rezultatele dorite.

Indiferent
dacă
se
încearcă
predic
ț
ia
cu
o
imagine
ce
con
ț
ine
o
persoană
cunoscută

sau
nu,
clasificatorul
va
întoarce
întotdeauna
o
etichetă
din
cele
existente.
Pentru
a
lua

decizia
finală
cu
privire
la
identitatea
acestuia,
se
va
interpreta
scorul
predic
ț
iei
în

următorul fel:


dacă
persoana
este
cunoscută,
probabilitatea
posterioară
a
predic
ț
iei
va
fi
cu

un
ordin
de
măsură
mai
mică
decât
celelalte;
incertitudinea
clasificatorului

este
foarte
mică
cu
privire
la
cine
este
individul
respectiv;
în
figura
4.11
se

poate
observa
faptul

scorul
etichetei
individului
1
este
cu
mult
diferit
fa
ț
ă

de celelalte patru

Fig. 4.11 – Predic
ț
ia identită
ț
ii unei perso ane cunoscute

19
K-Fold Cross Validation –

https://machinelearningmastery.com/k-fold-cross-validation/

30


dacă
persoana
nu
este
cunoscută,
probabilită
ț
ile
posterioare
vor
fi
foarte

apropiate
ca
valoare;
clasificatorul
nu
poate
încadra
vectorul
de

caracteristici
extras
din
imaginea
respectiv
în
mod
sigur
în
nicio
clasă;

acesta
este
interpretat
ca
o
combina
ț
ie
a
tuturor
claselor;
este
totu
ș
i
returnată

ș
i o etic hetă din cele existente, însă este ignorată pentru a nu crea confuzii

Fig. 4.12 – Predic
ț
ia identită
ț
ii unei persoa ne necunoscute

Se
va
realiza
următorul
experiment:
se
extinde
setul
de
date
la
numărul
ini
ț
ial
de
15

persoane
ș
i
se
reantre nează
clasificatorul,
urmărind
ce
se
întâmplă
cu
eroarea
generală
a

acestuia
ș
i cu timpul d e execu
ț
ie.

După extindere, setul de date
ș
i matricea de confuzie au următoarea formă:

Fig. 4.13 – Setul de date extins la 15 persoane

Fig. 4.14 – Matricea de confuzie extinsă pentru 15 persoane

31

După examinarea rezultatelor, se notează următoarele observa
ț
ii:


o imagine din cinci a subiectului 5 este etichetată ca subiectul 1


doua imagini din cinci ale subiectului 10 sunt etichetate ca subiectul 8


o imagine din cinci a subiectului 11 este etichetată ca subiectul 4


o imagine din cinci a subiectului 12 este etichetată ca subiectul 1

32

5. Concluzii
ș
i dezvoltări ulterioare

Prin
folosirea
func
ț
ionalită
ț
ii
C
Code
Generation
oferită
de
MATLAB,
codul
este

20
transpus
în
limbaj
C
care,
ulterior,
poate
fi
încărcat
pe
numeroase
sisteme
embedded

împreună
cu
modelul
generat
pe
calculator
ș
i
folosit
alături
de
o
cameră
foto
la
intrări
în

diverse incinte pentru recunoa
ș
tere
ș
i autentificare.

Dacă
se
dispune
de
o
ma
ș
ină
de
calcul
mai
performantă
ș
i
se
dore
ș
te
antrenarea

unui
clasificator
cu
un
număr
mare
de
clase,
opera
ț
iile
realizate
în
timpul
antrenării
pot
fi

făcute
în
paralel.
Pentru
acest
lucru,
sistemul
trebuie

fie
dotat
cu
un
procesor
cu
nuclee

multiple.
API-ul

fitcecoc
din
MATLAB
suportă
calcul
paralel
prin
intermediul
bibliotecii

Intel®
Threading
Building
Blocks
(TBB)

,
putând
fi
specificat
acest
lucru
în
parametrii

func
ț
iei
astfel:

('Options',
statset('UseParallel',true))

.
Totu
ș
i,
există
ș
ansa

reducerii acurate
ț
ei
ș
i cre
ș
terii erorii generale.

Recunoa
ș
terea
facilă
prin
abordarea
bazată
pe
algoritmul
Support
Vector
Machine

oferă
numeroase
avantaje
comparativ
cu
abordarea
re
ț
elelor
convolu
ț
ionale,
mai
ales
pe

dispozitive de calcul mai slabe sau integrate, deoarece:


suportul
teoretic
de
la
baza
algoritmului
datează
de
la
începutul
anilor
1960,

problema clasificării fiind foarte documentată


algoritmul atinge optimul global datorită programării pătratice


nu se confruntă cu probleme în alegerea numărului de parametri


oferă un grad mai bun de generalizare


necesită semnificativ mai pu
ț
ină memorie pentru stocarea modelului


oferă
rezultate
ș
i
interpretări
geometrice
mult
mai
lizibile
ș
i
u
ș
or
de

optimizat

Pe
de
altă
parte,
această
abordare
necesită
întreaga
etichetare
ș
i
pregătire
a
setului

de
date,
deoarece
este
necesar
ca
imaginile

aibă
aceea
ș
i
dimensiune
ș
i
acela
ș
i
format
ș
i,

în
ultimul
rând,
trebuie
asigurat
un
nivel
minim
de
claritate
al
imaginilor
prin
iluminare

suficientă
ș
i
contrast
corespunzător.
În
plus,
prin
natura
lui,
algoritmul
a
fost
construit

pentru
probleme
de
clasificare
duală,
fiind
astfel
necesară
reducerea
problemei
de
clasă

multiplă
la
mai
multe
probleme
binare.
Apoi
alegerea
tipului
de
reducere
ș
i
a
nucleului

folosit rămâne tot la latitudinea operatorului uman, care de multe ori este empirică.

La
momentul
actual,
aplica
ț
ia
este
capabilă

traverseze
un
set
de
imagini

pre-procesate
ș
i
etich etate
cu
scopul
clasificării
persoanelor
prezente
în
acestea
sau
cu

scopul
detec
ț
iei
celor
străine
ori
de
câte
ori
este
nevoie.
Prin
aplicarea
histogramei

orientării
gradien
ț
ilor
pentru
extragerea
caracteristicilor
din
imagini
ș
i
modelarea

20
C Code Generation –

https://in.mathworks.com/help/comm/ug/code-generation-from-matlab.html

33

clasificatorului
pe
baza
acestora,
se
ob
ț
ine
un
sistem
de
identificare
cu
o
rată
generală
de

eroare
de
0.13%.
Această
cifră
poate
fi
mic
ș
orată
prin
îmbunătă
ț
irea
calită
ț
ii
imaginilor

prin asigurarea unei iluminări corespunzătoare în momentul realizării lor.

Aplica
ț
ia
are
ata
ș
ată
ș
i
o
interfa
ț
ă
grafică
pentru
o
utilizare
mai
u
ș
oară
de
către

utilizatori,
scutindu-i
pe
ace
ș
tia
de
tastarea
comenzilor
sau
navigarea
prin
mediul
de

dezvoltare de fiecare dată când doresc să realizeze predic
ț
ii.

Recunoa
ș
terea
facială
este
încă
un
domeniu
activ
de
cercetare
ș
i
algoritmii
folosi
ț
i

în
această
ni
ș
ă
sunt
în
continuă
perfec
ț
ionare.
Support
Vector
Machine,
alături
de

Histograma
Gradien
ț
ilor
Orienta
ț
i,
reprezintă
o
unealtă
puternică
pentru
rezolvarea

problemelor.
În
general,
sistemele
de
recunoa
ș
tere
facială
erau
asociate
cu
un
cost
ridicat,

însă acesta nu mai este cazul, devenind foarte eficiente, accesibile
ș
i cu o acurate
ț
e ridicată.

34

6. Bibliografie

[1] Michael Reynaldo Phangtriastu, Jeklin Harefa, Dian Felita Tanoto (2017).

Comparison

Between Neural Network and Support Vector Machine in Optical Character Recognition

.

https://www.sciencedirect.com/science/article/pii/S1877050917321099

Accesat: 2018

[2] Anthony M. Norcia, Holly E. Gerhard, Wesley J. Meredith (2017).

Development of

Relative Disparity Sensitivity in Human Visual Cortex

.

http://www.jneurosci.org/content/37/23/5608

Accesat: 2018

[3] Shu Chang, Ding Xiaoqing, Fang Chi (2011).

Histogram of Oriented Gradients for

Face Recognition.

https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=6077989

Accesat: 2019

[4] Sushma Ronanki, Sonia Gundu, Rupavathi Baratam, P Mounika, J Rajesh Kumar

(2017).

Face Detection and Identification Using SVM

.

https://www.ijarse.com/images/fullpdf/1491510597_P447-452.pdf

Accesat: 2018

[5] Maria Korolov (2017).

How hackers crack passwords and why you can't stop them

.

https://www.cso.com.au/article/630001/how-hackers-crack-passwords-why-can-t-stop-the
m/

Accesat: 2018

[6] MATLAB.

App Designer

.

https://www.mathworks.com/products/matlab/app-designer.html

Accesat: 2019

[7] MATLAB.

Computer Vision Toolbox.

https://www.mathworks.com/products/computer-vision.html

Accesat: 2019

[8] MATLAB.

Statistics And Machine Learning Toolbox.

https://www.mathworks.com/products/statistics.html


Accesat: 2019

[9] P. Jonathon Phillips (1999).

Support Vector Machines Applied to Face Recognition.

https://papers.nips.cc/paper/1609-support-vector-machines-applied-to-face-recognition.pdf

Accesat: 2018

[10] Alexandre Kowalczyk (2017).

Support Vector Machines Succintly.

[11] Hiltow Bristow, Simon Lucey (2014).

Why do linear SVMs trained on HOG features

perform so well?

https://arxiv.org/pdf/1406.2419.pdf

Accesat: 2019

35

7. Anexe

A.1 – Declararea variabilelor
ș
i metodelor

properties (Access = private)

trainingDir;

trainingSet;

trainingFeatures;

trainingLabels;

testDir;

testSet;

testFeatures;

testLabels;

cellSize;

hogFeatureSize;

classifier;

end

methods (Access = private)

function toggleAllLabelsOff(app)

app.Label.Visible = 'off';

app.Label2.Visible = 'off';

app.Label3.Visible = 'off';

app.Label8.Visible = 'off';

app.Label6.Text = '-';

app.Label7.Text = '-';

end

end

A.2 – loadDataset(app)

function loadDataset(app)

toggleAllLabelsOff(app);

path = uigetdir();

app.Label.Visible = 'on';

app.trainingDir = fullfile(path,'training');

app.testDir = fullfile(path,'test');

app.trainingSet =

imageDatastore(app.trainingDir,'IncludeSubfolders',true,'LabelSource','fold
ernames');

app.testSet =

imageDatastore(app.testDir,'IncludeSubfolders',true,'LabelSource','folderna
mes');

app.Label.Visible = 'off';

helperDisplaySubjectsImages(app.trainingSet, 10);

end

36

A.3 – trainClassifier(app)

function trainClassifier(app)

toggleAllLabelsOff(app);

if isempty(app.trainingSet)

app.Label3.Visible = 'on';

else

app.Label.Visible = 'on';

app.cellSize = [4 4];

app.hogFeatureSize =

length(extractHOGFeatures(readimage(app.trainingSet,1),'CellSize',[4 4]));

[app.trainingFeatures, app.trainingLabels] =

helperExtractHOGFeaturesFromImageSet(app.trainingSet, app.hogFeatureSize,

app.cellSize);

app.classifier = fitcecoc(app.trainingFeatures,

app.trainingLabels);

[app.testFeatures, app.testLabels] =

helperExtractHOGFeaturesFromImageSet(app.testSet, app.hogFeatureSize,

app.cellSize);

predictedLabels = predict(app.classifier, app.testFeatures);

confMat = confusionmat(app.testLabels, predictedLabels);

helperDisplayConfusionMatrix(confMat,

app.classifier.ClassNames);

CVMdl = crossval(app.classifier);

genError = kfoldLoss(CVMdl);

fprintf('General error = %.2f%', genError);

app.Label.Visible = 'off';

end

end

A.4 – predictNewID(app)

function predictNewID(app)

toggleAllLabelsOff(app);

if isempty(app.classifier)

app.Label2.Visible = 'on';

else

[file, path] = uigetfile();

app.Label.Visible = 'on';

if not(isempty(file)) && not(isempty(path))

img = imread(fullfile(path,file));

img = imbinarize(img);

img_hog_4x4 =

extractHOGFeatures(img,'CellSize',app.cellSize);

[predictedLabel, predictedScores] =

predict(app.classifier, img_hog_4x4);

37

barrier = 0 – ((1 / (numel(app.trainingSet.Files) / 10))

/ 10) * 1.5;

knownPerson = false;

k = -1;

for i = 1:length(predictedScores)

if(abs(predictedScores(i)) < abs(barrier))

knownPerson = true;

k = i;

end

end

if(knownPerson)

app.Label6.Text = cellstr(predictedLabel);

app.Label7.Text = num2str((1 + predictedScores(k))

* 100);

else

app.Label8.Visible = 'on';

end

end

app.Label.Visible = 'off';

end

end

A.5 – helperDisplaySubjectsImages(trainingSet,

imagesPerIndividual)

function helperDisplaySubjectsImages(trainingSet, imagesPerIndividual)

totalImages = length(trainingSet.Files);

totalFolders = totalImages / imagesPerIndividual;

figure;

plotNumber = 1;

for i = 0:totalFolders-1

subplot(1,totalFolders,plotNumber);

imshow(trainingSet.Files{i * 10 + 1});

plotNumber = plotNumber + 1;

end

figure;

for i = 1:imagesPerIndividual

subplot(2,floor(imagesPerIndividual/2),i);

imshow(trainingSet.Files{i});

end

end

A.6 – helperExtractHOGFeaturesFromImageSet(imds,

hogFeatureSize, cellSize)

38

function [features, setLabels] = helperExtractHOGFeaturesFromImageSet(imds,

hogFeatureSize, cellSize)

setLabels = imds.Labels;

numImages = numel(imds.Files);

features = zeros(numImages, hogFeatureSize, 'single');

for j = 1:numImages

img = imbinarize(readimage(imds, j));

features(j, 🙂 = extractHOGFeatures(img,'CellSize',cellSize);

end

end

A.7 – helperDisplayConfusionMatrix(confMat, labels)

function helperDisplayConfusionMatrix(confMat, labels)

confMat = bsxfun(@rdivide, confMat, sum(confMat,2));

persons = 1:length(labels);

colHeadings = arrayfun(@(x)sprintf('%d',x), 1:length(labels),

'UniformOutput', false);

format = repmat('%-9s', 1, 11);

header = sprintf(format, 'person |', colHeadings{:});

fprintf('\n%s\n%s\n', header, repmat('-', size(header)));

for idx = 1:numel(persons)

if idx > 9

fprintf('%-9s', [num2str(persons(idx)) ' |']);

else

fprintf('%-9s', [num2str(persons(idx)) ' |']);

end

fprintf('%-9.2f', confMat(idx,:));

fprintf('\n')

end

end

39

Similar Posts