人脸识别系统 CompreFace .NET SDK

Github地址:https://github.com/exadel-inc/compreface-net-sdk

CompreFace NET SDK 使您的应用程序中的人脸识别变得更加容易。

目录

要求

在使用我们的 SDK 之前,请确保您的计算机上已安装 CompreFace 和 .NET。

  1. CompreFace
  2. .NET (Version 6+)

CompreFace 兼容性矩阵

CompreFace .NET SDK 版本 CompreFace 1.1.0
1.0.0
1.0.1
1.0.2

解释:

  • SDK 支持 CompreFace 的所有功能。
  • SDK适用于此CompreFace版本。
    如果CompreFace较新- SDK将不支持CompreFace的新功能。如果CompreFace版本是旧的-新的SDK功能将失败。
  • 存在主要的向后兼容性问题。不建议同时使用这些版本

安装

使用SDK安装NuGet包:

Install-Package CompreFace.NET.Sdk

用法

下面的所有示例都可以在 examples 文件夹内的存储库中找到。
您还可以查看识别示例应用程序。 这是 CompreFace 使用的一个简单示例。

初始化

要开始使用 Compreface .NET SDK,您需要从compreface-sdk依赖项导入CompreFace对象。

然后,您需要创建CompreFaceClient对象并使用DOMAINPORT对其进行初始化。 默认情况下,如果您在本地计算机上运行 CompreFace,则DOMAIN将为http://localhost,在本例中PORT将为8000
您可以在调用方法时传递可选的options对象来设置默认参数,请参阅更多信息

您应该使用CompreFaceClient对象中的RecognitionService服务来识别人脸。

然而,在识别之前,您需要首先将主题添加到人脸集合中。 为此,请在RecognitionService的帮助下获取Subject对象。 Subject包含在RecognitionService类中。

var client = new CompreFaceClient(
    domain: "http://localhost",
    port: "8000");

var recognitionService = client.GetCompreFaceService<RecognitionService>(recognition api key);

var subject = recognitionService.Subject;

var subjectRequest = new AddSubjectRequest()
{
    Subject = "Subject name"
};

var subjectResponse = await subject.AddAsync(subjectRequest);

将人脸添加到人脸集合中

下面是一个例子,展示了如何从你的文件系统中添加一个图像到你的人脸集合:

var faceCollection = recognitionService.FaceCollection;

var request = new AddSubjectExampleRequestByFilePath()
{
    DetProbThreShold = 0.81m,
    Subject = "Subject name",
    FilePath = "Full file path"
};

var response = await faceCollection.AddAsync(request);

识别

这个代码片段展示了如何识别未知的人脸。
从给定的图像中识别人脸

var recognizeRequest = new RecognizeFaceFromImageRequestByFilePath()
{
    FilePath = "Full file path",
    DetProbThreshold = 0.81m,
    FacePlugins = new List<string>()
    {
        "landmarks",
        "gender",
        "age",
        "detector",
        "calculator"
    },
    Limit = 0,
    PredictionCount = 1,
    Status = true
};

var recognizeResponse = await recognitionService.RecognizeFaceFromImage.RecognizeAsync(recognizeRequest);

参考

CompreFace全局对象

CompreFace 全局对象用于初始化与 CompreFace 的连接并设置选项的默认值。
如果适用,每个服务方法都将使用默认值。

构造函数:

CompreFaceClient(domain, port)

参数 类型 是否必须 注释
domain string CompreFace 的域名和协议。 例如: http://localhost
port string CompreFace 的端口。 例如:8000

例子:

var client = new CompreFaceClient(
    domain: "http://localhost",
    port: "8000");

服务

  1. client.GetCompreFaceService<RecognitionService>(apiKey)

初始化人脸识别服务对象。

参数 类型 是否必须 解释
apiKey string UUID 格式的人脸识别 Api 密钥

例子:

var apiKey = "00000000-0000-0000-0000-000000000002";

var recognitionService = client.GetCompreFaceService<RecognitionService>(apiKey);
  1. client.GetCompreFaceService<FaceDetectionService>(apiKey)

初始化人脸检测服务对象。

参数 类型 是否必须 解释
apiKey string UUID 格式的人脸识别 Api 密钥

例子:

var apiKey = "00000000-0000-0000-0000-000000000003";

var faceDetectionService = client.GetCompreFaceService<FaceDetectionService>(api_key);
  1. client.GetCompreFaceService<FaceVerificationService>(apiKey)

初始化人脸验证服务对象。

参数 类型 是否必须 解释
apiKey string UUID 格式的人脸识别 Api 密钥

例子:

var apiKey = "00000000-0000-0000-0000-000000000004";

var faceVerificationService = client.GetCompreFaceService<FaceVerificationService>(api_key);

可选属性

所有可选属性都位于“BaseFaceRequest”类中。

public class BaseFaceRequest
{
    public int? Limit { get; set; }

    public decimal DetProbThreshold { get; set; }

    public IList<string> FacePlugins { get; set; }

    public bool Status { get; set; }
}

BaseFaceRequest 类由多个 DTO 类继承,这些 DTO 类被序列化为请求格式。

这是请求正文中的描述。

选项 类型 解释
det_prob_threshold float 所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limit integer 图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_count integer 每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_plugins string 以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
status boolean 如果 true 包含系统信息,例如execution_time 和plugin_version 字段。 默认值为 false

物体人脸识别示例:

var recognizeRequest = new RecognizeFaceFromImageRequestByFilePath()
{
    FilePath = "Full file path",
    DetProbThreshold = 0.81m,
    FacePlugins = new List<string>()
    {
        "landmarks",
        "gender",
        "age",
        "detector",
        "calculator"
    },
    Limit = 0,
    PredictionCount = 1,
    Status = true
};

var recognizeResponse = await recognitionService.RecognizeFaceFromImage.RecognizeAsync(recognizeRequest);

人脸识别服务

人脸识别服务用于进行人脸识别。
这意味着您首先需要将已知的面孔上传到人脸集合中,然后再识别其中的未知面孔。
当您上传未知面孔时,服务会返回与其最相似的面孔。
此外,人脸识别服务还支持验证端点,以检查人脸集合中的此人是否正确。
有关更多信息,请参阅 CompreFace 页面

人脸识别

方法:

Recognize Faces from a Given Image

识别图像中的所有面孔。
第一个参数是图像位置,它可以是 url、本地路径或字节。

await recognitionService.RecognizeFaceFromImage.RecognizeAsync(recognizeRequest)
参数 类型 是否必需 解释
recognizeRequest RecognizeFaceFromImageRequestByFilePath

RecognizeFaceFromImageRequestByFilePath 这是序列化为 JSON 的数据传输对象。

public class RecognizeFaceFromImageRequestByFilePath : BaseRecognizeFaceFromImageRequest
{
    public string FilePath { get; set; }
}

BaseRecognizeFaceFromImageRequest 类:

public class BaseRecognizeFaceFromImageRequest : BaseFaceRequest
{
    public int? PredictionCount { get; set; }
}

BaseFaceRequest 类包含 可选 属性:

public class BaseFaceRequest
{
    public int? Limit { get; set; }

    public decimal DetProbThreshold { get; set; }

    public IList<string> FacePlugins { get; set; } = new List<string>()

    public bool Status { get; set; }
}
选项 类型 解释
det_prob_threshold float 所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limit integer 图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_count integer 每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_plugins string 以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
status boolean 如果 true 包含系统信息,例如execution_time 和plugin_version 字段。 默认值为 false

ComreFace API 的响应:

{
  "result" : [ {
    "age" : {
      "probability": 0.9308982491493225,
      "high": 32,
      "low": 25
    },
    "gender" : {
      "probability": 0.9898611307144165,
      "value": "female"
    },
    "mask" : {
      "probability": 0.9999470710754395,
      "value": "without_mask"
    },
    "embedding" : [ 9.424854069948196E-4, "...", -0.011415496468544006 ],
    "box" : {
      "probability" : 1.0,
      "x_max" : 1420,
      "y_max" : 1368,
      "x_min" : 548,
      "y_min" : 295
    },
    "landmarks" : [ [ 814, 713 ], [ 1104, 829 ], [ 832, 937 ], [ 704, 1030 ], [ 1017, 1133 ] ],
    "subjects" : [ {
      "similarity" : 0.97858,
      "subject" : "subject1"
    } ],
    "execution_time" : {
      "age" : 28.0,
      "gender" : 26.0,
      "detector" : 117.0,
      "calculator" : 45.0,
      "mask": 36.0
    }
  } ],
  "plugins_versions" : {
    "age" : "agegender.AgeDetector",
    "gender" : "agegender.GenderDetector",
    "detector" : "facenet.FaceDetector",
    "calculator" : "facenet.Calculator",
    "mask": "facemask.MaskDetector"
  }
}
元素 类型 描述
age object 检测到的年龄范围。 仅在启用 age 插件 时返回
gender object 检测到性别。 仅在启用 性别插件 时返回
mask object 检测到面具。 仅在启用面罩插件时返回。
embedding array 人脸嵌入。 仅在启用 计算器插件 时返回
box object 该人脸的边界框参数列表
probability float 找到的人脸实际上是人脸的概率
x_max, y_max, x_min, y_min integer 包含脸部的框架的坐标
landmarks array 包含面部标志的框架的坐标列表。
subjects list <prediction_count> 的相似主题列表(按相似度排序)
similarity float 该图像预测人的相似度
subject string 人脸集合中的主体名称
execution_time object 所有插件的执行时间
plugins_versions object 包含有关插件版本的信息

此 JSON 响应被反序列化为RecognizeFaceFromImageResponse数据传输对象 (DTO)。

public class RecognizeFaceFromImageResponse
{
    public IList<Result> Result { get; set; }

    public PluginVersions PluginsVersions { get; set; }
}

public class Result : BaseResult
{
    public IList<SimilarSubject> Subjects { get; set; }
} 

BaseResult 类:

public class BaseResult
{
    public Age Age { get; set; }

    public Gender Gender { get; set; }

    public Mask Mask { get; set; }

    public Box Box { get; set; }

    public IList<List<int>> Landmarks { get; set; }

    public ExecutionTime ExecutionTime { get; set; }

    public IList<decimal> Embedding { get; set; }
}

验证给定图像中的人脸

await recognitionService.RecognizeFaceFromImage.VerifyAsync(request);

比较给定图像与面部集合中的图像的相似度。

参数 类型 是否必须
request VerifyFacesFromImageRequest 是否必须

VerifyFacesFromImageRequest 这是序列化为 JSON 的数据传输对象。

public class VerifyFacesFromImageRequest : BaseVerifyFacesFromImageRequest
{
    public string FilePath { get; set; }
}

BaseVerifyFacesFromImageRequest 类:

public class BaseVerifyFacesFromImageRequest : BaseFaceRequest
{
    public Guid ImageId { get; set; }
}

BaseFaceRequest 类包含 可选 属性:

public class BaseFaceRequest
{
    public int? Limit { get; set; }

    public decimal DetProbThreshold { get; set; }

    public IList<string> FacePlugins { get; set; }

    public bool Status { get; set; }
}
选项 类型 解释
det_prob_threshold float 所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limit integer 图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_count integer 每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_plugins string 以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
status boolean 如果 true 包含系统信息,例如execution_time 和plugin_version 字段。 默认值为 false

回复:

{
    
    
  "result" : [ {
    
    
    "age" : {
    
    
      "probability": 0.9308982491493225,
      "high": 32,
      "low": 25
    },
    "gender" : {
    
    
      "probability": 0.9898611307144165,
      "value": "female"
    },
    "mask" : {
    
    
      "probability": 0.9999470710754395,
      "value": "without_mask"
    },
    "embedding" : [ 9.424854069948196E-4, "...", -0.011415496468544006 ],
    "box" : {
    
    
      "probability" : 1.0,
      "x_max" : 1420,
      "y_max" : 1368,
      "x_min" : 548,
      "y_min" : 295
    },
    "landmarks" : [ [ 814, 713 ], [ 1104, 829 ], [ 832, 937 ], [ 704, 1030 ], [ 1017, 1133 ] ],
    "subjects" : [ {
    
    
      "similarity" : 0.97858,
      "subject" : "subject1"
    } ],
    "execution_time" : {
    
    
      "age" : 28.0,
      "gender" : 26.0,
      "detector" : 117.0,
      "calculator" : 45.0,
      "mask": 36.0
    }
  } ],
  "plugins_versions" : {
    
    
    "age" : "agegender.AgeDetector",
    "gender" : "agegender.GenderDetector",
    "detector" : "facenet.FaceDetector",
    "calculator" : "facenet.Calculator",
    "mask": "facemask.MaskDetector"
  }
}
元素 类型 描述
age object 检测到的年龄范围。 仅在启用 age 插件 时返回
gender object 检测到性别。 仅在启用 性别插件 时返回
mask object 检测到面具。 仅在启用面罩插件时返回。
embedding array 人脸嵌入。 仅在启用 计算器插件 时返回
box object 该人脸的边界框参数列表
probability float 找到的人脸实际上是人脸的概率
x_max, y_max, x_min, y_min integer 包含脸部的框架的坐标
landmarks array 包含面部标志的框架的坐标列表。
subjects list <prediction_count> 的相似主题列表(按相似度排序)
similarity float 该图像预测人的相似度
subject string 人脸集合中的主体名称
execution_time object 所有插件的执行时间
plugins_versions object 包含有关插件版本的信息

此 JSON 响应被反序列化为VerifyFacesFromImageResponse数据传输对象 (DTO)。

public class VerifyFacesFromImageResponse
{
    public IList<Result> Result { get; set; }

    public PluginVersions PluginsVersions { get; set; }
}

public class Result : BaseResult
{
    public string Subject { get; set; }
    
    public decimal Similarity { get; set; }
}

BaseResult 类:

public class BaseResult
{
    public Age Age { get; set; }

    public Gender Gender { get; set; }

    public Mask Mask { get; set; }

    public Box Box { get; set; }

    public IList<List<int>> Landmarks { get; set; }

    public ExecutionTime ExecutionTime { get; set; }

    public IList<decimal> Embedding { get; set; }
}

ExecutionTime 类:

public class ExecutionTime
{
    public decimal Age { get; set; }

    public decimal Gender { get; set; }

    public decimal Detector { get; set; }

    public decimal Calculator { get; set; }

    public decimal Mask { get; set; }
}

获取人脸集合

recognitionService.FaceCollection

返回人脸集合对象

面部收集可用于管理已知面部,例如 添加、列出或删除它们。

人脸识别是针对人脸集合中保存的已知人脸进行的,因此在使用“识别”方法之前需要将至少一张人脸保存到人脸集合中。

有关面部收集和管理示例的更多信息此处

方法:

Add an Example of a Subject

:这里的Subject被翻译成“主题”,但其实就是指:某个人。一个人,可以有一张或多张照片。

这将通过保存图像创建主题的示例。 您可以添加任意数量的图像来训练系统。 图像应该仅包含一张脸。

await recognitionService.FaceCollection.AddAsync(request);
参数 类型 是否 解释
request AddSubjectExampleRequestByFilePath

AddSubjectExampleRequestByFilePath 这是序列化为 JSON 的数据传输对象。

public class AddSubjectExampleRequestByFilePath : BaseExampleRequest
{
    public string FilePath { get; set; }
}

BaseExampleRequest 类:

namespace Exadel.Compreface.DTOs.HelperDTOs.BaseDTOs
{
    public class BaseExampleRequest
    {
        public string Subject { get; set; }

        public decimal? DetProbThreShold { get; set; }
    }
}
选项 类型 解释
det_prob_threshold float 所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间

DetProbThreShold 是可选属性。

Response:

{
  "image_id": "6b135f5b-a365-4522-b1f1-4c9ac2dd0728",
  "subject": "SubjectName"
}
元素 类型 描述
image_id UUID UUID of uploaded image
subject string Subject of the saved image

此 JSON 响应被反序列化为AddSubjectExampleResponse数据传输对象 (DTO)。

public class AddSubjectExampleResponse
{
    public Guid ImageId { get; set; }

    public string Subject { get; set; }
}

主题的所有已保存示例的列表

要检索保存在面部集合中的主题列表:

await recognitionService.FaceCollection.ListAsync(request);
参数 类型 是否必须 解释
request ListAllSubjectExamplesRequest

ListAllSubjectExamplesRequest 这是序列化为 JSON 的数据传输对象。


public class ListAllSubjectExamplesRequest
{
    public int? Page { get; set; }
    
    public int? Size { get; set; }
    
    public string Subject { get; set; }
}
参数 类型 是否必须 解释
Page int 可选 要返回的示例的页码。 可用于分页。 默认值为0。从0.6版本开始。
Size int 可选 页面上的面孔(页面大小)。 可用于分页。 默认值为 20。从 0.6 版本开始。
Subject int 可选 端点应返回什么主题示例。 如果为空,则返回所有主题的示例。 从1.0版本开始

Response:

{
  "faces": [
    {
      "image_id": <image_id>,
      "subject": <subject>
    },
    ...
  ]
}
元素 类型 描述
image_id UUID 人脸UUID
subject string 为此 api 密钥保存其照片的人员的

此 JSON 响应被反序列化为ListAllSubjectExamplesResponse数据传输对象 (DTO)。

public class ListAllSubjectExamplesResponse
{
    public IList<Face> Faces { get; set; }

    public int PageNumber { get; set; }

    public int PageSize { get; set; }
    
    public int TotalPages { get; set; }
    
    public int TotalElements { get; set; }
}

Face 类:

public class Face
{
    public Guid ImageId { get; set; }
    
    public string Subject{ get; set; }
}

按名称删除主题的所有示例

要删除<主题>的所有图像示例:

recognitionService.FaceCollection.DeleteAllAsync(request);
参数 类型 是否必须 解释
request DeleteAllExamplesRequest 是否必须

DeleteAllExamplesRequest 这是序列化为 JSON 的数据传输对象。

public class DeleteMultipleExampleRequest
{
	public IList<Guid> ImageIdList { get; set; }
}

Response:

{
    "deleted": <count>
}
元素 类型 描述
deleted integer 删除的人脸数量

此 JSON 响应被反序列化为DeleteMultipleExamplesResponse数据传输对象 (DTO)。

public class DeleteMultipleExamplesResponse
{
	public IList<Face> Faces { get; set; }
}

按 ID 删除主题的示例

按 ID 删除图像:

await recognitionService.FaceCollection.DeleteAsync(request);
参数 类型 是否必须 解释
request DeleteImageByIdRequest

DeleteImageByIdRequest 这是序列化为 JSON 的数据传输对象。

public class DeleteImageByIdRequest
{
	public Guid ImageId { get; set; }
}

Response:

{
  "image_id": <image_id>,
  "subject": <subject>
}
元素 类型 描述
image_id UUID 被删除的人脸的UUID
subject string 为此 api 密钥保存其照片的人员的

此 JSON 响应被反序列化为DeleteImageByIdResponse数据传输对象 (DTO)。

public class DeleteImageByIdResponse
{
	public Guid ImageId { get; set; }

	public string Subject { get; set; }
}

通过 ID 直接下载主题的图像示例

按 ID 下载图像:

await recognitionService.FaceCollection.DownloadAsync(downloadImageByIdRequest);
参数 类型 是否必须 解释
request DownloadImageByIdDirectlyRequest

DownloadImageByIdDirectlyRequest 这是序列化为 JSON 的数据传输对象。

public class DownloadImageByIdDirectlyRequest
{
	public Guid ImageId { get; set; }

    public Guid RecognitionApiKey { get; set; }
}

响应正文是二值图像。 如果找不到图像则为空字节。

按 ID 下载主题的图像示例

0.6版本以来

要按 ID 下载主题的图像示例:

await recognitionService.FaceCollection.DownloadAsync(downloadImageBySubjectIdRequest);
参数 类型 是否必须 解释
request DownloadImageByIdFromSubjectRequest

DownloadImageByIdFromSubjectRequest 这是序列化为 JSON 的数据传输对象。

public class DownloadImageByIdFromSubjectRequest
{
	public Guid ImageId { get; set; }
}

Response body是二值图像。 如果找不到图像则为空字节。

获取主题

recognitionService.Subject

返回主题对象
主题对象允许直接使用主题(而不是通过主题示例)。
有关主题的更多信息此处

方法:

Add a Subject

在人脸收藏中创建一个新主题。

await recognitionService.Subject.AddAsync(request);
参数 类型 是否必须 解释
request AddSubjectRequest

AddSubjectRequest 这是序列化为 JSON 的数据传输对象。

public class AddSubjectRequest
{
    public string Subject { get; set; }
}

Response:

{
    
    
  "subject": "subject1"
}
参数 类型 描述
subject string 是主题的名称

该 JSON 响应被反序列化为AddSubjectResponse数据传输对象(DTO)。

public class AddSubjectResponse
{
    public string Subject { get; set; }
}

获取主题列表

返回与人脸集合相关的所有主题。

await recognitionService.Subject.ListAsync();

Response:

{
    
    
  "subjects": [
    "<subject_name1>",
    "<subject_name2>"
  ]
}
元素 类型 描述
subjects array 人脸收藏中的主题列表

此 JSON 响应被反序列化为“GetAllSubjectResponse”数据传输对象 (DTO)。

public class GetAllSubjectResponse
{
    public IList<string> Subjects { get; set; }
}

重命名主题

重命名现有主题。 如果新的主题名称已存在,则主题将被合并 - 旧主题名称中的所有面孔将重新分配给具有新名称的主题,旧主题将被删除。

await recognitionService.Subject.RenameAsync(request);
参数 类型 是否必须 解释
request RenameSubjectRequest

RenameSubjectRequest 这是序列化为 JSON 的数据传输对象。

public class RenameSubjectRequest
{
    public string CurrentSubject { get; set; }

    public string Subject { get; set; }
}

Response:

{
    
    
  "updated": "true|false"
}
元素 类型 描述
updated boolean failed or success

此 JSON 响应被反序列化为RenameSubjectResponse数据传输对象 (DTO)。

public class RenameSubjectResponse
{
    public bool Updated { get; set; }
}

删除主题

删除现有主题和所有已保存的面孔。

await recognitionService.Subject.DeleteAsync(request);
参数 类型 是否必须 解释
request DeleteSubjectRequest

DeleteSubjectRequest 这是序列化为 JSON 的数据传输对象。

public class RenameSubjectRequest
{
    public string CurrentSubject { get; set; }

    public string Subject { get; set; }
}

Response:

{
    
    
  "subject": "subject1"
}
元素 类型 描述
subject string is the name of the subject

此 JSON 响应被反序列化为DeleteSubjectResponse数据传输对象 (DTO)。

public class DeleteSubjectResponse
{
    public string Subject { get; set; }
}

删除所有主题

删除所有现有主题和所有已保存的面孔。

await recognitionService.Subject.DeleteAllAsync();

Response:

{
    
    
  "deleted": "<count>"
}
元素 类型 描述
deleted integer number of deleted subjects

此 JSON 响应被反序列化为DeleteAllSubjectsResponse数据传输对象 (DTO)。

public class DeleteAllSubjectsResponse
{
    public int Deleted { get; set; }
}

人脸检测服务

人脸检测服务用于检测图像中的人脸。

方法:

Detect

await faceDetectionService.DetectAsync(request);

查找图像上的所有面孔。

参数 类型 是否必须 解释
request FaceDetectionRequestByFilePath

FaceDetectionRequestByFilePath 这是序列化为 JSON 的数据传输对象。

public class FaceDetectionRequestByFilePath : BaseFaceRequest
{
	public string FilePath { get; set; }
}

BaseFaceRequest 类包含 可选 属性:

public class BaseFaceRequest
{
    public int? Limit { get; set; }

    public decimal DetProbThreshold { get; set; }

    public IList<string> FacePlugins { get; set; }

    public bool Status { get; set; }
}
选项 类型 解释
det_prob_threshold float 所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limit integer 图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_count integer 每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_plugins string 以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
status boolean 如果 true 包含系统信息,例如execution_time 和plugin_version 字段。 默认值为 false

Response:

{
    
    
  "result" : [ {
    
    
    "age" : {
    
    
      "probability": 0.9308982491493225,
      "high": 32,
      "low": 25
    },
    "gender" : {
    
    
      "probability": 0.9898611307144165,
      "value": "female"
    },
    "mask" : {
    
    
      "probability": 0.9999470710754395,
      "value": "without_mask"
    },
    "embedding" : [ -0.03027934394776821, "...", -0.05117142200469971 ],
    "box" : {
    
    
      "probability" : 0.9987509250640869,
      "x_max" : 376,
      "y_max" : 479,
      "x_min" : 68,
      "y_min" : 77
    },
    "landmarks" : [ [ 156, 245 ], [ 277, 253 ], [ 202, 311 ], [ 148, 358 ], [ 274, 365 ] ],
    "execution_time" : {
    
    
      "age" : 30.0,
      "gender" : 26.0,
      "detector" : 130.0,
      "calculator" : 49.0,
      "mask": 36.0
    }
  } ],
  "plugins_versions" : {
    
    
    "age" : "agegender.AgeDetector",
    "gender" : "agegender.GenderDetector",
    "detector" : "facenet.FaceDetector",
    "calculator" : "facenet.Calculator",
    "mask": "facemask.MaskDetector"
  }
}
元素 类型 描述
age object 检测到的年龄范围。 仅在启用 age 插件 时返回
gender object 检测到性别。 仅在启用 性别插件 时返回
mask object 检测到面具。 仅在启用面罩插件时返回。
embedding array 人脸嵌入。 仅在启用 计算器插件 时返回
box object 该人脸的边界框参数列表(在processedImage上)
probability float 找到的人脸实际上是人脸的概率(在processedImage上)
x_max, y_max, x_min, y_min integer 包含脸部的帧的坐标(在processedImage上)
landmarks array 包含面部标志的框架的坐标列表。 仅在启用 landmarks 插件 时返回
execution_time object 所有插件的执行时间
plugins_versions object 包含有关插件版本的信息

此 JSON 响应被反序列化为FaceDetectionResponse数据传输对象 (DTO)。

public class FaceDetectionResponse
{
	public IList<BaseResult> Result { get; set; }

	public PluginVersions PluginsVersions { get; set; }
}

BaseResult 类:

public class BaseResult
{
    public Age Age { get; set; }

    public Gender Gender { get; set; }

    public Mask Mask { get; set; }

    public Box Box { get; set; }

    public IList<List<int>> Landmarks { get; set; }

    public ExecutionTime ExecutionTime { get; set; }

    public IList<decimal> Embedding { get; set; }
}

人脸验证服务

人脸验证服务用于比较两个图像。
源图像应仅包含一张面孔,该面孔将与目标图像上的所有面孔进行比较。

方法:

Verify

await faceVerificationService.VerifyAsync(request);

比较参数中提供的两个图像。 源图像应仅包含一张人脸,它将与目标图像中的所有人脸进行比较。

参数 类型 是否必须 解释
request FaceVerificationRequestByFilePath 是否必须

FaceVerificationRequestByFilePath 这是序列化为 JSON 的数据传输对象。

public class FaceVerificationRequestByFilePath : BaseFaceRequest
{
    public string SourceImageFilePath { get; set; }

    public string TargetImageFilePath { get; set; }
}

BaseFaceRequest 类包含 可选 属性:

public class BaseFaceRequest
{
    public int? Limit { get; set; }

    public decimal DetProbThreshold { get; set; }

    public IList<string> FacePlugins { get; set; }

    public bool Status { get; set; }
}
选项 类型 解释
det_prob_threshold float 所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limit integer 图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_count integer 每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_plugins string 以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
status boolean 如果 true 包含系统信息,例如execution_time 和plugin_version 字段。 默认值为 false

Response:

{
    
    
  "result" : [{
    
    
    "source_image_face" : {
    
    
      "age" : {
    
    
        "probability": 0.9308982491493225,
        "high": 32,
        "low": 25
      },
      "gender" : {
    
    
        "probability": 0.9898611307144165,
        "value": "female"
      },
      "mask" : {
    
    
        "probability": 0.9999470710754395,
        "value": "without_mask"
      },
      "embedding" : [ -0.0010271212086081505, "...", -0.008746841922402382 ],
      "box" : {
    
    
        "probability" : 0.9997453093528748,
        "x_max" : 205,
        "y_max" : 167,
        "x_min" : 48,
        "y_min" : 0
      },
      "landmarks" : [ [ 92, 44 ], [ 130, 68 ], [ 71, 76 ], [ 60, 104 ], [ 95, 125 ] ],
      "execution_time" : {
    
    
        "age" : 85.0,
        "gender" : 51.0,
        "detector" : 67.0,
        "calculator" : 116.0,
        "mask": 36.0
      }
    },
    "face_matches": [
      {
    
    
        "age" : {
    
    
          "probability": 0.9308982491493225,
          "high": 32,
          "low": 25
        },
        "gender" : {
    
    
          "probability": 0.9898611307144165,
          "value": "female"
        },
        "mask" : {
    
    
          "probability": 0.9999470710754395,
          "value": "without_mask"
        },
        "embedding" : [ -0.049007344990968704, "...", -0.01753818802535534 ],
        "box" : {
    
    
          "probability" : 0.99975,
          "x_max" : 308,
          "y_max" : 180,
          "x_min" : 235,
          "y_min" : 98
        },
        "landmarks" : [ [ 260, 129 ], [ 273, 127 ], [ 258, 136 ], [ 257, 150 ], [ 269, 148 ] ],
        "similarity" : 0.97858,
        "execution_time" : {
    
    
          "age" : 59.0,
          "gender" : 30.0,
          "detector" : 177.0,
          "calculator" : 70.0,
          "mask": 36.0
        }
      }],
    "plugins_versions" : {
    
    
      "age" : "agegender.AgeDetector",
      "gender" : "agegender.GenderDetector",
      "detector" : "facenet.FaceDetector",
      "calculator" : "facenet.Calculator",
      "mask": "facemask.MaskDetector"
    }
  }]
}
元素 类型 描述
source_image_face object 有关源图像脸部的附加信息
face_matches array 人脸验证结果
age object 检测到的年龄范围。 仅在启用 age 插件 时返回
gender object 检测到性别。 仅在启用 性别插件 时返回
mask object 检测到面具。 仅在启用面罩插件时返回。
embedding array 人脸嵌入。 仅在启用 计算器插件 时返回
box object 该面的边界框参数列表
probability float 找到的人脸实际上是人脸的概率
x_max, y_max, x_min, y_min integer 包含脸部的框架的坐标
landmarks array 包含面部标志的框架的坐标列表。 仅在启用 landmarks 插件 时返回
similarity float 该脸部与源图像上的脸部之间的相似度
execution_time object 所有插件的执行时间
plugins_versions object 包含有关插件版本的信息

此 JSON 响应被反序列化为FaceVerificationResponse数据传输对象 (DTO)。

public class FaceVerificationResponse 
{
    public IList<Result> Result { get; set; }
}

public class Result
{
    public SourceImageFace SourceImageFace { get; set; }
    
    public IList<FaceMatches> FaceMatches { get; set; }
    
    public PluginVersions PluginsVersions { get; set; }
}

public class SourceImageFace : BaseResult
{ }

public class FaceMatches : BaseResult
{
    public decimal Similarity { get; set; }
}

BaseResult 类:

public class BaseResult
{
    public Age Age { get; set; }

    public Gender Gender { get; set; }

    public Mask Mask { get; set; }

    public Box Box { get; set; }

    public IList<List<int>> Landmarks { get; set; }

    public ExecutionTime ExecutionTime { get; set; }

    public IList<decimal> Embedding { get; set; }
}
| float   | 找到的人脸实际上是人脸的概率                                 |

| x_max, y_max, x_min, y_min | integer | 包含脸部的框架的坐标 |
| landmarks | array | 包含面部标志的框架的坐标列表。 仅在启用 landmarks 插件 时返回 |
| similarity | float | 该脸部与源图像上的脸部之间的相似度 |
| execution_time | object | 所有插件的执行时间 |
| plugins_versions | object | 包含有关插件版本的信息 |

此 JSON 响应被反序列化为FaceVerificationResponse数据传输对象 (DTO)。

public class FaceVerificationResponse 
{
    public IList<Result> Result { get; set; }
}

public class Result
{
    public SourceImageFace SourceImageFace { get; set; }
    
    public IList<FaceMatches> FaceMatches { get; set; }
    
    public PluginVersions PluginsVersions { get; set; }
}

public class SourceImageFace : BaseResult
{ }

public class FaceMatches : BaseResult
{
    public decimal Similarity { get; set; }
}

BaseResult 类:

public class BaseResult
{
    public Age Age { get; set; }

    public Gender Gender { get; set; }

    public Mask Mask { get; set; }

    public Box Box { get; set; }

    public IList<List<int>> Landmarks { get; set; }

    public ExecutionTime ExecutionTime { get; set; }

    public IList<decimal> Embedding { get; set; }
}

猜你喜欢

转载自blog.csdn.net/guigenyi/article/details/132108137