Este é um simples projeto final para a matéria de Álgebra Linear Algorítmica no ano de 2022.1, ministrada pelo professor João Antônio Recio da Paixão, no curso de Ciência da Computacão da UFRJ.
O intuito deste projeto é desenvolver uma ferramenta que borre o rosto de uma pessoa em uma foto ou vídeo e explorar como aplicar blur em uma imagem usando álgebra linear usando o Filtro Gaussiano(GaussianBlur)
O código desse projeto também está disponível para ser usado em um notebook no Google Colaboratory, sendo necessário o uso da GPU para o funcionamento da biblioteca dlib no Colab, necessário para a IA.
Para o reconhecimento dos rostos, foi usada a IA conhecida como face_recognition, feita por ageitgey, pois é uma API bem simples e documentada de Python.
No notebook há 4 funções principais:
-
borra_quadrilatero
Esta função possui como entrada (filename, top, right, bottom, left), sendo o filename o nome/caminho do arquivo a ser alterado e o "top, right, bottom, left" a posição, em pixels, do quadrilatero a ser borrado.
Possui como especificação aplicar um filtro gaussiano apenas na região do quadrilátero especificado.
-
censura_foto
Esta função possui como entrada (filename, number_of_times_to_upsample = 2), sendo o filename o nome/caminho da foto a ser alterada e um parâmetro opcional "number_of_times_to_upsample", que comanda a precisão para encontar os rostos mais distantes na imagem, porém quanto mais alto é o valor, mais lento fica. Definido como 2 por padrão.
Possui como especificação aplicar um filtro gaussiano(blur/borrar) apenas nos rostos encontrados pela IA na imagem.
-
extrai_video
Esta função possui como entrada (filename), sendo o filename o nome/caminho do vídeo a ser extraído em todos os seus frames e seu audio.
Possui como especificação colocar todos os frames inalterados do vídeo no formato .png e seu áudio no formato .mp3 na pasta "./video"
-
censura_video
Esta função possui como entrada (filename, number_of_times_to_upsample = 1), sendo o filename o nome/caminho do vídeo a ser alterado e um parâmetro opcional "number_of_times_to_upsample", que comanda a precisão para encontar os rostos mais distantes em cada frame, porém quanto mais alto é o valor, mais lento fica. Definido como 1 por padrão.
Possui como especificação aplicar um filtro gaussiano(blur/borrar) apenas nos rostos encontrados pela IA em cada frame e ser rápido o suficiente para retornar um vídeo curto com seus frames alterados e seu áudio.
Para saber mais sobre essas funções e o funcionamento do Filtro Gaussiano, veja a Wiki
- A IA não consegue identificar um rosto se há alguma obstrução na face, isso pode causar erros frequentes nos vídeos
- A IA não consegue indentificar uma face em que não esteja olhando diretamente para a câmera, isso pode causar erros frequentes em fotos e vídeos
- A IA não consegue encontrar um rosto muito distante sem um alto custo computacional e com precisão, o que causa erros frequentes em algumas fotos e vídeos.
- A IA reconhece com menor taxa de sucesso rostos em um arquivo .jpg, logo o ideal seria no formato .png
- Imagens com baixa iluminação possuem uma baixa taxa de reconhecimento
- Vídeos muito grandes demoram muito para serem analisados
- Ao professor João Paixão pelas aulas
- Ao face_recognition pela IA
- Ao Google pela GPU usada no Colab
- Ao OpenCV pela útil biblioteca em python
- Manoel Marcelo da Silva @manoelmms