コード例 #1
0
        /// <summary>
        /// 判断是否为活体
        /// </summary>
        /// <param name="idCardEngine">引擎</param>
        /// <param name="faceRes">人脸信息</param>
        /// <param name="bitmapRgb">RGB摄像头图片</param>
        /// <param name="bitmapIr">IR摄像头图片</param>
        /// <param name="livennessResultStr">活体检测字符串</param>
        /// <returns></returns>
        public static bool IsLiveness(IdCardEngine idCardEngine, FaceRes faceRes, Bitmap bitmapRgb, Bitmap bitmapIr, ref string livennessResultStr)
        {
            bool          retRgb  = false;
            bool          retIr   = false;
            StringBuilder builder = new StringBuilder();

            if (faceRes.nFace > 0)
            {
                //判断RGB活体
                if (bitmapRgb != null && idCardEngine.ArcSoft_FIC_Process(bitmapRgb, faceRes).Equals(0))
                {
                    LivenessInfo liveness = null;
                    idCardEngine.ArcSoft_FIC_GetLivenessInfo(out liveness);
                    retRgb = liveness.isLive.Equals(1);
                    builder.AppendFormat(",RGB:{0}", TransLivenessResult(liveness.isLive));
                }
                //判断IR活体
                if (bitmapIr != null && idCardEngine.ArcSoft_FIC_Process_IR(bitmapIr, faceRes).Equals(0))
                {
                    LivenessInfo livenessIR = null;
                    idCardEngine.ArcSoft_FIC_GetLivenessInfo_IR(out livenessIR);
                    retIr = livenessIR.isLive.Equals(1);
                    builder.AppendFormat(",IR:{0}", TransLivenessResult(livenessIR.isLive));
                }
            }
            livennessResultStr = builder.ToString();
            return(retRgb && (retIr || bitmapIr == null));
        }
コード例 #2
0
        /// <summary>
        /// 人脸特征提取
        /// </summary>
        /// <param name="image">人脸图像</param>
        /// <param name="faceRes">人脸信息检测结果</param>
        /// <returns>接口返回码,返回0表示正常,返回其他值请在开发者中心-帮助中心查询</returns>
        public int ArcSoft_FIC_FaceDataFeatureExtraction(Image image, ref FaceRes faceRes)
        {
            faceRes = new FaceRes();
            IntPtr        pFaceRes       = MemoryUtil.Malloc(MemoryUtil.SizeOf <AFICFSDKFACERES>());
            ASVLOFFSCREEN imagetemp      = ImageUtil.ReadBmp(image, false);
            IntPtr        pInputFaceData = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASVLOFFSCREEN>());

            MemoryUtil.StructToPtr(imagetemp, pInputFaceData);
            //调用SDK的人脸特征提取接口
            int retCode = FICFunctions.ArcSoft_FIC_FaceDataFeatureExtraction(pEngine, mode, pInputFaceData, pFaceRes);

            if (!retCode.Equals(0))
            {
                MemoryUtil.Free(pFaceRes);
                MemoryUtil.Free(pInputFaceData);
                MemoryUtil.Free(imagetemp.ppu8Plane[0]);
                return(retCode);
            }
            AFICFSDKFACERES faceResStruct = MemoryUtil.PtrToStruct <AFICFSDKFACERES>(pFaceRes);

            faceRes.nFace  = faceResStruct.nFace;
            faceRes.rcFace = faceResStruct.rcFace;
            MemoryUtil.Free(pFaceRes);
            MemoryUtil.Free(pInputFaceData);
            MemoryUtil.Free(imagetemp.ppu8Plane[0]);
            return(retCode);
        }
コード例 #3
0
        /// <summary>
        /// 人脸信息(IR活体)检测
        /// </summary>
        /// <param name="bitmap">人脸图像</param>
        /// <param name="faceRes">人脸信息</param>
        /// <param name="combinedMask">检测属性,默认IR活体检测</param>
        /// <returns>接口返回码,返回0表示正常,返回其他值请在开发者中心-帮助中心查询</returns>
        public int ArcSoft_FIC_Process_IR(Bitmap bitmap, FaceRes faceRes, int combinedMask = EngineMask.AFIC_LIVENESS_IR)
        {
            int             retCode    = -1;
            ASVLOFFSCREEN   imageinfo  = ImageUtil.ReadBmpIR(bitmap);
            AFICFSDKFACERES sFacerects = new AFICFSDKFACERES();

            sFacerects.nFace  = faceRes.nFace;
            sFacerects.rcFace = faceRes.rcFace;
            IntPtr pImageInfo = MemoryUtil.Malloc(MemoryUtil.SizeOf <ASVLOFFSCREEN>());

            MemoryUtil.StructToPtr(imageinfo, pImageInfo);
            IntPtr pFacerects = MemoryUtil.Malloc(MemoryUtil.SizeOf <AFICFSDKFACERES>());

            MemoryUtil.StructToPtr(sFacerects, pFacerects);
            //调用SDK
            retCode = FICFunctions.ArcSoft_FIC_Process_IR(pEngine, pImageInfo, pFacerects, combinedMask);
            MemoryUtil.Free(imageinfo.ppu8Plane[0]);
            MemoryUtil.Free(pImageInfo);
            MemoryUtil.Free(pFacerects);
            return(retCode);
        }