- Componentes necessários
- Instalando OpenCV no Raspberry Pi
- Como detectar as partes do rosto usando dlib
- Programando o Raspberry Pi para detecção facial de pontos de referência
- Testando o Reconhecedor de Parte Facial
A detecção de pontos de referência faciais é o processo de detectar várias partes do rosto, como sobrancelhas, olhos, nariz, boca e mandíbula. Existem muitos aplicativos que usam técnicas de detecção de marcos faciais.
Anteriormente, construímos um sistema de reconhecimento facial usando OpenCV, hoje vamos usar o mesmo OpenCV com Raspberry Pi para detecção de pontos de referência facial. Um módulo detector de pontos de referência facial pré-treinado da biblioteca dlib será usado para detectar a localização das principais estruturas faciais no rosto e o OpenCV python será usado para visualizar as partes do rosto detectadas.
Componentes necessários
Componentes de hardware
- Raspberry Pi 3
- Módulo de câmera Pi
Software e serviços online
- OpenCV
- Dlib
- Python3
Antes de prosseguir com a Detecção de Marco Facial Raspberry Pi 3 , primeiro, precisamos instalar o OpenCV, imutils, dlib, Numpy e algumas outras dependências neste projeto. OpenCV é usado aqui para processamento de imagem digital. As aplicações mais comuns de Processamento Digital de Imagens são detecção de objetos, Reconhecimento facial e contador de pessoas.
Para saber mais sobre como fazer a interface da câmera Pi com o Raspberry Pi, siga nossos tutoriais anteriores.
Instalando OpenCV no Raspberry Pi
Aqui, a biblioteca OpenCV será usada para o scanner Raspberry Pi QR. Para instalar o OpenCV, primeiro atualize o Raspberry Pi.
sudo apt-get update
Em seguida, instale as dependências necessárias para instalar o OpenCV em seu Raspberry Pi.
sudo apt-get install libhdf5-dev -y sudo apt-get install libhdf5-serial-dev –y sudo apt-get install libatlas-base-dev –y sudo apt-get install libjasper-dev -y sudo apt-get install libqtgui4 –Y sudo apt-get install libqt4-test –y
Depois disso, instale o OpenCV no Raspberry Pi usando o comando abaixo.
pip3 install opencv-contrib-python == 4.1.0.25
Anteriormente, usamos o OpenCV com Raspberry pi e criamos muitos tutoriais sobre ele.
- Instalando OpenCV no Raspberry Pi usando CMake
- Reconhecimento facial em tempo real com Raspberry Pi e OpenCV
- Reconhecimento de matrículas usando Raspberry Pi e OpenCV
- Estimativa do tamanho da multidão usando OpenCV e Raspberry Pi
Também criamos uma série de tutoriais OpenCV começando no nível iniciante.
Instalando imutils : o imutils é usado para executar algumas funções de processamento de imagem necessárias, como tradução, rotação, redimensionamento, esqueletização e exibição de imagens Matplotlib mais facilmente com OpenCV. Portanto, instale o imutils usando o comando abaixo:
pip3 install imutils
Instalando dlib: dlib é o kit de ferramentas moderno que contém algoritmos e ferramentas de aprendizado de máquina para problemas do mundo real. Use o comando abaixo para instalar o dlib.
pip3 instalar dlib
Instalando NumPy : NumPy é a biblioteca central para computação científica que contém um poderoso objeto de matriz n-dimensional, fornece ferramentas para integrar C, C ++, etc.
Pip3 install numpy
Como detectar as partes do rosto usando dlib
Usaremos o detector de pontos de referência facial pré-treinado da biblioteca dlib para detectar a localização de 68 (x, y) coordenadas que mapeiam as estruturas faciais do rosto. O preditor de pontos de referência facial dlib é treinado no conjunto de dados iBUG 300-W. Uma imagem contendo os índices das 68 coordenadas é fornecida abaixo:
Programando o Raspberry Pi para detecção facial de pontos de referência
O código python completo para reconhecimento de partes faciais com o detector de pontos de referência facial pré-treinado do dlib é fornecido no final da página. Aqui estamos explicando algumas partes importantes do código para melhor compreensão.
Portanto, como de costume, inicie o código incluindo todas as bibliotecas necessárias.
from imutils import face_utils import numpy as np import argparse import imutils import dlib import cv2 from picamera.array import PiRGBArray from picamera import PiCamera
Em seguida, inicialize o objeto da câmera e defina a resolução em (640, 480) e a taxa de quadros em 30 fps
camera = PiCamera () camera.resolution = (640, 480) camera.framerate = 30
Agora, nas próximas linhas, use o analisador de argumento para fornecer o caminho para o preditor de marco facial.
ap = argparse.ArgumentParser () ap.add_argument ("- p", "--shape-predictor", obrigatório = True, help = "caminho do preditor de marco facial") args = vars (ap.parse_args ())
Nas próximas linhas, inicialize o detector de rosto pré-treinado dlib baseado em HOG e carregue o preditor de marco facial pré-treinado.
detector = dlib.get_frontal_face_detector () predictor = dlib.shape_predictor (args)
Em seguida, use a função capture_continuous para começar a capturar os quadros da câmera Raspberry Pi.
para quadro em camera.capture_continuous (rawCapture, format = "bgr", use_video_port = True): image = frame.array cv2.imshow ("Frame", imagem) key = cv2.waitKey (1) & 0xFF rawCapture.truncate (0)
Use a tecla 'S' do teclado para capturar um quadro específico. Em seguida, redimensione a imagem capturada e converta-a em tons de cinza.
if key == ord ("s"): image = imutils.resize (image, width = 400) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Use a função de detector da biblioteca dlib para detectar os rostos na imagem capturada.
rects = detector (cinza, 1)
Tire a foto na qual a detecção de rosto foi realizada, determine os marcos faciais e converta os 68 pontos em uma matriz NumPy. Faça um loop em cada uma das regiões da face individualmente.
para (i, ret) em enumerar (retos): forma = preditor (cinza, retângulo) forma = face_utils.shape_to_np (forma)
Em seguida, tire uma cópia da imagem original e use -a para o loop para desenhar o nome da parte do rosto na imagem. A cor do texto será vermelha, você pode alterá-la para outra cor alterando os valores RGB.
para (nome, (i, j)) em face_utils.FACIAL_LANDMARKS_IDXS.items (): clone = imagem.copy () cv2.putText (clone, nome, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0,7, (0, 0, 255), 2)
Agora vamos fazer um loop sobre as partes do rosto detectadas e usar a função de desenho OpenCV para desenhar círculos nessas partes do rosto. Você pode seguir este documento OpenCV para obter mais informações sobre as funções de desenho
para (x, y) na forma: cv2.circle (clone, (x, y), 1, (0, 0, 255), -1)
Agora, nas próximas linhas, extrairemos cada parte da face como uma imagem separada, calculando a caixa delimitadora das coordenadas de uma parte da face específica. A imagem extraída será redimensionada para 250 pixels.
(x, y, w, h) = cv2.boundingRect (np.array (])) roi = imagem roi = imutils.resize (roi, largura = 250, inter = cv2.INTER_CUBIC)
Agora, nas últimas linhas do código, exiba as partes do rosto com seus nomes e uma imagem separada dessa parte. Use a tecla ESC para alterar a região da face.
cv2.imshow ("ROI", roi) cv2.imshow ("Imagem", clone) cv2.waitKey (0)
Testando o Reconhecedor de Parte Facial
Para testar o projeto, crie um diretório e navegue até ele usando os comandos abaixo:
mkdir face-part-detector cd face-part-detector
Agora baixe o arquivo shape_predictor_68_face_landmarks.dat deste link e, em seguida, extraia e copie o arquivo shape_predictor_68_face_landmarks.dat dentro desta biblioteca e, em seguida, abra um novo arquivo chamado detect.py e cole o código fornecido a seguir.
Agora inicie o código Python usando o comando abaixo:
python3 detect.py --shape-predictor shape_predictor_68_face_landmarks.dat
Você verá uma janela mostrando uma exibição ao vivo de sua câmera. Em seguida, pressione a tecla 'S' para selecionar um quadro da transmissão ao vivo. Você verá pontos vermelhos na área da boca. Use a tecla ESC para ver as outras partes do rosto.
O código Python completo e o vídeo de demonstração são fornecidos abaixo.