/// <summary> /// 进行检测 /// </summary> /// <param name="image">待检测的图像数据</param> /// <param name="result">检测结果</param> /// <returns>成功返回 MOK,否则返回失败 code</returns> public override ErrorCode Detect(Bitmap image, out LocateResult result, LocateOperation operation = LocateOperation.None) { var ret = ErrorCode.Ok; result = CommonOperation.OffInputOperation(image, (offInput, pImageData) => Detect(offInput, pImageData, out ret, operation)); return(ret); }
/// <summary> /// 进行检测 /// </summary> /// <param name="imageData">图像数据</param> /// <param name="width">图像宽度</param> /// <param name="height">图像高度</param> /// <param name="result">识别结果</param> /// <param name="pixelSize">像素大小</param> /// <returns>成功返回 MOK,否则返回失败 code</returns> public override ErrorCode Detect(byte[] imageData, int width, int height, out LocateResult result, int pixelSize = 3, LocateOperation operation = LocateOperation.None) { var ret = ErrorCode.Ok; result = CommonOperation.OffInputOperation(imageData, width, height, (offInput, pImageData) => Detect(offInput, pImageData, out ret, operation)); return(ret); }
/// <summary> /// 定位并抽取特征数据 /// </summary> /// <param name="image">待处理的图像</param> /// <param name="operation">抽取操作</param> /// <returns>特征数据数组</returns> public Feature[] LocateExtract(Bitmap image, LocateOperation operation = LocateOperation.None) { var code = _locator.Detect(image, out var location, operation); if (code != ErrorCode.Ok) { throw new FaceException(code); } if (!location.HasFace) { //释放资源 location.Dispose(); return(null); } ; var features = _recognize.ExtractFeatures(location); return(features); }
public abstract ErrorCode Detect(byte[] imageData, int width, int height, out LocateResult result, int pixelSize = 3, LocateOperation operation = LocateOperation.None);
public abstract ErrorCode Detect(Bitmap image, out LocateResult result, LocateOperation operation = LocateOperation.None);
private LocateResult Detect(ImageData offInput, IntPtr pImageData, out ErrorCode ret, LocateOperation operation = LocateOperation.None) { var retCode = TrackingWrapper.AFT_FSDK_FaceFeatureDetect(Engine, ref offInput, out var 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)); }
/// <summary> /// 定位并抽取特征数据 /// </summary> /// <param name="imageData">待处理的图像数据</param> /// <param name="width">图像宽度</param> /// <param name="height">图像高度</param> /// <param name="pixelSize">像素大小</param> /// <param name="operation">抽取操作</param> /// <returns>特征数据数组</returns> public Feature[] LocateExtract(byte[] imageData, int width, int height, int pixelSize = 3, LocateOperation operation = LocateOperation.None) { var code = _locator.Detect(imageData, width, height, out var location, pixelSize, operation); if (code != ErrorCode.Ok) { throw new FaceException(code); } if (!location.HasFace) { //释放资源 location.Dispose(); return(null); } ; var features = _recognize.ExtractFeatures(location); return(features); }
private LocateResult Detect(ImageData offInput, IntPtr pImageData, out ErrorCode ret, LocateOperation operation = LocateOperation.None) { System.IntPtr pDetectResult; var retCode = DetectionWrapper.AFD_FSDK_StillImageFaceDetection(Engine, ref offInput, out 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)); }