当前位置:   article > 正文

人脸识别系统 CompreFace .NET SDK_compreface人脸识别

compreface人脸识别

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
  • 1

用法

下面的所有示例都可以在 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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

将人脸添加到人脸集合中

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

var faceCollection = recognitionService.FaceCollection;

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

var response = await faceCollection.AddAsync(request);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

识别

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

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

参考

CompreFace全局对象

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

构造函数:

CompreFaceClient(domain, port)

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

例子:

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

服务

  1. client.GetCompreFaceService<RecognitionService>(apiKey)

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

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

例子:

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

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

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

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

例子:

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

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

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

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

例子:

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

var faceVerificationService = client.GetCompreFaceService<FaceVerificationService>(api_key);
  • 1
  • 2
  • 3

可选属性

所有可选属性都位于“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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

这是请求正文中的描述。

选项类型解释
det_prob_thresholdfloat所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limitinteger图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_countinteger每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_pluginsstring以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
statusboolean如果 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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

人脸识别服务

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

人脸识别

方法:

Recognize Faces from a Given Image

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

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

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

public class RecognizeFaceFromImageRequestByFilePath : BaseRecognizeFaceFromImageRequest
{
    public string FilePath { get; set; }
}
  • 1
  • 2
  • 3
  • 4

BaseRecognizeFaceFromImageRequest 类:

public class BaseRecognizeFaceFromImageRequest : BaseFaceRequest
{
    public int? PredictionCount { get; set; }
}
  • 1
  • 2
  • 3
  • 4

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
选项类型解释
det_prob_thresholdfloat所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limitinteger图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_countinteger每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_pluginsstring以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
statusboolean如果 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"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
元素类型描述
ageobject检测到的年龄范围。 仅在启用 age 插件 时返回
genderobject检测到性别。 仅在启用 性别插件 时返回
maskobject检测到面具。 仅在启用面罩插件时返回。
embeddingarray人脸嵌入。 仅在启用 计算器插件 时返回
boxobject该人脸的边界框参数列表
probabilityfloat找到的人脸实际上是人脸的概率
x_max, y_max, x_min, y_mininteger包含脸部的框架的坐标
landmarksarray包含面部标志的框架的坐标列表。
subjectslist<prediction_count> 的相似主题列表(按相似度排序)
similarityfloat该图像预测人的相似度
subjectstring人脸集合中的主体名称
execution_timeobject所有插件的执行时间
plugins_versionsobject包含有关插件版本的信息

此 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; }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
验证给定图像中的人脸
await recognitionService.RecognizeFaceFromImage.VerifyAsync(request);
  • 1

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

参数类型是否必须
requestVerifyFacesFromImageRequest是否必须

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

public class VerifyFacesFromImageRequest : BaseVerifyFacesFromImageRequest
{
    public string FilePath { get; set; }
}
  • 1
  • 2
  • 3
  • 4

BaseVerifyFacesFromImageRequest 类:

public class BaseVerifyFacesFromImageRequest : BaseFaceRequest
{
    public Guid ImageId { get; set; }
}
  • 1
  • 2
  • 3
  • 4

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
选项类型解释
det_prob_thresholdfloat所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limitinteger图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_countinteger每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_pluginsstring以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
statusboolean如果 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"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
元素类型描述
ageobject检测到的年龄范围。 仅在启用 age 插件 时返回
genderobject检测到性别。 仅在启用 性别插件 时返回
maskobject检测到面具。 仅在启用面罩插件时返回。
embeddingarray人脸嵌入。 仅在启用 计算器插件 时返回
boxobject该人脸的边界框参数列表
probabilityfloat找到的人脸实际上是人脸的概率
x_max, y_max, x_min, y_mininteger包含脸部的框架的坐标
landmarksarray包含面部标志的框架的坐标列表。
subjectslist<prediction_count> 的相似主题列表(按相似度排序)
similarityfloat该图像预测人的相似度
subjectstring人脸集合中的主体名称
execution_timeobject所有插件的执行时间
plugins_versionsobject包含有关插件版本的信息

此 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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

获取人脸集合

recognitionService.FaceCollection
  • 1

返回人脸集合对象

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

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

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

方法:

Add an Example of a Subject

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

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

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

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

public class AddSubjectExampleRequestByFilePath : BaseExampleRequest
{
    public string FilePath { get; set; }
}
  • 1
  • 2
  • 3
  • 4

BaseExampleRequest 类:

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

        public decimal? DetProbThreShold { get; set; }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
选项类型解释
det_prob_thresholdfloat所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间

DetProbThreShold 是可选属性。

Response:

{
  "image_id": "6b135f5b-a365-4522-b1f1-4c9ac2dd0728",
  "subject": "SubjectName"
}
  • 1
  • 2
  • 3
  • 4
元素类型描述
image_idUUIDUUID of uploaded image
subjectstringSubject of the saved image

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

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

    public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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

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

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


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

Response:

{
  "faces": [
    {
      "image_id": <image_id>,
      "subject": <subject>
    },
    ...
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
元素类型描述
image_idUUID人脸UUID
subjectstring为此 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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Face 类:

public class Face
{
    public Guid ImageId { get; set; }
    
    public string Subject{ get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
按名称删除主题的所有示例

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

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

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

public class DeleteMultipleExampleRequest
{
	public IList<Guid> ImageIdList { get; set; }
}
  • 1
  • 2
  • 3
  • 4

Response:

{
    "deleted": <count>
}
  • 1
  • 2
  • 3
元素类型描述
deletedinteger删除的人脸数量

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

public class DeleteMultipleExamplesResponse
{
	public IList<Face> Faces { get; set; }
}
  • 1
  • 2
  • 3
  • 4

按 ID 删除主题的示例

按 ID 删除图像:

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

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

public class DeleteImageByIdRequest
{
	public Guid ImageId { get; set; }
}
  • 1
  • 2
  • 3
  • 4

Response:

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

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

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

	public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
通过 ID 直接下载主题的图像示例

按 ID 下载图像:

await recognitionService.FaceCollection.DownloadAsync(downloadImageByIdRequest);
  • 1
参数类型是否必须解释
requestDownloadImageByIdDirectlyRequest

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

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

    public Guid RecognitionApiKey { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

按 ID 下载主题的图像示例

0.6版本以来

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

await recognitionService.FaceCollection.DownloadAsync(downloadImageBySubjectIdRequest);
  • 1
参数类型是否必须解释
requestDownloadImageByIdFromSubjectRequest

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

public class DownloadImageByIdFromSubjectRequest
{
	public Guid ImageId { get; set; }
}
  • 1
  • 2
  • 3
  • 4

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

获取主题

recognitionService.Subject
  • 1

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

方法:

Add a Subject

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

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

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

public class AddSubjectRequest
{
    public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4

Response:

{
  "subject": "subject1"
}
  • 1
  • 2
  • 3
参数类型描述
subjectstring是主题的名称

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

public class AddSubjectResponse
{
    public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4
获取主题列表

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

await recognitionService.Subject.ListAsync();
  • 1

Response:

{
  "subjects": [
    "<subject_name1>",
    "<subject_name2>"
  ]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
元素类型描述
subjectsarray人脸收藏中的主题列表

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

public class GetAllSubjectResponse
{
    public IList<string> Subjects { get; set; }
}
  • 1
  • 2
  • 3
  • 4
重命名主题

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

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

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

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

    public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Response:

{
  "updated": "true|false"
}
  • 1
  • 2
  • 3
元素类型描述
updatedbooleanfailed or success

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

public class RenameSubjectResponse
{
    public bool Updated { get; set; }
}
  • 1
  • 2
  • 3
  • 4
删除主题

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

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

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

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

    public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Response:

{
  "subject": "subject1"
}
  • 1
  • 2
  • 3
元素类型描述
subjectstringis the name of the subject

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

public class DeleteSubjectResponse
{
    public string Subject { get; set; }
}
  • 1
  • 2
  • 3
  • 4
删除所有主题

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

await recognitionService.Subject.DeleteAllAsync();
  • 1

Response:

{
  "deleted": "<count>"
}
  • 1
  • 2
  • 3
元素类型描述
deletedintegernumber of deleted subjects

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

public class DeleteAllSubjectsResponse
{
    public int Deleted { get; set; }
}
  • 1
  • 2
  • 3
  • 4

人脸检测服务

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

方法:

Detect

await faceDetectionService.DetectAsync(request);
  • 1

查找图像上的所有面孔。

参数类型是否必须解释
requestFaceDetectionRequestByFilePath

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

public class FaceDetectionRequestByFilePath : BaseFaceRequest
{
	public string FilePath { get; set; }
}
  • 1
  • 2
  • 3
  • 4

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
选项类型解释
det_prob_thresholdfloat所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limitinteger图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_countinteger每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_pluginsstring以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
statusboolean如果 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"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
元素类型描述
ageobject检测到的年龄范围。 仅在启用 age 插件 时返回
genderobject检测到性别。 仅在启用 性别插件 时返回
maskobject检测到面具。 仅在启用面罩插件时返回。
embeddingarray人脸嵌入。 仅在启用 计算器插件 时返回
boxobject该人脸的边界框参数列表(在processedImage上)
probabilityfloat找到的人脸实际上是人脸的概率(在processedImage上)
x_max, y_max, x_min, y_mininteger包含脸部的帧的坐标(在processedImage上)
landmarksarray包含面部标志的框架的坐标列表。 仅在启用 landmarks 插件 时返回
execution_timeobject所有插件的执行时间
plugins_versionsobject包含有关插件版本的信息

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

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

	public PluginVersions PluginsVersions { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

人脸验证服务

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

方法:

Verify

await faceVerificationService.VerifyAsync(request);
  • 1

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

参数类型是否必须解释
requestFaceVerificationRequestByFilePath是否必须

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

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

    public string TargetImageFilePath { get; set; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
选项类型解释
det_prob_thresholdfloat所识别的面孔实际上是面孔所需的最低置信度。 值介于 0.0 和 1.0 之间
limitinteger图像上要识别的最大人脸数量。 它首先识别最大的面孔。 值为 0 表示没有限制。 默认值:0
prediction_countinteger每张脸的主题预测的最大数量。 它返回最相似的主题。 默认值:1
face_pluginsstring以逗号分隔的面部插件。 如果为空,则不返回任何附加信息。Learn more
statusboolean如果 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"
    }
  }]
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
元素类型描述
source_image_faceobject有关源图像脸部的附加信息
face_matchesarray人脸验证结果
ageobject检测到的年龄范围。 仅在启用 age 插件 时返回
genderobject检测到性别。 仅在启用 性别插件 时返回
maskobject检测到面具。 仅在启用面罩插件时返回。
embeddingarray人脸嵌入。 仅在启用 计算器插件 时返回
boxobject该面的边界框参数列表
probabilityfloat找到的人脸实际上是人脸的概率
x_max, y_max, x_min, y_mininteger包含脸部的框架的坐标
landmarksarray包含面部标志的框架的坐标列表。 仅在启用 landmarks 插件 时返回
similarityfloat该脸部与源图像上的脸部之间的相似度
execution_timeobject所有插件的执行时间
plugins_versionsobject包含有关插件版本的信息

此 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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
| float   | 找到的人脸实际上是人脸的概率                                 |
  • 1

| 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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

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; }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/736783
推荐阅读
相关标签
  

闽ICP备14008679号