Example #1
0
        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));
        }
Example #2
0
        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));
        }