/// <summary> /// 提取单人脸特征 /// </summary> /// <param name="pEngine">人脸识别引擎</param> /// <param name="image">图片</param> /// <param name="singleFaceInfo">单人脸信息</param> /// <returns>单人脸特征</returns> public static FaceFeature ExtractFeature(FaceEngine faceEngine, Image image, SingleFaceInfo singleFaceInfo) { FaceFeature faceFeature = null; try { MultiFaceInfo multiFaceInfo = new MultiFaceInfo(); multiFaceInfo.faceNum = 1; multiFaceInfo.faceOrients = new int[1]; multiFaceInfo.faceOrients[0] = singleFaceInfo.faceOrient; multiFaceInfo.faceRects = new MRECT[1]; multiFaceInfo.faceRects[0] = singleFaceInfo.faceRect; multiFaceInfo.faceDataInfoList = new FaceDataInfo[1]; multiFaceInfo.faceDataInfoList[0] = singleFaceInfo.faceDataInfo; //口罩检测 int retCode = -1; MaskInfo maskInfo = MaskEstimation(faceEngine, image, singleFaceInfo, out retCode); if (retCode != 0 || maskInfo.maskArray == null || maskInfo.maskArray.Length <= 0) { return(faceFeature); } bool isMask = maskInfo.maskArray[0].Equals(1); faceEngine.ASFFaceFeatureExtractEx(image, multiFaceInfo, ASF_RegisterOrNot.ASF_RECOGNITION, out faceFeature, 0, isMask); } catch (Exception ex) { LogUtil.LogInfo(typeof(FaceUtil), ex); } return(faceFeature); }
/// <summary> /// 提取人脸特征,多人脸默认取第一个人脸特征 /// </summary> /// <param name="pEngine">引擎Handle</param> /// <param name="image">图像</param> /// <returns>保存人脸特征结构体指针</returns> public static FaceFeature ExtractFeature(FaceEngine faceEngine, Image image, out SingleFaceInfo singleFaceInfo, ref int retCode, int faceIndex = 0) { FaceFeature faceFeature = new FaceFeature(); singleFaceInfo = new SingleFaceInfo(); try { if (image == null) { return(faceFeature); } MultiFaceInfo multiFaceInfo = new MultiFaceInfo(); //人脸检测 retCode = faceEngine.ASFDetectFacesEx(image, out multiFaceInfo); if (retCode != 0) { return(faceFeature); } singleFaceInfo.faceOrient = multiFaceInfo.faceOrients[faceIndex]; singleFaceInfo.faceRect = multiFaceInfo.faceRects[faceIndex]; retCode = faceEngine.ASFFaceFeatureExtractEx(image, multiFaceInfo, out faceFeature, faceIndex); } catch (Exception ex) { LogUtil.LogInfo(typeof(FaceUtil), ex); } return(faceFeature); }
/// <summary> /// 提取人脸特征,多人脸默认取第一个人脸特征 /// </summary> /// <param name="pEngine">引擎Handle</param> /// <param name="image">图像</param> /// <param name="thresold">图像质量检测阈值</param> /// <returns>保存人脸特征结构体指针</returns> public static FaceFeature ExtractFeature(FaceEngine faceEngine, Image image, float thresoldImg, float thresoleImgMask, ASF_RegisterOrNot registerOrNot, out SingleFaceInfo singleFaceInfo, out bool isMask, ref string featureResult, out int retCode, int faceIndex = 0) { FaceFeature faceFeature = new FaceFeature(); singleFaceInfo = new SingleFaceInfo(); isMask = false; retCode = -1; try { if (image == null) { return(faceFeature); } MultiFaceInfo multiFaceInfo; //人脸检测 retCode = faceEngine.ASFDetectFacesEx(image, out multiFaceInfo); if (retCode != 0 || multiFaceInfo.faceNum <= 0) { featureResult = string.Format("{1},接口返回值:{0}", retCode, retCode != 0 ? "人脸检测失败" : "检测到的人脸数为0"); return(faceFeature); } singleFaceInfo.faceOrient = multiFaceInfo.faceOrients[faceIndex]; singleFaceInfo.faceRect = multiFaceInfo.faceRects[faceIndex]; singleFaceInfo.faceDataInfo = multiFaceInfo.faceDataInfoList[faceIndex]; //口罩检测 MaskInfo maskInfo = MaskEstimation(faceEngine, image, singleFaceInfo, out retCode); if (retCode != 0 || maskInfo.maskArray == null || maskInfo.maskArray.Length <= 0) { featureResult = string.Format("{1},接口返回值:{0}", retCode, retCode != 0 ? "口罩检测失败" : "检测到的口罩结果为空"); return(faceFeature); } isMask = maskInfo.maskArray[0].Equals(1); //图像质量检测 float confidenceLevel = 0.0f; retCode = faceEngine.ASFImageQualityDetectEx(image, multiFaceInfo, out confidenceLevel, faceIndex, isMask); if (retCode != 0 || confidenceLevel < (isMask ? thresoleImgMask : thresoldImg)) { featureResult = string.Format("{1},接口返回值:{0}", retCode, retCode != 0 ? "图像质量检测失败" : "图像质量过低"); return(faceFeature); } //特征提取 retCode = faceEngine.ASFFaceFeatureExtractEx(image, multiFaceInfo, registerOrNot, out faceFeature, faceIndex, isMask); if (retCode != 0) { featureResult = string.Format("特征提取失败,接口返回值:{0}", retCode); } } catch (Exception ex) { LogUtil.LogInfo(typeof(FaceUtil), ex); } return(faceFeature); }
/// <summary> /// 提取单人脸特征 /// </summary> /// <param name="pEngine">人脸识别引擎</param> /// <param name="image">图片</param> /// <param name="singleFaceInfo">单人脸信息</param> /// <returns>单人脸特征</returns> public static FaceFeature ExtractFeature(FaceEngine faceEngine, Image image, SingleFaceInfo singleFaceInfo) { FaceFeature faceFeature = new FaceFeature(); try { MultiFaceInfo multiFaceInfo = new MultiFaceInfo(); multiFaceInfo.faceNum = 1; multiFaceInfo.faceOrients = new int[1]; multiFaceInfo.faceOrients[0] = singleFaceInfo.faceOrient; multiFaceInfo.faceRects = new MRECT[1]; multiFaceInfo.faceRects[0] = singleFaceInfo.faceRect; //图片质量检测完成,进行特征提取 faceEngine.ASFFaceFeatureExtractEx(image, multiFaceInfo, out faceFeature); } catch (Exception ex) { LogUtil.LogInfo(typeof(FaceUtil), ex); } return(faceFeature); }