• Nenhum resultado encontrado

Acertividade do Reconhecimento Facial

No documento Lista de Tabelas (páginas 48-59)

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¸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¸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¸ao de Estudantes em um Ambiente Virtual de Aprendizagem. Porto Alegre: CINTED-UFRGS, 2012.

EBERMAM, E.; KROHLING, R. A. Uma Introdu¸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¸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¸oes entre tabelas em um banco de dados do Access. 2022.

OLIVEIRA, J. P. de.Sistema de detec¸ao e identifica¸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¸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

No documento Lista de Tabelas (páginas 48-59)

Documentos relacionados