public static int FaceAlignmentFromFaceRegion(byte[] image, HIWITFaceRegion faceRegion, ref HIWITFaceInfo faceInfo) { if (image == null) return HIWIT_ERR_ILLEGAL; IntPtr regionPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(HIWITFaceRegion))); Marshal.StructureToPtr(faceRegion, regionPtr, false); IntPtr infoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(HIWITFaceInfo))); try { int r = HIWITFaceAlignmentFromFaceRegion(APPIP, APPKEY, image, image.Length, regionPtr, infoPtr); if (r == HIWIT_ERR_NONE) faceInfo = (HIWITFaceInfo)Marshal.PtrToStructure(infoPtr, typeof(HIWITFaceInfo)); return r; } finally { Marshal.FreeHGlobal(regionPtr); Marshal.FreeHGlobal(infoPtr); } }
public static int FaceVerify(byte[] probeData, byte[] galleryData, ref float score, HIWITFaceInfo? probeInfo = null, HIWITFaceInfo? galleryInfo = null) { if (probeData == null || galleryData == null) return HIWIT_ERR_ILLEGAL; int size = Marshal.SizeOf(typeof(HiwitLib.HIWITFaceInfo)); IntPtr probePtr = IntPtr.Zero; IntPtr galleryPtr = IntPtr.Zero; try { if (probeInfo != null) { probePtr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(probeInfo, probePtr, false); } if (galleryInfo != null) { galleryPtr = Marshal.AllocHGlobal(size); Marshal.StructureToPtr(galleryInfo, galleryPtr, false); } return HIWITFaceVerifyTwoImage(APPIP, APPKEY, probeData, probeData.Length, probePtr, galleryData, galleryData.Length, galleryPtr, ref score); } finally { Marshal.FreeHGlobal(probePtr); Marshal.FreeHGlobal(galleryPtr); } }