Nos testes desta etapa da aplica¸c˜ao, foram usadas imagens de 50 usu´arios para o treino do algoritmo. A partir disso, pode-se verificar o resultado do grau de acertividade ao reconhecimento facial desenvolvido atrav´es da Tabela 8.
Tabela 8 – Acertividade do Algoritmo de Reconhecimento Facial Usu´arios Treinados Acertos Falhas Acertividade
50 43 7 86%
Fonte: Pr´opria.
4.3 COMENT ´ARIOS DO AUTOR
Ap´os a implementa¸c˜ao das atividades descritas neste cap´ıtulo, era previso a integra¸c˜ao entre o endpoint de atualiza¸c˜ao de frequˆencia do backend e o algoritmo de detec¸c˜ao facial, mas por conta do atraso no desevolvimento do backend, n˜ao foi poss´ıvel concluir a inte-gra¸c˜ao do projeto, e por conta disso, ficou conclu´ıdo apenas o backend e o reconhecimento facial de forma independente.
49
5 CONCLUS ˜AO
Para os objetivos propostos por este trabalho, conseguiu-se fazer o desenvolvimento de v´arios endpoints do backend, para realizar todo o fluxo de dados, desde o cadastro dos alunos, passando pela atualiza¸c˜ao e busca dos dados, al´em disso, s˜ao feitas valida¸c˜oes dos tokens para liberar login ao usu´ario e tamb´em a criptografia de senhas, gerando seguran¸ca para o acesso na aplica¸c˜ao. E para o algoritmo de detec¸c˜ao facial, foi alcan¸cado uma acertividade de 86% para os usu´arios treinados, uma taxa bastante satisfat´oria levando em considera¸c˜ao as espectativas iniciais do desenvolvedor.
Ao iniciar o desenvolvimento do projeto, a meta inicial era realiz´a-lo em 3 etapas:
Backend, Reconhecimento Facial e a Integra¸c˜ao dos itens anteriores. Para o backend, os endpoints foram desenvolvidos e testados em um tempo maior do que foi estipulado, com isso, gerou um atraso nas atividades, ap´os isso, iniciou-se a etapa do reconhecimento facial, e o per´ıodo de desenvolvimento desta etapa ficou dentro do que foi estipulado, mas por conta do atraso da primeira atividade, n˜ao foi poss´ıvel realizar a atividade da integra¸c˜ao e teste entre o backend e o reconhecimento facial.
Este ´e um projeto para armazena os dados da presen¸ca dos alunos nas disciplinas em um banco de dados, e a partir dessas informa¸c˜oes, novas funcionalidades podem ser criadas, permitindo a partir dos dados, fazer an´alises, proje¸c˜oes e acompanhamento de alunos, assim, facilita o monitoramento do desempenho dos alunos nos cursos, criando a oportunidade de adicionar a esta verifica¸c˜ao, um acompanhamento psicol´ogico quando o desempenho de um aluno cair abruptamente, permitindo que a coordena¸c˜ao tenha essa informa¸c˜ao e entre em contato com o aluno para identifica¸c˜ao do problema.
Este projeto foi desenvolvido tomando como base a UEA, mas pode ser reaproveitado em outras universidades ou escolas, atrav´es de adapta¸c˜oes.
5.1 MELHORIAS E TRABALHOS FUTUROS
O desenvolvimento da etapa do reconhecimento facial pode ser melhorado com au-mentando do n´umero de imagens por usu´ario, para que o algoritmo tenha mais imagens para treinar a aprendizagem das faces de cada usu´ario, e outra melhoria deve ser feita no armazenamento dos dados do treino, que atualmente s˜ao guardados em duas listas, onde em uma lista ficam as caracter´ısticas dos usu´arios e em outra os nomes dos usu´arios, o ideal ´e que ap´os o treino das faces, o algoritmo tenha os dados das caracter´ısticas dos usu´arios salvos em um arquivo XML, para que quando necess´ario fazer a verifica¸c˜ao de um usu´ario, apenas ser´a comparada as caracter´ısticas da imagem recebidas com o que est´a slavo no arquivo XML.
Para trabalhos futuros, recomenda-se fazer a integra¸c˜ao entre os endpoints do backend e do reconhecimento facial, para ter este projeto funcionando em sua totalidade, e al´em
50 disso, criar um design para desenvolver algumas telas para o frontend da aplica¸c˜ao, para integrar com os endpoints do backend, para que o projeto esteja plenamente conclu´ıdo e pronto para subir para produ¸c˜ao.
51
REFERˆENCIAS
CAVALCANTE, P. H. A. Tutorial PostgreSQL: introdu¸c˜ao pr´atica ao servi¸co. 2021. Dispon´ıvel em: ⟨https://blog.geekhunter.com.br/
tutorial-postgresql-introducao-pratica-ao-servico/⟩. Acesso em: 10 abr. 2022.
DIGIFORT.Marca¸c˜ao de Ponto por Registro Eletrˆonico com Reconhecimento Facial. 2019. Dispon´ıvel em: ⟨https://www.digifort.com.br/reconhecimento-facial.php⟩. Acesso em: 28 abr. 2022.
DINIZ, F. A. RedFace: Um Sistema de Reconhecimento Facial para Identifica¸c˜ao de Estudantes em um Ambiente Virtual de Aprendizagem. Porto Alegre: CINTED-UFRGS, 2012.
EBERMAM, E.; KROHLING, R. A. Uma Introdu¸c˜ao Compreensiva `as Redes Neurais Convolucionais: Um Estudo de Caso para Reconhecimento de Caracteres Alfab´eticos. Vit´oria: Trilha Principal, 2018.
EWALLY.Back-end: O Que ´E, Para Que Serve e Quais Suas Linguagens?
2021. Dispon´ıvel em: ⟨https://www.ewally.com.br/blog/ajudando-sua-empresa/
backend/\#:∼:text=O\\%20backend\\%20\\%C3\\%A9\\%20a\\%20estrutura, ambientes\\%20eletr\\%C3\\%B4nicos\\%20operem\\%20em\\%20sincronia.⟩ Acesso em: 10 abr. 2022.
GOMES, R. G. Modelagem de dados: 1:N ou N:N? 2019. Dispon´ıvel em:
⟨https://www.devmedia.com.br/modelagem-1-n-ou-n-n/38894⟩. Acesso em: 14 mai.
2022.
GREGERSEN, E. Relational Database. 2020. Dispon´ıvel em: ⟨https://www.
britannica.com/technology/relational-database⟩. Acesso em: 15 mai. 2012.
GRYFO. Marca¸c˜ao de Ponto por Registro Eletrˆonico com Reconheci-mento Facial. 2021. Dispon´ıvel em: ⟨https://gryfo.com.br/blog/2021/12/01/
marcacao-de-ponto-com-reconhecimento-facial/⟩. Acesso em: 28 abr. 2022.
GUISSOUS, A. E. Skin Lesion Classification Using Deep Neural Network. Arg´elia: Research Gate, 2019.
HEINRICH, C. J. . P. Z. . K. Machine learning and deep learning. Dortmund:
Electronic Markets, 2021.
HSU, C.-W.; CHANG, C.-C.; LIN, C.-J. A Practical Guide to Support Vector Classification. ´India: [s.n.], 2016.
52 JOHNSON, R. E. Frameworks = (Components + Patterns). Urbana:
Communications Of The ACM, 1997.
LUCIANO, J.; ALVES, W. J. B. Padr˜ao de Arquitetura MVC: Model-View-Control ler. Bebedouro: Universidade de S˜ao Paulo, 2011.
MAKAI, M. Peewee. 2018. Dispon´ıvel em: ⟨https://www.fullstackpython.com/peewee.
html⟩. Acesso em: 15 mai. 2022.
MAKAI, M. Sanic. 2018. Dispon´ıvel em: ⟨https://www.fullstackpython.com/sanic.
html⟩. Acesso em: 07 mai. 2022.
MARRY. Como definir rela¸c˜oes entre tabelas em um banco de dados do Access. 2022.
OLIVEIRA, J. P. de.Sistema de detec¸c˜ao e identifica¸c˜ao de placas de trˆansito brasileiras utilizando t´ecnicas de processamento digital de imagens e RCNN. [S.l.]: Conjecturas, 2022.
OLIVEIRA, L. F. Entendendo a Tr´ıade Model-View-Control ler (MVC) Utilizando Padr˜oes de Projeto Orientado a Objetos. Campinas: Conic-Semesp, 2013.
PODAREANU, D. Best Practice Guide - Deep Learning. Alemanha: Research Gate, 2019.
RAZORTHINK, A. Tutorial PostgreSQL: introdu¸c˜ao pr´atica ao
servi¸co. 2020. Dispon´ıvel em: ⟨https://guide.razorthink.com/use-case-examples/
facial-feature-recognition.html\#introduction⟩. Acesso em: 10 abr. 2022.
READ, R. J. The convolution theorem and its applications. 2009. Dispon´ıvel em: ⟨https://www-structmed.cimr.cam.ac.uk/Course/Convolution/convolution.html⟩. Acesso em: 15 mai. 2022.
RESTAPITUTORIAL. Using HTTP Methods for RESTful Services. 2017.
Dispon´ıvel em: ⟨https://www.restapitutorial.com/lessons/httpmethods.html⟩. Acesso em: 23 mai. 2022.
SHARMA, P. MaxPool vs AvgPool. 2022. Dispon´ıvel em: ⟨https://iq.opengenus.org/
maxpool-vs-avgpool/\#:∼:text=In\\%20short\\%2C\\%20in\\%20AvgPool\\%2C\\% 20the,of\\%20a\\%20Convolutional\\%20Neural\\%20Network.⟩ Acesso em: 25 abr.
2022.
SRIVASTAVA, D. K.; BHAMBHU, L. Data Classification using Support Vector Machine. National Taiwan University, Taipei 106, Taiwan: Journal of Theoretical and Applied Information Technology, 2010.
STUTTGART, M.Peewee - Um ORM Python minimalista. 2017. Dispon´ıvel em:
⟨http://pythonclub.com.br/peewee-um-orm-python-minimalista.html⟩. Acesso em: 24 mai. 2022.
SUMUS.Desbloquear smartphones por reconhecimento facial ´e seguro? 2019.
SUPERDATASCIENCE, T. Convolutional Neural Networks (CNN): Step 4 -Ful l Connection. 2018. Dispon´ıvel em: ⟨https://www.superdatascience.com/blogs/
convolutional-neural-networks-cnn-step-4-full-connection⟩. Acesso em: 22 abr. 2022.
TELTEX. Reconhecimento Facial para Seguran¸ca e Gest˜ao de Es-colas e Universidades. 2020. Dispon´ıvel em: ⟨https://teltex.com.br/2017/
53 reconhecimento-facial-para-seguranca-e-gestao-de-escolas-e-universidades/⟩. Acesso em:
28 abr. 2022.
VENUGOPAL, V. Efficient Classification of Breast Lesion based on Deep Learning Technique. ´India: Bonfring International Journal of Advances in Image Processing, 2016.
WANGENHEIM, A. V.Inteligˆencia Artificial aplicada `a Vis˜ao Computacional. 2017. Dispon´ıvel em: ⟨http://www.inf.ufsc.br/∼aldo.vw/visao/ia.html⟩. Acesso em: 28 abr. 2022.
54
APˆENDICE A - VERIFICAR TOKEN DE ACESSO 1 def a p p a u t h o r i z a t i o n ( ) :
2 def decorator ( func ) :
3 @wraps ( func )
4 async def a u t h o r i z a t i o n ( r e q u e s t : Request , ∗ args , ∗∗ kwargs ) : 5 token = r e q u e s t . token
6 if token is None :
7 return response . json ({’ token ’: ’ token not provider ’},
8 s t a t u s =403)
9 s e c r e t = SECRET
10 algorithm = ALGORITHM
11 try:
12 token decoded = jwt . decode (
13 token ,
14 s e c r e t ,
15 [ algorithm ]
16 )
17 except jwt . ExpiredSignatureError :
18 return response . json ({’ token ’: ’ expired token ’},
19 s t a t u s =403)
20 except jwt . InvalidTokenError :
21 return response . json ({’ token ’: ’ invalid token ’},
22 s t a t u s =403)
23 uid = token decoded [’ institutional ’]
24 i n s t i t u t i o n a l = I n s t i t u t i o n a l . g e t o r n o n e (id=uid ) 25 if i n s t i t u t i o n a l is None :
26 return response . json ({’ token ’: ’ invalid token ’},
27 s t a t u s =403)
28 r e q u e s t . headers [’ institutional ’] = i n s t i t u t i o n a l .id 29 return await func ( request , ∗ args , ∗∗ kwargs )
30 return a u t h o r i z a t i o n 31 return decorator
55
APˆENDICE B - GERAR E VERIFICAR CRIPTOGRAFIA DE SENHAS 1 pwd context = CryptContext ( schemes =[CRYPTOGRAPHY] )
2
3 def createCriptography ( password ) : 4 return pwd context .hash( password ) 5
6 def verifyCriptography ( password , passwordCriptography ) :
7 return pwd context . v e r i f y ( password , passwordCriptography )
APˆENDICE C - LOGIN DE USU ´ARIO 1 async def a c e s s ( r e q u e s t : Request ) :
2 email = r e q u e s t . json [’ email ’]
3 password = r e q u e s t . json [’ password ’] 4
5 i n s t i t u t i o n a l = I n s t i t u t i o n a l . g e t o r n o n e ( email=email ) 6
7 v e r i f y = v e r i f y h a s h ( password , i n s t i t u t i o n a l . password ) 8
9 if i n s t i t u t i o n a l is None or not v e r i f y :
10 return response . json ({’ institutional ’: ’ incorrect 11 username or password ’}, s t a t u s =404)
12
13 s e c r e t = SECRET
14 algorithm = ALGORITHM
15 expired = datetime . utcnow ( ) + timedelta ( days=7) 16
17 payload = {
18 ’ institutional ’: i n s t i t u t i o n a l .id, 19 ’exp ’: expired
20 }
21
22 token = jwt . encode ( payload , s e c r e t , algorithm=algorithm ) 23
24 data = dict( )
25 data [’ token ’] = token
26 data [’ institutional ’] = i n s t i t u t i o n a l . json 27
28 return response . json ( data , dumps=json . dumps , c l s=S e r i a l i z e )
56
APˆENDICE D - MODIFICAC¸ ˜AO DE SENHA 1 async def recoverPassword ( r e q u e s t : Request ) :
2 email = r e q u e s t . json [’ email ’] 3
4 i n s t i t u t i o n a l = I n s t i t u t i o n a l . g e t o r n o n e ( email=email ) 5
6 if i n s t i t u t i o n a l is None :
7 return response . json ({’ institutional ’: ’ email not 8 found ’}, s t a t u s =404)
9
10 s e c r e t = SECRET
11 algorithm = ALGORITHM
12 expired = datetime . utcnow ( ) + timedelta ( minutes =15) 13
14 payload = {
15 ’ institutional ’: i n s t i t u t i o n a l .id, 16 ’exp ’: expired
17 }
18
19 token = jwt . encode ( payload , s e c r e t , algorithm=algorithm ) 20
21 data = dict( )
22 data [’ authorization ’] = sendEmailUpdatePassword ( email , 23 i n s t i t u t i o n a l . fullName , URL RECOVERY PASSWORD + token ) 24
25 return response . json ( data , dumps=json . dumps , c l s=S e r i a l i z e )
57
APˆENDICE E - CONFIRMAC¸ ˜AO DE PRESENC¸ A
1 def sendEmail ( emailStudant , nameStudant , presence , p a r t i c i p a t i o n , 2 t o t a l C l a s s e s ) :
3
4 emailAddress = EMAIL
5 emailPassword = PASSWORD 6
7 message = EmailMessage ( ) 8
9 frequency = ( p a r t i c i p a t i o n / t o t a l C l a s s e s ) ∗ 100 10
11 message [’ Subject ’] = ’ Attendance Confirmation ’ 12 message [’ From ’] = emailStudant
13 message [’To ’] = f’Hello , { nameStudant }!!! ’ \
14 f’ Your presence in class { presence }
15 has been confirmed . ’ \
16 f’You participated in { participation } classes ,
17 of a total of { totalClasses }. ’ \
18 f’His current presence is {"%.2 f" %
19 round ( frequency , 2)}% ’
20
21 message . s e t c o n t e n t ( ) 22
23 with smtplib . SMTP SSL(’ smtp . gmail . com ’, 465) as smtp : 24 smtp . l o g i n ( emailAddress , emailPassword )
25 smtp . send message ( message ) 26
27 return ’ Send Email ’
58
APˆENDICE F - PACOTES INSTALADOS NO BACKEND 1 a i o f i l e s ==0.8.0
2 c f f i ==1.15.0
3 cryptography ==37.0.2 4 h t t p t o o l s ==0.4.0 5 j o s e ==1.0.0 6 jwt ==1.3.1
7 m u l t i d i c t ==6.0.2 8 p a s s l i b ==1.7.4 9 peewee ==3.1.0
10 peewee−v a l i d a t e s ==1.0.7 11 psycopg2−binary ==2.9.3 12 pycparser ==2.21
13 PyJWT==2.3.0
14 python−d a t e u t i l ==2.8.2 15 s a n i c ==22.3.1
16 sanic −routing ==22.3.0 17 s i x ==1.16.0
18 ujson ==5.2.0 19 uvloop ==0.16.0 20 websockets ==10.3
APˆENDICE G - CODIFICAR IMAGEM DE USU ´ARIOS EM LISTAS 1 known face encodings = [ ]
2 known face ids = [ ] 3
4 path = ’ imageUsers / ’ 5 i = 0
6 for , , image in os . walk ( path ) : 7 qty = len( image )
8 while ( i < qty ) :
9 user = image [ i ]
10 userId = user . s p l i t (’. ’) [ 0 ]
11 userImage = f a c e r e c o g n i t i o n . l o a d i m a g e f i l e ( path + user ) 12 userEncoding = f a c e r e c o g n i t i o n . f a c e e n c o d i n g s ( userImage ) [ 0 ] 13 known face encodings . append ( userEncoding )
14 known face ids . append ( userId )
15 i += 1