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
să
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
să
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
să
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 –
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
să
identifice
ș
i
să
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ă
să
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ă
să
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ă
să
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
să
separe
punctele
ro
ș
ii
de
cele
verzi,
putem
spune,
fără
a
efectua
vreun
calcul
sau
măsurătoare,
că
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
să
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
să
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
că
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
că
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
să
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
să
preia
orice
nouă
imagine
ș
i
să
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
să
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
să
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
că
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
să
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
că
se
dore
ș
te
includerea
subdirectoarelor
ș
i
că
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
să
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
că
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
să
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
să
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ă
să
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
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: Listă de figuri ……………………………………………………………………………………………………….. 3 1…. [608188] (ID: 608188)
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.
