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 .