ESTUDANDO O MUNDO ARDUINO E ANTECIPANDO O FUTURO:

EXERCÍCIO n0 2
 

 

Bem, agora que você já viu o funcionamento do aplicativo n0 1 que apenas pega uma foto no notebook e mostra ela no monitor, vamos dar mais passo para a frente.

Este exercício n 2 faz exatamente o mesmo que o exercício n 1 mas, além disso, usa uma função do OpenCV, a função

Você vai precisar de uma função que dá as características da face que iremos procurar.

É a função FRONTAL FACE (face de frente) que você não tem ainda, então precisa baixar pela internet. Um bom site que contém muitas dessas funções tipo haarcascade é o seguinte:

https://github.com/opencv/opencv/tree/master/data/haarcascades

Neste site será apresentada uma enorme lista de funções haarcascade como a seguinte:

A função haarcascade que nos interessa no momento é a frontal face, isto é, a função:

haarcascade_frontalface_default.xml

baixar esta função e armazenar na pasta de DATA dentro da past do seu Projeto. No meu caso a pasta é a pasta WatanabeIniciando que eu acesso no meu notebook com:

c:user/watanabe/PyCharmProjects/WatanabeIniciando/venv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml

veja como está a minha pasta de haarcascade:

Viu? além da haarcascade_frontalface.default.xml tenho também a haarcascade_eye.xml que iremos usar num outro exercício para detecção de olhos (eyes).

Se você tiver dificuldade de baixar e instalar as funções haarcascade, a internet tem um monte de dicas e vídeos que mostram como se faz isso.

2o PASSO: Digitar os comandos do exercício n0 2:

Use a técnica do Ctrl-C + Ctrl-V. Lembre-se que o comando CASCADE e o ARQUIVO precisam ser substituídos pelos caminhos onde você guardou esses arquivos:

#=====================================================================
#
# Exercicio02.py Pega uma foto, busca faces nela e mostra o resultado
#
# Roberto Massaru Watanabe
# R-0 26.06.2020
#

# 1 - Dá sinal de vida:
print ('Ola, como vai.')
# 2- Carrega biblioteca OpenCV:
import cv2
# 3- Define o tipo de objeto que vai ser procurado na foto:
#    É aqui que a gente define o tipo de objeto que queremos encontrar na foto
#    No caso desejamos encontrar Faces de Frente (e não de lado)
#    e a função do OpenCV que define a Face de Frente é a função frontalface:
cascade_path = '/ARQUIVOS/ARDUINO/PYTHONprogramas/haarcascade_frontalface_default.xml'
clf = cv2.CascadeClassifier(cascade_path)
# 4- Localização do arquivo da foto:
arquivo = "/ARQUIVOS/ARDUINO/pythonprogramas/imagem23.jpg"
# 5- Lê o arquivo da foto
imagem = cv2.imread(arquivo)
# 6- Converte em branco e preto para fazer a busca com FrontalFace:
gray = cv2.cvtColor(imagem, cv2.COLOR_BGR2GRAY)

# 7- Define o grau de precisão para fazer a busca:
#    números grandes faz uma busca rápida e um pouco grosseira
#    números pequenos pega até as faces bem pequena mas a execução será mais demorada.
precisao = 1.5
# 8- Faz a busca das faces do tipo FrontalFace cujo indice está guardado em CLF:
#    A variável FACES vai guardando as coordenadas X e Y de onde está a face
#    e as variáveis W e H o tamanho da imagem encontrada, W é a largura e H a altura.
faces = clf.detectMultiScale(gray,precisao,10)

# 9 - Desenha um retângulo em cada face detectada. Usa a função RECTANGLE
#     Há outras funções que fazem outros tipos de desenhos
#     A cor é definida por 3 parãmetros B, G, R isto é, Blue, Green e Red.
#     isto é, Azul, Verde e Vermelho que no caso são os valores 255, 255 e 0.
for (x, y, w, h) in faces:
    imagem = cv2.rectangle(imagem,(x,y),(x+w,y+h),(255,255,0),2)

# 10- Mostra a imagem com os retângulos desenhados:
cv2.imshow('Veja os rostos que encontrei:',imagem)

# 11- Interrompe a execução para dar tempo de ver a imagem:
print ('Aguardando o pressionamento de uma tecla')
cv2.waitKey(0)

# 12- Antes de terminar a execução do aplicativo, limpa a área do monitor:
cv2.destroyAllWindows()

# 13- Encerra, mostrando uma mensagem:
print('****** FINAL DO PROCESSO *****')

# FINAL DO APLICATIVO
#====================================================================================

3o PASSO: Feita a digitação dos comandos e colocado os caminhos certos para o PyCHARM encontrar os arquivos, agora basta executar.

Pode acontecer da execução do aplicativo dar certo (EXIT CODE = 0) ou pode dar erro (EXIT CODE = 1).

Se der erro é porque o PyCHARM não encontrou os arquivos ou você digitou algum comando de forma diferente do que está acima. Verifique se os arquivos existem, estão nas pastas indicadas e se o nome deles estão exatamente como são. Lembre-se que para o PyCHARM, um nome escrito como 'imagem23.jpg" é diferente de 'imagem23.JPG' e é diferente de 'Imagem23.jpg'.

Com o EXIT CODE = 0 que significa que a execução deu certo, deve ser apresentado no monitor a seguinte imagem:

A variável PRECISAO determina o grau de finura da busca. Se voce colocar precisao = 2 a execução será mais rápida mas o haarcascade_frontalface_default.xml não vai encontrar nenhuma face ou talvez encontre poucas faces. Se voce colocar precisao = 1.2 a pesquisa será mais fina, ele vai encontrar mais faces mas, em compensação a execução será muito mais demorada. Faca testes para você sentir qual o número que dá a PRECISAO mais adequada para a sua aplicação.

 

No nosso caso em que estamos objetivando fazer um sistema para identificar pessoas na portaria do condomínio, onde a câmera de segurança precisa detectar poucas pessoas e que estão mais ou menos bem próximas da câmera talvez uma precisão com um valor tipo 2.1 será mais que suficiente. Você precisa tentar com vários números.

 

 

NOTA: Este site é mantido pela equipe do engenheiro Roberto Massaru Watanabe e se destina principalmente para adolecentes e estudantes. Pelo caráter pedagógico do site, seu conteúdo pode ser livremente copiado, impresso e distribuido. Só não pode piratear, isto é, copiar e depois divulgar como se fosse de sua autoria.


ET-18\RMW\IdentificarPessoas\exercicio01.htm em 05/07/2020, atualizado em 05/07/2020 .