Neste post, exploraremos a integração perfeita da inteligência artificial para vigilância com um algoritmo de detecção de rostos. A detecção de rostos é uma das mais importantes aplicações de inteligência artificial para vigilância. Ela também é uma das principais técnicas de visão computacional. A visão computacional também conta com algoritmos de reconhecimento facial, reconhecimento de emoções, detecção de veículos e outros objetos, além de outras técnicas.
A detecção de rostos é uma técnica que revoluciona a maneira como monitoramos e protegemos nosso entorno. Além disso, ela é facilmente implementada em Python.
Existem vários algoritmos e modelos pré-treinados de detecção de rostos disponíveis em repositórios como GitHub e em diversos sites (veja aqui, aqui e aqui). Eles podem ser usados facilmente no desenvolvimento de aplicativos para as mais variadas finalidades.
Neste post, usaremos um dos melhores algoritmos disponíveis para detecção de objetos: o yolo. Já falamos sobre o yolo antes. Ele é um algoritmo excelente de detecção de objetos em geral. Nessa postagem, utilizaremos o yolo para detecção de rostos. Além de possuir alta acurácia e ser facilmente customizado, o yolo também é rápido. Por isso, ele é ideal para aplicações que requerem processamento em tempo real.
Inteligência Artificial para Vigilância: Detecção de Rostos
Para realizar detecção de rostos com yolo, é preciso instalar as seguintes bibliotecas: ultralytics, torch (PyTorch), torchvision e OpenCV. Instale tudo preferencialmente em um ambiente virtual. Aparentemente, na data dessa postagem, o PyTorch ainda não tem suporte estável para Python 3.12, portanto, use uma versão mais antiga do Python. O código do post foi implementado em Python 3.10. Para instalar as bibliotecas com pip:
pip install opencv-python ultralytics torch torchvision
Instalações com conda podem ser feitas com os comandos:
conda install conda-forge::ultralytics
conda install pytorch::pytorch
conda install pytorch::torchvision
conda install conda-forge::opencv
Detecção de Rostos em Vídeo e em Tempo Real
Faremos a detecção de rostos diretamente em vídeo. O código é bem simples. Primeiro importamos os pacotes que usaremos. O PyTorch e torchvision são usados no background.
import os
import cv2
from ultralytics import YOLO
from ultralytics.utils.plotting import Annotator
Para capturar um vídeo, é necessário criar um objeto VideoCapture com OpenCV. Seu argumento pode ser o índice do dispositivo ou o nome de um arquivo de vídeo. Para usar um arquivo de vídeo, o comando é:
video_cap = cv2.VideoCapture("PATH PARA SEU VIDEO AQUI")
Um índice de dispositivo é apenas o número para especificar qual câmera abastecerá o código quando se deseja usar o yolo com vídeos captados em tempo real. Normalmente, apenas uma câmera é conectada. Então, o índice usado é 0. Se houver mais de uma câmera, a segunda câmera pode ser selecionada passando 1 e assim por diante. Portanto, para usar a câmera do computador no lugar de um arquivo de vídeo, substitua a linha de código acima pelo comando abaixo:
video_cap = cv.VideoCapture(0)
Detecção de Rostos com Yolo
O uso do yolo é fácil. Primeiro, selecionamos o modelo que utilizaremos para detecção de rostos. Ele será baixado na primeira vez em que o código for executado. O yolo possui modelos de diferentes tamanhos, usaremos o modelo m que tem um tamanho intermediário.
model = YOLO("yolov8m-face.pt")
Depois, basta fazer um loop pelos frames do vídeo. O código para isso é mostrado inteiro abaixo. Esse trecho de código aplica o yolo em cada frame para detectar rostos. Depois, ele faz um loop por todos os rostos detectados e anota uma caixa ao redor deles.
while True:
ret, frame = video_cap.read()
controlkey = cv2.waitKey(1)
if not ret:
break
detections = model(frame)[0] # detecta rostos
for r in detections: # executa um loop pelos rostos detectados
annotator = Annotator(frame) # anotador
boxes = r.boxes
for box in boxes:
b = box.xyxy[0] # coordenadas dos rostos
annotator.box_label(b) # anota coordenadas em cada rosto localizado
cv2.imshow("Frame", frame) # mostra frame com rostos localizados
if cv2.waitKey(1) == ord("q"):
break
video_cap.release()
cv2.destroyAllWindows()
Abaixo mostramos um exemplo de vídeo com os rostos detectados com o yolo.
Outro exemplo só para mostrar que o yolo é bom mesmo.
Agora basta você conectar esse código numa câmera na sua residência e o Python detectará se alguém entrar sem autorização.