private LocateResult Detect(ImageData offInput, IntPtr pImageData, out ErrorCode ret, LocateOperation operation = LocateOperation.None) { System.IntPtr pDetectResult; var retCode = TrackingWrapper.AFT_FSDK_FaceFeatureDetect(Engine, ref offInput, out pDetectResult); ret = (ErrorCode)retCode; if (ret == ErrorCode.Ok) { var nativeResult = pDetectResult.ToStruct <AFT_FSDK_FACERES>(); var resolveResult = new LocateResult { FaceCount = nativeResult.nFace, FacesOrient = Enumerable.Repeat((OrientCode)nativeResult.lfaceOrient, nativeResult.nFace) .ToArray() }; resolveResult.Faces = nativeResult.rcFace.ToStructArray <FaceRect>(resolveResult.FaceCount); resolveResult.OffInput = offInput; resolveResult.ImageDataPtr = pImageData; if (operation.HasFlag(LocateOperation.IncludeAge)) { //检测年龄 if (ageEstimate == null) { throw new InvalidOperationException("请采用年龄识别模块初始化检测器"); } resolveResult = ageEstimate.StaticEstimation(resolveResult, false); } if (operation.HasFlag(LocateOperation.IncludeGender)) { //性别 if (genderEstimate == null) { throw new InvalidOperationException("请采用性别识别模块初始化检测器"); } resolveResult = genderEstimate.StaticEstimation(resolveResult, false); } return(resolveResult); } return(default(LocateResult)); }
private LocateResult Detect(ImageData offInput, IntPtr pImageData, out ErrorCode ret, LocateOperation operation = LocateOperation.None) { var retCode = DetectionWrapper.AFD_FSDK_StillImageFaceDetection(Engine, ref offInput, out var pDetectResult); ret = (ErrorCode)retCode; if (ret == ErrorCode.Ok) { var nativeResult = pDetectResult.ToStruct <AFD_FSDK_FACERES>(); var resolveResult = new LocateResult { FaceCount = nativeResult.nFace }; var facesOrient = nativeResult.lfaceOrient.ToStructArray <int>(resolveResult.FaceCount); resolveResult.FacesOrient = facesOrient.Select(e => (OrientCode)e).ToArray(); resolveResult.Faces = nativeResult.rcFace.ToStructArray <FaceRect>(resolveResult.FaceCount); resolveResult.OffInput = offInput; resolveResult.ImageDataPtr = pImageData; if (operation.HasFlag(LocateOperation.IncludeAge)) { //检测年龄 if (ageEstimate == null) { throw new InvalidOperationException("请采用年龄识别模块初始化检测器"); } resolveResult = ageEstimate.StaticEstimation(resolveResult, false); } if (operation.HasFlag(LocateOperation.IncludeGender)) { //性别 if (genderEstimate == null) { throw new InvalidOperationException("请采用性别识别模块初始化检测器"); } resolveResult = genderEstimate.StaticEstimation(resolveResult, false); } return(resolveResult); } return(default(LocateResult)); }