Exemplo n.º 1
0
        /// <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);
        }
Exemplo 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);
        }
Exemplo n.º 3
0
        /// <summary>
        /// IR图片人脸检测
        /// </summary>
        /// <param name="pEngine"></param>
        /// <param name="image"></param>
        /// <returns></returns>
        public static MultiFaceInfo DetectFaceIR(FaceEngine faceEngine, Bitmap image)
        {
            MultiFaceInfo multiFaceInfo = null;

            try
            {
                faceEngine.ASFDetectFacesEx(image, out multiFaceInfo, ASF_ImagePixelFormat.ASVL_PAF_GRAY);
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(multiFaceInfo);
        }
Exemplo n.º 4
0
        /// <summary>
        /// 人脸检测
        /// </summary>
        /// <param name="pEngine">引擎Handle</param>
        /// <param name="image">图像</param>
        /// <returns></returns>
        public static MultiFaceInfo DetectFace(FaceEngine faceEngine, Image image)
        {
            MultiFaceInfo multiFaceInfo = new MultiFaceInfo();

            try
            {
                faceEngine.ASFDetectFacesEx(image, out multiFaceInfo);
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(multiFaceInfo);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 人脸检测
        /// </summary>
        /// <param name="pEngine">引擎Handle</param>
        /// <param name="image">图像</param>
        /// <returns></returns>
        public static MultiFaceInfo DetectFaceAndLandMark(FaceEngine faceEngine, Image image)
        {
            MultiFaceInfo multiFaceInfo = null;

            try
            {
                int retCode = faceEngine.ASFDetectFacesEx(image, out multiFaceInfo);
                if (retCode == 0)
                {
                    LandMarkInfo landmarkInfo = LandMarkEstimation(faceEngine, image, multiFaceInfo, out retCode);
                    if (retCode == 0)
                    {
                        multiFaceInfo.pointAyy = landmarkInfo.pointAyy;
                    }
                }
            }
            catch (Exception ex)
            {
                LogUtil.LogInfo(typeof(FaceUtil), ex);
            }
            return(multiFaceInfo);
        }