face_detection.py
# Este trabalho está licenciado sob a licença MIT.
# Copyright (c) 2013-2023 OpenMV LLC. Todos os direitos reservados.
# https://github.com/openmv/openmv/blob/master/LICENSE
#
# Exemplo de Detecção de Rosto
#
# Este exemplo mostra o recurso embutido de detecção de rosto da OpenMV Cam.
#
# A detecção de rosto funciona usando o detector de características Haar Cascade em uma imagem. Um
# Haar Cascade é uma série de verificações simples de contraste de área. Para o detector
# frontalface embutido existem 25 estágios de verificações, cada estágio tendo
# centenas de verificações cada. Haar Cascades rodam rápido porque os estágios posteriores são
# avaliados apenas se os estágios anteriores passarem. Além disso, sua OpenMV Cam usa
# uma estrutura de dados chamada imagem integral para executar rapidamente cada verificação
# de contraste de área em tempo constante (o motivo da detecção de características ser
# somente em escala de cinza é o requisito de espaço para a imagem integral).
import csi
import time
import image
csi0 = csi.CSI()
csi0.reset()
csi0.contrast(3)
csi0.gainceiling(16)
csi0.framesize(csi.HQVGA) # HQVGA e GRAYSCALE são os melhores para rastreamento de rosto.
csi0.pixformat(csi.GRAYSCALE)
# Carrega o Haar Cascade
# Por padrão, isso usará todos os estágios; menos estágios é mais rápido, mas menos preciso.
face_cascade = image.HaarCascade("/rom/haarcascade_frontalface.cascade", stages=25)
print(face_cascade)
# Relógio de FPS
clock = time.clock()
while True:
clock.tick()
# Captura o snapshot
img = csi0.snapshot()
# Encontra objetos.
# Nota: Um fator de escala menor reduz mais a imagem e detecta objetos menores.
# Um limiar mais alto resulta em uma taxa de detecção maior, com mais falsos positivos.
objects = img.find_features(face_cascade, threshold=0.75, scale=1.25)
# Desenha objetos
for r in objects:
img.draw_rectangle(r)
# Imprime o FPS.
# Nota: O FPS real é maior, transmitir o FB torna mais lento.
print(clock.fps())