APS 6º Semestre - UNIP (2021)

Overview

UNIP

UNIP - Universidade Paulista

Ciência da Computação (CC)

DESENVOLVIMENTO DE UM SISTEMA COMPUTACIONAL PARA ANÁLISE E CLASSIFICAÇÃO DE FORMAS

Link do github: https://github.com/dudushy/aps6semestre2021

Disciplina: Processamento de Imagem

Prof. Fabricio Henrique

Integrantes:

Nome RA
Guilherme Altobeli Crespo N44567-0
Yan Falcão Callegaris N4889C-9
Klaus Weber Batista Rodrigues F1265B-3
Eduardo Talarico de Paula N3881A-0
Matheus Rocha N415DC-1

Índice








Objetivo do Trabalho

Hoje no mercado de trabalho da programação já acabou aquela visão de que o programador ficava o dia inteiro sentado na frente de um computador sem ter contato com pessoas e isolado do mundo lá fora com apenas paredes em sua volta, hoje o programador trabalha em grupos ou em coworkings com espaços abertos e várias pessoas para conversar e trocar ideias.

O objetivo deste trabalho não é apenas sentar na frente de seu notebook, ligar o spotify e codificar, mas sim ter um aprendizado em grupo discutindo várias ideias e hipóteses para que quando nos formarmos já termos essas experiências de trabalhar sempre em conjunto com pessoas, pois assim como a tecnologia sempre está mudando, precisamos mudar também para não virarmos dinossauros.

O objetivo do trabalho é criar uma ferramenta computacional para análise e classificação de formas a partir de imagem, ou seja, um programa que reconheça padrões dentro de uma imagem e consiga nos retornar uma informação útil a partir dela. Decidimos fazer um programa para estipular a idade da pessoa com base no seu rosto.

Esse tipo de software pode ser usado para várias coisas como por exemplo pode ser usado para identificar doenças em algum tipo de exame que gere imagens, outro exemplo é saber o sexo da pessoa, a emoção que ela está sentindo, entre outros vários softwares de reconhecimento.

Para realizarmos o projeto usamos algumas ferramentas que facilitam o nosso trabalho, para criar o nosso programa utilizamos a linguagem Python.

O Python foi criado no início dos anos 1990 por Guido van Rossum na Holanda como o sucessor de uma linguagem chamada ABC.


Introdução

Em um mundo cada vez mais interconectado, empresas e organizações de todos os portes e ramos de atividade perceberam a importância de manter uma presença online e investir nessa tarefa. No cenário atual, com inúmeros aplicativos e sites competindo pela atenção do público, ferramentas como o reconhecimento facial estão se tornando cada vez mais necessárias.

Por meio dele, os usuários de redes sociais podem obter informações úteis sobre o próprio perfil e a de pessoas ao seu redor, o que lhes permite a tecnologia a avançar em estratégias mais eficazes para usar a tecnologia de reconhecimento para que pessoas aplicar em outros aspectos e assuntos de segurança.

De forma simples, podemos descrever a tecnologia de reconhecimento facial como um algoritmo desenvolvido para verificar rostos de pessoas, buscar informações em bancos de dados de fotos onde você consegue cruzar informações de padrões para que possa estar verificando quem é a determinada pessoa.

Embora essa tecnologia possa parecer fora de alcance, pode-se dizer que faz parte de nossas vidas diárias. Afinal, desde que pesquisemos em plataformas como Google Fotos ou Adobe Photos, os rastreadores da tecnologia tomarão medidas e cálculos e filtrarão uma série de faces para garantir que o processo todo do reconhecimento seja concluído.

Alem disso, o reconhecimento facial está mais presente que você pensa seu próprio celular tem o modo de desbloqueio de tela por reconhecimento facial. Basicamente, o reconhecimento facial funcionam fazendo um cálculo dos principais pontos do rosto como, olhos, boca, nariz a Internet, verificando cada medida e padrões de rostos em um banco de imagens criado pela biblioteca da aplicação.

Para realizarmos nosso trabalho utilizamos algumas bibliotecas do python como OpenCV, Face Recognition, Numpy e OS.

OpenCV é uma biblioteca Multiplataforma dedicada a projetos de visão computacional OpenCV possui módulos de Processamento de Imagens e Vídeo I/O, Estrutura de dados, Álgebra Linear, GUI (Interface gráfica do usuário).

Face Recognition é uma ferramenta de processamento de imagens onde ela faz o mapeamento da imagem no caso um rosto para que possa estar efetuando o cálculo de padrões onde é feito o encoding das imagens para reconhecimento facial.

NumPy é uma biblioteca de programação em linguagem python onde suporta um grande processamento de matrizes, arranjos e muitas funções matemáticas de alto nível de operação (OS) é uma biblioteca padrão do Python onde é usada para operar todo os derivados dependentes do S.O(Sistema Operacional).

Utilizamos os melhores recursos encontrados para chegar ao resultado final de nossa APS onde criamos uma ferramenta que pode ser usado tanto para fazer o desbloqueio de seu smartphone tanto para fazer um reconhecimento facial forense por exemplo.


Referencial Teórico

A indústria de reconhecimento facial fez um progresso impressionante em pouco tempo e não só facial, mas classificação de formas também faz parte dessa evolução. Hoje, com aplicativos instalados no seu celular você consegue desbloquear eles só com o reconhecimento facial, e não só desbloquear, mas fazer várias funções que eles podem fazer com o reconhecimento facial ou de imagem.

O primeiro relato do desenvolvimento do reconhecimento facial foi em 1964. Com um livro de fotos e uma fotografia de investigação, Bledsoe usou um programa de computador para cruzar a identidade do suspeito com outra no livro de fotos. Apesar de seu método ter se tornado popular, na época, ele era caro e lento em termos computacionais: o pesquisador conseguia processar somente 40 fotos por hora. Depois disso essa tecnologia foi evoluindo e evoluindo até chegar ao ponto que estamos hoje. Uma parte disso é realizado pela manipulação de imagem, a manipulação de uma imagem por um computador, no qual tem-se como entrada e saída uma imagem, é chamada de Processamento Digital de Imagens. O objetivo de se usar esse processamento é melhorar o aspecto visual das imagens possibilitando uma melhor interpretação, facilitando a extração de informações das mesmas.

Pessoas estão familiarizadas com o reconhecimento facial por causa do Face ID do Iphone, pois ele usa o reconhecimento para desbloquear o celular, ele simplesmente a identifica e reconhece como sendo a proprietária única do dispositivo, limitando o acesso de outros. O Face ID garante autenticação intuitiva e segura e é ativado pelo sistema de câmera TrueDepth de última geração, que usa tecnologias avançadas para mapear a geometria do rosto com precisão.

As leis também podem usar o reconhecimento facial, e as agências de aplicação da lei em vários países estão usando cada vez mais a tecnologia. A polícia tirou fotos de prisioneiros da polícia e as comparou com imagens de bancos de dados de reconhecimento facial locais, estaduais e federais.

Assim que a foto do prisioneiro for tirada, ela será adicionada ao banco de dados para verificação quando a polícia fizer uma busca criminal.

O reconhecimento facial móvel permite que os funcionários usem smartphones, tablets ou outros dispositivos portáteis para tirar fotos de motoristas ou pedestres no local e imediatamente compará-los com outras fotos em um ou mais bancos de dados de reconhecimento facial para tentar identificar. O reconhecimento facial ajuda a identificar terroristas ou outros criminosos, facilita o rastreamento de assaltantes, ladrões e invasores.

Para conseguir fazer um programa de reconhecimento facial além de utilizar o python também utilizamos bibliotecas para nos ajudar no processo. Uma dessas bibliotecas foi o Opencv.

Opencv é uma biblioteca de código aberto útil para aplicações de visão computacional, como análise de vídeo e análise de imagem. OpenCV é escrito em C ++ e possui mais de 2.500 algoritmos otimizados. Muito utilizado quando criamos aplicativos para visão computacional que não queremos construir do zero, podemos usar esta biblioteca para começar a nos concentrar nos problemas do mundo real. Existem muitas empresas que usam essa biblioteca hoje, como Google, Amazon, Microsoft e Toyota. Muitos pesquisadores e desenvolvedores contribuem.

Outra biblioteca utilizada foi o Face Recognition, uma biblioteca capaz de reconhecer e manipular rostos em python, uma biblioteca que consegue encontrar e distinguir rostos em uma imagem, podendo reconhecer um rosto colocar o nome da pessoa na imagem.

Obtenha a posição e o contorno dos olhos, nariz, boca e queixo de cada pessoa.

referencial_teorico1


Agora com o nome de cada pessoa na imagem, nota se que mesmo de uma imagem do celular ele consegue reconhecer o Barack Obama.

referencial_teorico2


Também utilizamos o NumPy, que é o pacote básico de computação científica em Python. É uma biblioteca Python que fornece objetos de matriz multidimensional, vários objetos derivados (como matrizes e matrizes mascaradas) e várias rotinas para realizar operações rápidas em matrizes, incluindo matemática, lógica, operações de forma, classificação, seleção. Discreta Transformada de Fourier, álgebra linear básica, operações estatísticas básicas, simulação aleatória, etc.

Tendo conhecimento de todas essas informações estávamos apto para conseguir fazer toda a nossa aps.


Plano de desenvolvimento da aplicação

Trabalho em equipe é muito importante e essencial, pois se a sua equipe não está satisfeita, eles não iram conseguir dar o máximo de si.

A primeira parte do nosso Plano de desenvolvimento foi fazermos uma reunião e discutir todas as ideias de todos os integrantes do grupo, primeiramente conversamos sobre o processamento de imagens em si, fazendo um levantamento de requisitos, como por exemplo o que deveria ser, o que poderíamos fazer, como poderíamos fazer, o que poderíamos usar de recursos, após termos uma ideia inicial decidimos que seria melhor dividir o nosso grupo em pequenas equipes, cada uma responsável pela entrega de algo no projeto, como por exemplo um grupo no desenvolvimento python, para fazermos o código que processa as propriedades de uma imagem e utiliza as para algum outro processamento da mesma , enquanto outro grupo cuidava de todo o objetivo logico do nosso objetivo estipulado.

Observando alguns vídeos de projetos semelhantes ao nosso objetivo e algumas páginas para fazermos o software, tivemos uma noção maior de como o trabalho seria feito.

Para fazermos o identificador facial, utilizamos a linguagem python e algumas de suas bibliotecas. Mas antes algo que nos que deu uma boa ideia da onde começar eram vários outros projetos já existentes que tratam imagem com objetivos diferentes, não utilizamos o mesmo objetivo que esses projetos, mas nos apontou uma direção para seguir.

plano_desenvolvimento_aplicacao1


plano_desenvolvimento_aplicacao2


Obs: O link dos projetos estará nas fontes bibliograficas.

Agora precisamos usar nosso objetivo para fazer isso. Python é muito famoso por sua sintaxe de programação simples, legibilidade e comandos tornam a codificação mais fácil e eficiente, razão pela qual é a linguagem de programação mais popular e preferida.

Ele foi originalmente projetado por Guido van Rossum em 1991 e desenvolvido pela Python Software Foundation. Ele é desenvolvido principalmente para enfatizar a legibilidade do código e sua sintaxe permite que os programadores expressem conceitos em menos linhas de código. Quando foi lançado pela primeira vez, usava menos código para expressar conceitos do que Java, C ++ e C.

Seu conceito de design também é muito bom. Seu objetivo principal é fornecer legibilidade de código e produtividade de desenvolvedor de alto nível.

Quando apareceu pela primeira vez, era capaz de fornecer herança, vários tipos de dados principais, tratamento de exceções e funções para classes.

plano_desenvolvimento_aplicacao3


Junto com o python utilizamos suas bibliotecas OpenCV, Face recognition, Numpy e OS para facilitar o processo.

OpenCV é a principal biblioteca de código aberto para a visão computacional, processamento de imagem e aprendizagem de máquina, e agora apresenta a aceleração de GPU para operação em tempo real

plano_desenvolvimento_aplicacao4


O Face Recognition é uma ferramenta para conhecer e manipular rostos do Python ou da linha de comando com a biblioteca de reconhecimento facial mais simples do mundo.

plano_desenvolvimento_aplicacao5


O NumPy é uma extensão de um Array Python, que lida apenas com Arrays Unidimensionais e oferece menos funcionalidade. Os Arrays NumPy são equipados com um grande número de funções e operadores que ajudam a escrever rapidamente códigos de alto desempenho para vários tipos de cálculos que discutimos acima.

plano_desenvolvimento_aplicacao6


Agora a biblioteca OS contém módulos embutidos (escritos em C) que fornecem acesso à funcionalidade do sistema, como E/S de arquivos que de outra forma seriam inacessíveis para programadores Python, bem como módulos escritos em Python que fornecem soluções padronizadas para muitos problemas que ocorrem em programação cotidiana.

Para mostrar as informações desse software utilizamos a webcam, com OpenCv para nos mostrar de forma mais clara a área do rosto, e também o nome da pessoa sendo reconhecida.

plano_desenvolvimento_aplicacao7


Agora que já temos o processamento da imagem e o processamento da webcam em tempo real com as informações que precisávamos. Com o código pronto, apenas subimos os itens no repositório do github para que a equipe inteira tenha a versão finalizada do projeto.

O GitHub é uma rede social de desenvolvedores. A primeira parte do nome, “Git”, é por causa da utilização do sistema de controle de versão e a segunda parte, “Hub”, tem a ver com a conexão entre profissionais de programação de qualquer lugar do mundo.

plano_desenvolvimento_aplicacao8


Projeto (estrutura) do programa

Nosso projeto, nós iremos criar uma biblioteca pessoal de rostos, processando esses rostos e guardando em listas os valores deles.

projeto_estrutura_programa1


Primeiro no processo nós temos o processo de reconhecer estes rostos, e guardar informações desses rostos como distancias de pontos cruciais, identificados pela biblioteca que usamos com o método HOG.. A ideia básica do HOG é dividir a imagem em pequenas unidades conectadas.

projeto_estrutura_programa2


Calcule o histograma de cada célula para saber mais sobre o histograma.

projeto_estrutura_programa3


Colete todos os histogramas juntos para formar um vetor de característica, ou seja, é composto de todos os pequenos histogramas exclusivos de cada face para formar um histograma.

projeto_estrutura_programa4


Assim, armazenando essas coordenadas, nós as resumimos em uma lista e realizamos o processo de identificação dos dados externos que implementamos no código. Apareceram três coordenadas, a saber, o rosto que ele reconheceu na webcam e o nome que apareceu quando ele encontrou o rosto mais parecido.

projeto_estrutura_programa5


Em primeiro lugar, neste processo, temos o processo de reconhecer essas faces, e armazenar as informações dessas faces como as distâncias de ponto-chave do reconhecimento da biblioteca que usamos usando o método HOG, para armazenar essas coordenadas, vamos resumi-los como uma lista e, em seguida, executar o processo de implementação do identificador nos dados externos do código, Neste caso, o dado externo é a câmera (webcam).

projeto_estrutura_programa6


Nesse caso o dado externo está sendo a câmera, que está sempre verificando se existem rostos na imagem, processando esses rostos gerando as coordenadas deles, e ao mesmo tempo já comparando essas coordenadas com as salvas de nossa biblioteca, assim concluindo que a coordenada mais próxima, ou seja, as distancias dos rostos que são mais semelhantes, nos retornando como a possível mesma pessoa e assim que isso é identificado, irá mostrar o nome da pessoa.


Relatório com as linhas de código

Nosso código foi escrito em Python, usando o Visual Studio Code.

Primeiramente importamos as bibliotecas necessárias para o funcionamento de todo o trabalho.

relatorio_linhas_codigo1


Após realizarmos as importações, o próximo passo é definir o caminho (local onde as fotos de referência estão arquivadas) e inicializarmos as listas de imagens, nomes e fotos na pasta rostos.

relatorio_linhas_codigo2


Neste trecho, percorreremos por todas as imagens dentro da pasta rostos, adicionando elas na lista de imagens e salvando seus respectivos nomes na lista de nomes. Terminado o processo, será impresso na tela os nomes adquiridos.

relatorio_linhas_codigo3


Em seguida, definimos a função encontrarEncodamento, que receberá a lista de imagens carregadas. Dentro da função, iniciaremos uma nova lista chamada listaEncodamento que armazenará os dados e coordenadas de cada imagem com o loop for, retornando no final, a lista completa com as informações.

relatorio_linhas_codigo4


Está etapa criará outra lista contendo todos os encodamentos agora conhecidos pelo programa e imprimirá um aviso de que o processo foi completado e seu número de faces encontradas.

relatorio_linhas_codigo5


Criando variável para captura de tela, com entrada de qualquer câmera no computador do usuário.

relatorio_linhas_codigo6


Iniciamos um loop infinito, que lerá cada frame capturado pela câmera conectada em tempo real. Redimensionando e convertendo as cores das imagens vistas para logo em seguida analisar os dados com maior facilidade e identificar os rostos que estão aparecendo na câmera com a função face_locations da biblioteca face_recognition. Salvando na variável rostoAtual, para depois utilizar a função face_encodings, onde serão calculadas as coordenadas desses rostos que simultaneamente estão sendo capturados pela câmera e salvos na variável encodamentoAtual.

relatorio_linhas_codigo7


Aqui o algoritmo irá comparar os rostos, verificar os distanciamento dos pontos e interligar as coordenadas que batem com a face do individuo apontado pela câmera.

relatorio_linhas_codigo8


Agora será verificado se os rosto de ambas as imagens estão correspondendo. Logo depois com a biblioteca opencv acontecerá o tratamento das legendas (em letras maiúsculas) formando um retângulo para sinalizar que um rosto foi encontrado.

relatorio_linhas_codigo9


Por último, o programa mostrará a imagem da webcam usada, enquanto espera pela tecla 1 ser pressionada para encerrar o algoritmo.

relatorio_linhas_codigo10


Fonte Bibliografica e Link do projeto

https://www.projectpro.io/article/image-processing-projects-ideas/460

https://medium.com/mlcrunch/face-detection-using-dlib-hog-198414837945

https://github.com/opencv/opencv-python/actions/workflows/build_wheels_windows.yml

https://pypi.org/project/opencv-python/

https://pt.wikipedia.org/wiki/OpenCV

https://pypi.org/project/face-recognition/

https://medium.com/mlcrunch/face-detection-using-dlib-hog-198414837945

Owner
Eduardo Talarico
Close your eyes and open your mind!
Eduardo Talarico
Dirty, ugly, and hopefully useful OCR of Facebook Papers docs released by Gizmodo

Quick and Dirty OCR of Facebook Papers Gizmodo has been working through the Facebook Papers and releasing the docs that they process and review. As lu

Bill Fitzgerald 2 Oct 28, 2021
A simple Security Camera created using Opencv in Python where images gets saved in realtime in your Dropbox account at every 5 seconds

Security Camera using Opencv & Dropbox This is a simple Security Camera created using Opencv in Python where images gets saved in realtime in your Dro

Arpit Rath 1 Jan 31, 2022
MORAN: A Multi-Object Rectified Attention Network for Scene Text Recognition

MORAN: A Multi-Object Rectified Attention Network for Scene Text Recognition Python 2.7 Python 3.6 MORAN is a network with rectification mechanism for

Canjie Luo 595 Dec 27, 2022
A python script based on opencv and paddleocr, which can automatically pick up tasks, make cookies, and receive rewards in the Destiny 2 Dawning Oven

A python script based on opencv and paddleocr, which can automatically pick up tasks, make cookies, and receive rewards in the Destiny 2 Dawning Oven

1 Dec 22, 2021
Python tool that takes the OCR.space JSON output as input and draws a text overlay on top of the image.

OCR.space OCR Result Checker = Draw OCR overlay on top of image Python tool that takes the OCR.space JSON output as input, and draws an overlay on to

a9t9 4 Oct 18, 2022
The code for CVPR2022 paper "Likert Scoring with Grade Decoupling for Long-term Action Assessment".

Likert Scoring with Grade Decoupling for Long-term Action Assessment This is the code for CVPR2022 paper "Likert Scoring with Grade Decoupling for Lon

10 Oct 21, 2022
基于Paddle框架的PSENet复现

PSENet-Paddle 基于Paddle框架的PSENet复现 本项目基于paddlepaddle框架复现PSENet,并参加百度第三届论文复现赛,将在2021年5月15日比赛完后提供AIStudio链接~敬请期待 AIStudio链接 参考项目: whai362-PSENet 环境配置 本项目

QuanHao Guo 4 Apr 24, 2022
A Tensorflow model for text recognition (CNN + seq2seq with visual attention) available as a Python package and compatible with Google Cloud ML Engine.

Attention-based OCR Visual attention-based OCR model for image recognition with additional tools for creating TFRecords datasets and exporting the tra

Ed Medvedev 933 Dec 29, 2022
A version of nrsc5-gui that merges the interface developed by cmnybo with the architecture developed by zefie in order to start a new baseline that is not heavily dependent upon Python processing.

NRSC5-DUI is a graphical interface for nrsc5. It makes it easy to play your favorite FM HD radio stations using an RTL-SDR dongle. It will also displa

61 Dec 22, 2022
A pure pytorch implemented ocr project including text detection and recognition

ocr.pytorch A pure pytorch implemented ocr project. Text detection is based CTPN and text recognition is based CRNN. More detection and recognition me

coura 444 Dec 30, 2022
A little but useful tool to explore OCR data extracted with `pytesseract` and `opencv`

Screenshot OCR Tool Extracting data from screen time screenshots in iOS and Android. We are exploring 3 options: Simple OCR with no text position usin

Gabriele Marini 1 Dec 07, 2021
Create single line SVG illustrations from your pictures

Create single line SVG illustrations from your pictures

Javier Bórquez 686 Dec 26, 2022
【Auto】原神⭐钓鱼辅助工具 | 自动收竿、校准游标 | ✨您只需要抛出鱼竿,我们会帮你完成一切✨

原神钓鱼辅助工具 ✨ 作者正在努力重构代码中……会尽快带给大家一个更完美的脚本 ✨ 「您只需抛出鱼竿,然后我们会帮您搞定一切」 如果你觉得这个脚本好用,请点一个 Star ⭐ ,你的 Star 就是作者更新最大的动力 点击这里 查看演示视频 ✨ 欢迎大家在 Issues 中分享自己的配置文件 ✨ ✨

261 Jan 02, 2023
Code for CVPR2021 paper "Learning Salient Boundary Feature for Anchor-free Temporal Action Localization"

AFSD: Learning Salient Boundary Feature for Anchor-free Temporal Action Localization This is an official implementation in PyTorch of AFSD. Our paper

Tencent YouTu Research 146 Dec 24, 2022
chineseocr/table_line 表格线检测模型pytorch版

table_line_pytorch chineseocr/table_detct 表格线检测模型table_line pytorch版 原项目github: https://github.com/chineseocr/table-detect 1、模型转换 下载原项目table_detect模型文

1 Oct 21, 2021
Code for CVPR 2022 paper "SoftGroup for Instance Segmentation on 3D Point Clouds"

SoftGroup We provide code for reproducing results of the paper SoftGroup for 3D Instance Segmentation on Point Clouds (CVPR 2022) Author: Thang Vu, Ko

Thang Vu 231 Dec 27, 2022
TextBoxes++: A Single-Shot Oriented Scene Text Detector

TextBoxes++: A Single-Shot Oriented Scene Text Detector Introduction This is an application for scene text detection (TextBoxes++) and recognition (CR

Minghui Liao 930 Jan 04, 2023
An OCR evaluation tool

dinglehopper dinglehopper is an OCR evaluation tool and reads ALTO, PAGE and text files. It compares a ground truth (GT) document page with a OCR resu

QURATOR-SPK 40 Dec 20, 2022
Characterizing possible failure modes in physics-informed neural networks.

Characterizing possible failure modes in physics-informed neural networks This repository contains the PyTorch source code for the experiments in the

Aditi Krishnapriyan 55 Jan 02, 2023
Tools for manipulating and evaluating the hOCR format for representing multi-lingual OCR results by embedding them into HTML.

hocr-tools About About the code Installation System-wide with pip System-wide from source virtualenv Available Programs hocr-check -- check the hOCR f

OCRopus 285 Dec 08, 2022