赞
踩
使用 C# 与 Exadel CompreFace 进行人脸识别功能的集成主要涉及以下几个步骤:安装与配置 CompreFace,通过 C# 发起 HTTP 请求与 CompreFace API 进行交互,以及处理响应结果。以下是一个详细的 C# 示例,展示如何使用 HttpClient 类与 Newtonsoft.Json 库来实现这些功能。
确保已安装以下 NuGet 包:
System.Net.Http
:提供 HttpClient 类,用于发送 HTTP 请求。Newtonsoft.Json
:用于 JSON 数据的序列化与反序列化。Csharp
- using System.Net.Http;
- using Newtonsoft.Json;
-
- // ...
-
- private readonly HttpClient _httpClient = new HttpClient
- {
- BaseAddress = new Uri("http://localhost:8000/api/v1/")
- };
在请求头中添加 Authorization
字段,附上访问令牌:
Csharp
- private const string AccessToken = "YOUR_ACCESS_TOKEN"; // 替换为实际的访问令牌
-
- private readonly HttpRequestHeaders _defaultHeaders = new HttpRequestHeaders
- {
- Authorization = new AuthenticationHeaderValue("Bearer", AccessToken)
- };
Csharp
- public async Task<string> CreateFaceCollectionAsync(string collectionName)
- {
- var url = "faces/collections";
- var content = new StringContent(JsonConvert.SerializeObject(new { name = collectionName }), Encoding.UTF8, "application/json");
-
- using var request = new HttpRequestMessage(HttpMethod.Post, url)
- {
- Content = content,
- Headers = _defaultHeaders
- };
-
- var response = await _httpClient.SendAsync(request);
- response.EnsureSuccessStatusCode();
-
- var responseContent = await response.Content.ReadAsStringAsync();
- var result = JsonConvert.DeserializeObject<FaceCollectionCreationResponse>(responseContent);
-
- return result.Id;
- }

其中,FaceCollectionCreationResponse
类应定义如下:
Csharp
- public class FaceCollectionCreationResponse
- {
- public string Id { get; set; }
- }
Csharp
- public async Task AddFaceToCollectionAsync(string collectionId, string externalId, string imagePath)
- {
- var url = $"faces/collections/{collectionId}/faces";
- var imageData = await GetImageDataAsBase64Async(imagePath);
-
- var content = new StringContent(JsonConvert.SerializeObject(new
- {
- external_id = externalId,
- image = imageData
- }), Encoding.UTF8, "application/json");
-
- using var request = new HttpRequestMessage(HttpMethod.Post, url)
- {
- Content = content,
- Headers = _defaultHeaders
- };
-
- var response = await _httpClient.SendAsync(request);
- response.EnsureSuccessStatusCode();
- }
-
- private async Task<string> GetImageDataAsBase64Async(string imagePath)
- {
- byte[] imageDataBytes;
- using (var fileStream = File.OpenRead(imagePath))
- {
- imageDataBytes = new byte[fileStream.Length];
- await fileStream.ReadAsync(imageDataBytes, 0, (int)fileStream.Length);
- }
-
- return Convert.ToBase64String(imageDataBytes);
- }

Csharp
- public async Task<FaceRecognitionResult> RecognizeFaceAsync(string collectionId, string imagePath)
- {
- var url = "recognition";
- var imageData = await GetImageDataAsBase64Async(imagePath);
-
- var content = new StringContent(JsonConvert.SerializeObject(new
- {
- image = imageData,
- collections_ids = new[] { collectionId }
- }), Encoding.UTF8, "application/json");
-
- using var request = new HttpRequestMessage(HttpMethod.Post, url)
- {
- Content = content,
- Headers = _defaultHeaders
- };
-
- var response = await _httpClient.SendAsync(request);
- response.EnsureSuccessStatusCode();
-
- var responseContent = await response.Content.ReadAsStringAsync();
- var result = JsonConvert.DeserializeObject<FaceRecognitionResponse>(responseContent);
-
- return result.Matches.FirstOrDefault();
- }
-
- public class FaceRecognitionResponse
- {
- public FaceRecognitionResult[] Matches { get; set; }
- }
-
- public class FaceRecognitionResult
- {
- public string ExternalId { get; set; }
- public double Distance { get; set; } // 代表相似度分数,越接近0表示越相似
- }

以上代码示例展示了如何使用 C# 通过 HttpClient 与 CompreFace API 进行交互,完成人脸集合创建、人脸添加以及人脸识别等操作。请注意替换实际的访问令牌(YOUR_ACCESS_TOKEN
)以及图像文件路径,并根据需要调整响应数据模型以适应 CompreFace API 的实际返回结构。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。