Search
Close this search box.
Detecção facial super eficiente com OpenCV
Detecção facial OpenCV

Posts Relacionados:

Detecção facial é uma tarefa central em visão computacional. Com inúmeras aplicações, ela pode ser facilmente realizada com OpenCV.

Receba nossa newsletter

Detecção facial com OpenCV

Detecção facial é uma das aplicações mais importantes de visão computacional. Ela também é uma das populares e, por isso, conta com várias opções. Uma das opções mais amigáveis para quem deseja realizar a detecção facial para criar aplicações inteligentes rapidamente é através do uso de modelos pré-treinados. Já apresentamos vários (aqui, aqui e aqui). Todos têm vantagens e desvantagens. Portanto, a decisão sobre qual usar num aplicativo deve ser analisada caso a caso. Exatamente por essa razão, quanto mais opções você conhecer, melhor será sua capacidade de fazer uma escolha bem informada. Neste post, o foco será num modelo famoso e bem eficiente: dnn face detection disponível através do OpenCV.

O modelo de deep learning

Este é um modelo Caffe baseado no Single Shot-Multibox Detector (SSD). Ele possui a arquitetura ResNet-10 como seu centro. ResNet-10 é uma rede neural consagrada para tarefas de visão computacional. O modelo Caffe dnn foi introduzido após o OpenCV 3.3 em seu módulo de rede neural profunda (dnn). Há também uma versão quantizada (reduzida) do Tensorflow, mas usaremos o modelo Caffe já disponível com OpenCV.

Requerimentos

É preciso ter o NumPy e OpenCV instalados para usar o modelo. Também é necessário baixar os pesos e a rede que serão usados. Ambos são encontrados na página do GitHub do OpenCV DNN. Acesse a página e baixe dois arquivos: res10_300x300_ssd_iter_140000.caffemodel e deploy.prototxt.txt.

Detecção facial em código

Num código Python, primeiro importamos os pacotes necessários, carregamos o modelo e seus pesos e abrimos uma imagem para a detecção facial:

				
					import cv2
import numpy as np

modelFile = "res10_300x300_ssd_iter_140000.caffemodel"
configFile = "deploy.prototxt.txt"
net = cv2.dnn.readNetFromCaffe(configFile, modelFile)
img = cv2.imread('SUA IMAGEM AQUI')
				
			

Depois, criamos um blob a partir da imagem usando a função blobFromImage. Para conhecer mais sobre essa função, clique aqui. Ela subtrai valores próximos a valores médios dos canais. Mas é descrito na literatura que subtrair 117 do canal de verde gera melhor resultados. O mesmo vale para os outros valores usados na função. Ou seja, esses valores são obtidos por tentativa e erro:

				
					h, w = img.shape[:2]
blob = cv2.dnn.blobFromImage(cv2.resize(img, (300, 300)), 1.0,
(300, 300), (104.0, 117.0, 123.0))
				
			

Em seguida, as funções net.setInput(blob) e net.forward() são usadas para detectar rostos na imagem:

				
					net.setInput(blob)
faces = net.forward()
				
			

Por fim, usamos um loop para desenhar caixas delimitadoras em cada rosto detectado desde que a confiança obtida seja maior do que 0.5:

				
					
for i in range(faces.shape[2]):
    confidence = faces[0, 0, i, 2]
    if confidence > 0.5:
        box = faces[0, 0, i, 3:7] * np.array([w, h, w, h])
        (x, y, x1, y1) = box.astype("int")
        cv2.rectangle(img, (x, y), (x1, y1), (0, 0, 255), 2)     
				
			

Alguns resultados são mostrados abaixo:

Esse código é facilmente modificado para detectar faces em vídeos conforme descrito aqui e aqui.

Imagem com IA Generativa – Dia 274

IA generativa img 274

Arte com IA generativa: imagem do dia

Todos os dias, postamos um exemplo de imagem artística gerada com inteligência artificial.

Tutoriais

Postagens Mais Recentes

Outras Postagens Que Podem Interessar

Veja
Mais

Fique em contato

Se inscreva para receber nossa newsletter com novidades.

aprendiz artificial