Contar o número de Faces usando Python - OpenCV
Pré-requisitos: detecção de rosto usando dlib e openCV
Neste artigo, usaremos o processamento de imagem para detectar e contar o número de rostos. Não devemos obter todas as características do rosto. Em vez disso, o objetivo é obter a caixa delimitadora por meio de alguns métodos, ou seja, as coordenadas do rosto na imagem, dependendo das diferentes áreas cobertas pelo número de coordenadas, número de faces que serão calculadas.
Bibliotecas necessárias:
- A biblioteca OpenCV em python é uma biblioteca de visão computacional, usada principalmente para processamento de imagem, processamento e análise de vídeo, reconhecimento e detecção facial, etc.
- A biblioteca Dlib em python contém o detector de pontos de referência facial pré-treinado, que é usado para detectar as coordenadas (x, y) que mapeiam para estruturas faciais no rosto.
- Numpy é um pacote de processamento de array de propósito geral. Ele fornece um objeto de array multidimensional de alto desempenho e ferramentas para trabalhar com esses arrays.
Abaixo está a abordagem passo a passo para contar o número de faces:
Etapa 1: importe as bibliotecas necessárias.
import
cv2
import
numpy as np
import
dlib
Etapa 2: Abra a câmera padrão para capturar faces e use a biblioteca dlib para obter as coordenadas.
cap
=
cv2.VideoCapture(
0
)
detector
=
dlib.get_frontal_face_detector()
Etapa 3: conte o número de faces.
- Capture os quadros continuamente.
- Converta os quadros em tons de cinza (não é necessário).
- Pegue um iterador ie inicialize-o para zero.
- Cada vez que você obtém as coordenadas da estrutura da face no quadro, aumente o iterador em 1.
- Trace a caixa ao redor de cada rosto detectado junto com sua contagem de rosto.
while
True
:
ret, frame
=
cap.read()
frame
=
cv2.flip(frame,
1
)
gray
=
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces
=
detector(gray)
i
=
0
for
face
in
faces:
x, y
=
face.left(), face.top()
x1, y1
=
face.right(), face.bottom()
cv2.rectangle(frame, (x, y), (x1, y1), (
0
,
255
,
0
),
2
)
i
=
i
+
1
cv2.putText(frame,
'face num'
+
str
(i), (x
-
10
, y
-
10
),
cv2.FONT_HERSHEY_SIMPLEX,
0.7
, (
0
,
0
,
255
),
2
)
(face, i)
cv2.imshow(
'frame'
, frame)
Etapa 4: termine o loop.
if
cv2.waitKey(
1
) &
0xFF
=
=
ord
(
'q'
):
break
Etapa 5: limpar as janelas.
cap.release()
cv2.destroyAllWindows()
Abaixo está o programa completo da abordagem acima:
import
cv2
import
numpy as np
import
dlib
cap
=
cv2.VideoCapture(
0
)
detector
=
dlib.get_frontal_face_detector()
while
True
:
ret, frame
=
cap.read()
frame
=
cv2.flip(frame,
1
)
gray
=
cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces
=
detector(gray)
i
=
0
for
face
in
faces:
x, y
=
face.left(), face.top()
x1, y1
=
face.right(), face.bottom()
cv2.rectangle(frame, (x, y), (x1, y1), (
0
,
255
,
0
),
2
)
i
=
i
+
1
cv2.putText(frame,
'face num'
+
str
(i), (x
-
10
, y
-
10
),
cv2.FONT_HERSHEY_SIMPLEX,
0.7
, (
0
,
0
,
255
),
2
)
(face, i)
cv2.imshow(
'frame'
, frame)
if
cv2.waitKey(
1
) &
0xFF
=
=
ord
(
'q'
):
break
cap.release()
cv2.destroyAllWindows()
Resultado:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva