feat 人脸检测

This commit is contained in:
2024-08-26 15:08:30 +08:00
parent f80d36c9b2
commit 7493e5a3a3
29 changed files with 422 additions and 205 deletions

View File

@@ -2,30 +2,25 @@ using Microsoft.AspNetCore.Mvc;
using SkiaSharp;
using ViewFaceCore.Core;
using ViewFaceCore.Model;
using ViewFaceCore.Exceptions;
using ViewFaceCore;
using ViewFaceCore.Configs;
using Microsoft.AspNetCore.Authorization;
using Dlhis.InfoCheck.Request;
using Dlhis.InfoCheck.Response;
using Kurisu.AspNetCore.Utils.Extensions;
namespace Dlhis.InfoCheck.Controllers;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
[Authorize]
[ApiController]
[Route("api/[controller]")]
public class FaceController : ControllerBase
{
/// <summary>
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// 人脸质量检测
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
[HttpPost("detection")]
public object FacialDetection(FaceDetectRequest request)
public IEnumerable<string> FacialDetection(FaceDetectRequest request)
{
var base64Bytes = Convert.FromBase64String(request.Base64);
using var stream = new MemoryStream(base64Bytes);
@@ -37,34 +32,30 @@ public class FaceController : ControllerBase
MarkType = MarkType.Light
});
//todo <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
var info = faceDetector.Detect(bitmap).First();
var markPoints = faceMark.Mark(bitmap, info);
using var faceQuality = new FaceQuality();
var brightnessResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Brightness);
var resolutionResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Resolution);
//var clarityResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Clarity);
var clarityExResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.ClarityEx);
var integrityExResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Integrity);
var structureeResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Structure);
//var poseResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Pose);
var poseExeResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.PoseEx);
var qualityResult = new List<QualityResultEx>(6);
qualityResult.Add(faceQuality.DetectEx(bitmap, info, markPoints, QualityType.Brightness));
return new
qualityResult.Add(faceQuality.DetectEx(bitmap, info, markPoints, QualityType.Resolution));
//var clarityResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Clarity);
qualityResult.Add(faceQuality.DetectEx(bitmap, info, markPoints, QualityType.ClarityEx));
qualityResult.Add(faceQuality.DetectEx(bitmap, info, markPoints, QualityType.Integrity));
qualityResult.Add(faceQuality.DetectEx(bitmap, info, markPoints, QualityType.Structure));
//var poseResult = faceQuality.Detect(bitmap, info, markPoints, QualityType.Pose);
qualityResult.Add(faceQuality.DetectEx(bitmap, info, markPoints, QualityType.PoseEx));
return request.CheckList.Where(x =>
{
Brightness = brightnessResult,
Resolution = resolutionResult,
Clarity = clarityExResult,
Integrity = integrityExResult,
Structure = structureeResult,
Pose = poseExeResult
};
var r = qualityResult.First(item => item.Type == x.Type);
return r.Level < x.Level;
}).Select(x => x.Type.GetDescription().Replace("评估", string.Empty) + "不符合");
}
/// <summary>
/// <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ա<EFBFBD>
/// 图片识别对比
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
@@ -79,9 +70,7 @@ public class FaceController : ControllerBase
using var secondStream = new MemoryStream(secondBase64Bytes);
using var secondBitmap = SKBitmap.Decode(secondStream);
//<2F><>Ӧ<EFBFBD><D3A6>ֵ FaceType.Normal<61><6C>0.62<EFBFBD><EFBFBD>FaceType.Mask<73><6B>0.4<EFBFBD><EFBFBD>FaceType.Light<68><74>0.55
//FaceType = FaceType.Normal,
using var recognizer = new FaceRecognizer();
using var recognizer = new FaceRecognizer(new FaceRecognizeConfig());
using var faceDetector = new FaceDetector();
using var faceMark = new FaceLandmarker();