Ejemplo n.º 1
0
 /// <summary>
 /// 创建一个FaceEngine实例
 /// </summary>
 /// <param name="registerOrNot"></param>
 /// <param name="sdkversion"></param>
 public FaceEngine(ASF_RegisterOrNot registerOrNot, int sdkversion)
 {
     if (sdkversion < 2 || sdkversion > 4)
     {
         throw new ArgumentOutOfRangeException("sdkversion", sdkversion, "不支持的sdk版本");
     }
     _version = sdkversion;
     GetVersion();
     RegisterOrNot = registerOrNot;
 }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
 public static extern int ASFFaceFeatureExtractEx(IntPtr hEngine, IntPtr imgData, IntPtr faceInfo, ASF_RegisterOrNot registerOrNot, int mask, IntPtr feature);
Ejemplo n.º 4
0
 public static extern int ASFFaceFeatureExtract(IntPtr pEngine, int width, int height, int format, IntPtr imgData, IntPtr faceInfo, ASF_RegisterOrNot registerOrNot, int mask, IntPtr faceFeature);
Ejemplo n.º 5
0
 public static extern MResult ASFFaceFeatureExtractEx(IntPtr hEngine, ASVLOFFSCREEN imgData, ASF_SingleFaceInfo faceInfo, ASF_RegisterOrNot registerOrNot, int mask, out ASF_FaceFeature feature);
Ejemplo n.º 6
0
 public static extern MResult ASFFaceFeatureExtract(IntPtr hEngine, int width, int height, int format, IntPtr imgData, ASF_SingleFaceInfo faceInfo, ASF_RegisterOrNot registerOrNot, int mask, out ASF_FaceFeature feature);
Ejemplo n.º 7
0
        /// <summary>
        /// 提取特征值
        /// </summary>
        /// <param name="image"></param>
        /// <param name="singleFaceInfo"></param>
        /// <param name="registerOrNot"></param>
        /// <returns></returns>
        public FaceFeaturePro FaceFeatureExtractEx(ImageInfo image, SingleFaceInfo singleFaceInfo, ASF_RegisterOrNot registerOrNot)
        {
            if (_version == 2)
            {
                return(FaceFeatureExtract(image, singleFaceInfo));
            }
            MResult         result  = MResult.MOK;
            ASF_FaceFeature feature = new ASF_FaceFeature {
            };

            if (_version >= 4)
            {
                result =
                    ASFFunctions.ASFFaceFeatureExtractEx(EngineHandler, image.ASFImageData, singleFaceInfo.ASFSingleFaceInfo, registerOrNot, singleFaceInfo.Mask ? 1 : 0, out feature);
            }
            else
            {
                result =
                    ASFFunctions.Compatible.ASFFaceFeatureExtractEx(EngineHandler, image.ASFImageData, singleFaceInfo.ASFSingleFaceInfo, out feature);
            }
            if (result == MResult.MOK)
            {
                var entity = new FaceFeaturePro();
                entity.Size = feature.featureSize;
                var buffers = new byte[feature.featureSize];
                Marshal.Copy(feature.feature, buffers, 0, feature.featureSize);
                entity.Buffers        = buffers;
                entity.ASFFaceFeature = feature;
                return(entity);
            }
            return(null);
        }