Este repositório contém um script em Python3 que reconhece se um rosto está ou não portando uma máscara!
O código utiliza da biblioteca OpenCV para o processamento das imagens e scikit-learn para o treinamento do modelo que classifica um rosto que porta ou não uma máscara.
O conjunto de imagens utilizadas para o treinamento do modelo pode ser encontrada na pasta imagens e foi retirado desse link.
Em open_cam.py (com detecção facial) e em open_cam_no_face_detection.py (sem detecção facial) temos scripts que viabilizam que a webcam do seu computador seja iniciada.
Nesses scripts carregamos um dataframe partindo do conjunto de imagens que temos e treinamos um modelo K-Nearest Neighbor para classificar os rostos.
Para a detecção das faces, utiliza-se o CascadeClassifier, já incluso dentro da biblioteca do OpenCV. De modo geral, esse método de treinamento utiliza de um arquivo .xml, que também já é incluso no pacote, para treinar um modelo que reconheça rostos de forma genérica, utilizando o método Viola-Jones e AdaBoost para o melhoramento do desempenho.
O algoritmo de Machine Learning escolhido para classificação foi o K-Nearest Neighbor, pois foi o que apresentou melhor desempenho diante o conjunto de teste e de validação. A ideia é que, em um próximo experimento, esse mesmo código possa ser refeito utilizando uma CNN!
Modo de detecção facial e modo sem detecção facial Por conta de uma issue acerca de um vício em máscaras claras e também uma dificuldade do OpenCV detectar faces quando as tonalidades das máscaras são mais escuras foi proposta essa divisão de modos. O modo DETECÇÃO FACIAL utiliza uma solução do OpenCV para identificar a face na imagem, enquanto o modo SEM DETECÇÃO FACIAL pede que o usuário centralize seu rosto na imagem para que a classificação seja realizada.
Aqui vou deixar uns links de referência com o que pesquisei sobre o assunto para desenvolver o código!
- Documentação do OpenCV
- Documentação do scikit-learn
- Playlist de Python + OpenCV do canal Universo Discreto
- Detectando Faces em Vídeo com Deep Learning (vídeo do dono do repositório de onde tirei o conjunto de dados)
- Reconhecimento de Faces | Redes Neurais em PyTorch | Programando em 10 minutos (Peixe Babel)