/// <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)); }
/// <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); }
/// <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); }