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; namespace Dlhis.InfoCheck.Controllers; /// /// 人脸检测 /// [Authorize] [ApiController] [Route("api/[controller]")] public class FaceController : ControllerBase { /// /// 人脸质量检测 /// /// /// [HttpPost("detection")] public object FacialDetection(FaceDetectRequest request) { var base64Bytes = Convert.FromBase64String(request.Base64); using var stream = new MemoryStream(base64Bytes); using var bitmap = SKBitmap.Decode(stream); using var faceDetector = new FaceDetector(); using var faceMark = new FaceLandmarker(new FaceLandmarkConfig { MarkType = MarkType.Light }); //todo 多人情况 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); return new { Brightness = brightnessResult, Resolution = resolutionResult, Clarity = clarityExResult, Integrity = integrityExResult, Structure = structureeResult, Pose = poseExeResult }; } /// /// 人脸对比 /// /// /// [HttpPost("recognize")] public FaceRecognizeResponse FacialRecognize(FaceRecognizeRequest request) { var firstBase64Bytes = Convert.FromBase64String(request.FirstBase64); using var firstStream = new MemoryStream(firstBase64Bytes); using var firstBitmap = SKBitmap.Decode(firstStream); var secondBase64Bytes = Convert.FromBase64String(request.SecondBase64); using var secondStream = new MemoryStream(secondBase64Bytes); using var secondBitmap = SKBitmap.Decode(secondStream); using var recognizer = new FaceRecognizer(new FaceRecognizeConfig { //对应阈值 FaceType.Normal:0.62、FaceType.Mask:0.4、FaceType.Light:0.55 FaceType = FaceType.Normal }); using var faceDetector = new FaceDetector(); using var faceMark = new FaceLandmarker(); //todo var lft = recognizer.Extract(firstBitmap, faceMark.Mark(firstBitmap, faceDetector.Detect(firstBitmap).First())); var rft = recognizer.Extract(secondBitmap, faceMark.Mark(secondBitmap, faceDetector.Detect(secondBitmap).First())); var similarity = recognizer.Compare(lft, rft); var isSelf = recognizer.IsSelf(similarity); return new FaceRecognizeResponse { Similarity = similarity, IsSelf = isSelf }; } }