public static FaceInfo[] doFaceDetection(IntPtr hFDEngine, ASVLOFFSCREEN inputImg) { FaceInfo[] faceInfo = new FaceInfo[0]; IntPtr pFaceRes = IntPtr.Zero; IntPtr ret = AFD_FSDKLibrary.AFD_FSDK_StillImageFaceDetection(hFDEngine, ref (inputImg), ref (pFaceRes)); if (ret.ToInt64() != 0) { Console.WriteLine(String.Format("AFD_FSDK_StillImageFaceDetection 0x{0:x}", ret)); return(faceInfo); } AFD_FSDK_FACERES faceRes = (AFD_FSDK_FACERES)Marshal.PtrToStructure(pFaceRes, typeof(AFD_FSDK_FACERES)); if (faceRes.nFace > 0) { faceInfo = new FaceInfo[faceRes.nFace]; for (int i = 0; i < faceRes.nFace; i++) { MRECT rect = (MRECT)Marshal.PtrToStructure(faceRes.rcFace + i * Marshal.SizeOf(typeof(MRECT)), typeof(MRECT)); int orient = Marshal.ReadInt32(faceRes.lfaceOrient + 4 * i); faceInfo[i] = new FaceInfo(); faceInfo[i].left = rect.left; faceInfo[i].top = rect.top; faceInfo[i].right = rect.right; faceInfo[i].bottom = rect.bottom; faceInfo[i].orient = orient; Console.WriteLine(String.Format("{0} ({1} {2} {3} {4}) orient {5}", i, rect.left, rect.top, rect.right, rect.bottom, orient)); } } return(faceInfo); }
public static void Main(string[] args) { Console.WriteLine("#####################################################"); //init Engine IntPtr pFDWorkMem = Marshal.AllocCoTaskMem(FD_WORKBUF_SIZE); IntPtr pFRWorkMem = Marshal.AllocCoTaskMem(FR_WORKBUF_SIZE); IntPtr hFDEngine = new IntPtr(0); IntPtr ret = AFD_FSDKLibrary.AFD_FSDK_InitialFaceEngine(APPID, FD_SDKKEY, pFDWorkMem, FD_WORKBUF_SIZE, ref (hFDEngine), _AFD_FSDK_OrientPriority.AFD_FSDK_OPF_0_HIGHER_EXT, 32, MAX_FACE_NUM); if (ret.ToInt64() != 0) { Marshal.FreeCoTaskMem(pFDWorkMem); Marshal.FreeCoTaskMem(pFRWorkMem); Console.WriteLine(String.Format("AFD_FSDK_InitialFaceEngine 0x{0:x}", ret)); Environment.Exit(0); } //print FDEngine version AFD_FSDK_Version versionFD = (AFD_FSDK_Version)Marshal.PtrToStructure(AFD_FSDKLibrary.AFD_FSDK_GetVersion(hFDEngine), typeof(AFD_FSDK_Version)); Console.WriteLine(String.Format("{0} {1} {2} {3}", versionFD.lCodebase, versionFD.lMajor, versionFD.lMinor, versionFD.lBuild)); Console.WriteLine(versionFD.Version); Console.WriteLine(versionFD.BuildDate); Console.WriteLine(versionFD.CopyRight); IntPtr hFREngine = new IntPtr(0); ret = AFR_FSDKLibrary.AFR_FSDK_InitialEngine(APPID, FR_SDKKEY, pFRWorkMem, FR_WORKBUF_SIZE, ref (hFREngine)); if (ret.ToInt64() != 0) { AFD_FSDKLibrary.AFD_FSDK_UninitialFaceEngine(hFDEngine); Marshal.FreeCoTaskMem(pFDWorkMem); Marshal.FreeCoTaskMem(pFRWorkMem); Console.WriteLine(String.Format("AFR_FSDK_InitialEngine 0x{0:x}", ret)); Environment.Exit(0); } // print FREngine version AFR_FSDK_Version versionFR = (AFR_FSDK_Version)Marshal.PtrToStructure(AFR_FSDKLibrary.AFR_FSDK_GetVersion(hFREngine), typeof(AFR_FSDK_Version)); Console.WriteLine(String.Format("{0} {1} {2} {3}", versionFR.lCodebase, versionFR.lMajor, versionFR.lMinor, versionFR.lBuild)); Console.WriteLine(versionFR.Version); Console.WriteLine(versionFR.BuildDate); Console.WriteLine(versionFR.CopyRight); //load Image Data ASVLOFFSCREEN inputImgA; ASVLOFFSCREEN inputImgB; if (bUseRAWFile) { String filePathA = "001_640x480_I420.YUV"; int yuv_widthA = 640; int yuv_heightA = 480; int yuv_formatA = ASVL_COLOR_FORMAT.ASVL_PAF_I420; String filePathB = "003_640x480_I420.YUV"; int yuv_widthB = 640; int yuv_heightB = 480; int yuv_formatB = ASVL_COLOR_FORMAT.ASVL_PAF_I420; inputImgA = loadRAWImage(filePathA, yuv_widthA, yuv_heightA, yuv_formatA); inputImgB = loadRAWImage(filePathB, yuv_widthB, yuv_heightB, yuv_formatB); } else { String filePathA = "001.jpg"; String filePathB = "1_9.jpg"; inputImgA = loadImage(filePathA); inputImgB = loadImage(filePathB); } Console.WriteLine(String.Format("similarity between faceA and faceB is {0}", compareFaceSimilarity(hFDEngine, hFREngine, inputImgA, inputImgB))); inputImgA.freeUnmanaged(); inputImgB.freeUnmanaged(); //release Engine AFD_FSDKLibrary.AFD_FSDK_UninitialFaceEngine(hFDEngine); AFR_FSDKLibrary.AFR_FSDK_UninitialEngine(hFREngine); Marshal.FreeCoTaskMem(pFDWorkMem); Marshal.FreeCoTaskMem(pFRWorkMem); Console.WriteLine("#####################################################"); }
public static void Main(string[] args) { Console.WriteLine("#####################################################"); //init Engine IntPtr pFDWorkMem = Marshal.AllocCoTaskMem(FD_WORKBUF_SIZE); IntPtr hFDEngine = new IntPtr(0); IntPtr ret = AFD_FSDKLibrary.AFD_FSDK_InitialFaceEngine(APPID, FD_SDKKEY, pFDWorkMem, FD_WORKBUF_SIZE, ref (hFDEngine), _AFD_FSDK_OrientPriority.AFD_FSDK_OPF_0_HIGHER_EXT, 16, MAX_FACE_NUM); if (ret.ToInt64() != 0) { Marshal.FreeCoTaskMem(pFDWorkMem); Console.WriteLine(String.Format("AFD_FSDK_InitialFaceEngine 0x{0:x}", ret)); Environment.Exit(0); } //print FDEngine version AFD_FSDK_Version versionFD = (AFD_FSDK_Version)Marshal.PtrToStructure(AFD_FSDKLibrary.AFD_FSDK_GetVersion(hFDEngine), typeof(AFD_FSDK_Version)); Console.WriteLine(String.Format("{0} {1} {2} {3}", versionFD.lCodebase, versionFD.lMajor, versionFD.lMinor, versionFD.lBuild)); Console.WriteLine(versionFD.Version); Console.WriteLine(versionFD.BuildDate); Console.WriteLine(versionFD.CopyRight); //load Image Data ASVLOFFSCREEN inputImg; if (bUseYUVFile) { String filePath = "001_640x480_I420.YUV"; int yuv_width = 640; int yuv_height = 480; int yuv_format = ASVL_COLOR_FORMAT.ASVL_PAF_I420; inputImg = loadYUVImage(filePath, yuv_width, yuv_height, yuv_format); } else { String filePath = "003.jpg"; inputImg = loadImage(filePath); } //do Face Detect FaceInfo[] faceInfos = doFaceDetection(hFDEngine, inputImg); for (int i = 0; i < faceInfos.Length; i++) { FaceInfo rect = faceInfos[i]; Console.WriteLine(String.Format("{0} ({1} {2} {3} {4}) orient {5}", i, rect.left, rect.top, rect.right, rect.bottom, rect.orient)); } inputImg.freeUnmanaged(); //release Engine AFD_FSDKLibrary.AFD_FSDK_UninitialFaceEngine(hFDEngine); Marshal.FreeCoTaskMem(pFDWorkMem); Console.WriteLine("#####################################################"); }