Exemplo de uma extração de pontos de referência que deveria ser guardada em banco #127
Replies: 1 comment
-
Código de exemplo guardando essas coordenadas de pontos da face em c# Existem diversas bibliotecas e APIs disponíveis para realizar a extração de pontos de referência em uma imagem facial, como o OpenCV e o Microsoft Azure Face API. Para exemplificar, vou utilizar a biblioteca EmguCV, uma biblioteca .NET para o OpenCV. O exemplo a seguir mostra como extrair os pontos de referência da face em uma imagem usando o detector de face Haar Cascade e o extrator de pontos de referência do dlib, e em seguida armazenar as coordenadas desses pontos em um banco de dados SQLite. Antes de começar, é necessário instalar o pacote EmguCV e o pacote System.Data.SQLite via NuGet. using Emgu.CV;
using Emgu.CV.CvEnum;
using Emgu.CV.Dnn;
using Emgu.CV.Structure;
using Emgu.CV.Util;
using System.Data.SQLite;
public class FacePoints
{
public int FaceId { get; set; }
public double x1 { get; set; }
public double y1 { get; set; }
public double x2 { get; set; }
public double y2 { get; set; }
public double x3 { get; set; }
public double y3 { get; set; }
public double x4 { get; set; }
public double y4 { get; set; }
public double x5 { get; set; }
public double y5 { get; set; }
public double x6 { get; set; }
public double y6 { get; set; }
public double x7 { get; set; }
public double y7 { get; set; }
}
public static class FaceDetector
{
private static Net faceDetector;
private static ShapePredictor faceLandmarkDetector;
static FaceDetector()
{
// Carrega o detector de face Haar Cascade
faceDetector = DnnInvoke.ReadNetFromCaffe(@"deploy.prototxt", @"res10_300x300_ssd_iter_140000_fp16.caffemodel");
// Carrega o extrator de pontos de referência do dlib
faceLandmarkDetector = ShapePredictor.Deserialize(@"shape_predictor_68_face_landmarks.dat");
}
public static List<FacePoints> DetectAndExtractFacePoints(Mat image)
{
List<FacePoints> facePointsList = new List<FacePoints>();
// Converte a imagem em escala de cinza
Mat grayImage = new Mat();
CvInvoke.CvtColor(image, grayImage, ColorConversion.Bgr2Gray);
// Detecta as faces na imagem
MatOfRect faces = new MatOfRect();
faceDetector.SetInput(DnnInvoke.BlobFromImage(grayImage, 1, new Size(300, 300), new MCvScalar(104, 177, 123), false, false));
faceDetector.Forward();
Mat detection = faceDetector.OutputBlob[0];
Mat detectionMat = new Mat(detection.Size(2), detection.Size(3), DepthType.Cv32F, detection.Ptr(0));
CvInvoke.Resize(detectionMat, detectionMat, grayImage.Size());
CvInvoke.Threshold(detectionMat, detectionMat, 0.5, 1, ThresholdType.Binary);
CvInvoke.Dnn.NMSBoxes(faces, detectionMat, 0.5f, 0.4f, out int[] indices);
for (int i = 0; i < indices.Length; i++)
{
// Extrai os pontos de referência da face
Rectangle faceRect = faces |
Beta Was this translation helpful? Give feedback.
-
A extração de pontos de referência em uma leitura facial geralmente resulta em uma lista de coordenadas que representam os pontos da face. Cada ponto pode ser descrito por suas coordenadas x, y e z em um sistema de coordenadas 3D. Dependendo do algoritmo de extração utilizado, a lista de pontos pode variar em número e tipo.
Um exemplo de lista de pontos de referência extraídos em uma leitura facial pode incluir:
Esses pontos podem ser armazenados em um banco de dados como uma lista de valores em formato de tabela, onde cada linha representa um registro para uma pessoa e cada coluna representa um ponto de referência específico. Por exemplo, uma tabela de pontos de referência pode ter as seguintes colunas:
Dessa forma, o software pode comparar as coordenadas extraídas em uma nova leitura com as coordenadas armazenadas no banco de dados para identificar a pessoa correspondente.
Beta Was this translation helpful? Give feedback.
All reactions