public static MError Register(IntPtr ptrImageEngine, ref MemberWithFeature member) { var retCode = MError.MERR_UNKNOWN.ToInt(); IntPtr feature = IntPtr.Zero; Image image = null; try { image = Image.FromFile(member.FaceImagePath); if (image.Width % 4 != 0) { image = ImageHelper.ScaleImage(image, image.Width - (image.Width % 4), image.Height); } ASF_MultiFaceInfo multiFaceInfo = FaceProcessHelper.DetectFace(ptrImageEngine, image); if (multiFaceInfo.faceNum > 0) { MRECT rect = MemoryHelper.PtrToStructure <MRECT>(multiFaceInfo.faceRects); image = ImageHelper.CutImage(image, rect.left, rect.top, rect.right, rect.bottom); //提取人脸特征 ASF_SingleFaceInfo singleFaceInfo = new ASF_SingleFaceInfo(); feature = FaceProcessHelper.ExtractFeature(ptrImageEngine, Image.FromFile(member.FaceImagePath), out singleFaceInfo); if (singleFaceInfo.faceRect.left == 0 && singleFaceInfo.faceRect.right == 0) { return(MError.MERR_FSDK_FR_INVALID_FACE_INFO); } else { member.AsfFaceFeature = MemoryHelper.PtrToStructure <ASF_FaceFeature>(feature); } } else { return(MError.MERR_FSDK_FR_INVALID_FACE_INFO); } retCode = MError.MOK.ToInt(); } catch (Exception ex) { Afw.Core.Helper.SimplifiedLogHelper.WriteIntoSystemLog(nameof(MemberEnroll), $"Register Exception:{ex.ToString()}"); } finally { MemoryHelper.Free(feature); image.Dispose(); } return(retCode.ToEnum <MError>()); }
internal static void TestMemberEnroll() { try { IntPtr ptrImageEngine = IntPtr.Zero; var errCode = Afw.Services.Initialization.InitialEngineForImage(out ptrImageEngine); if (errCode == MError.MOK) { MemberWithFeature m = new MemberWithFeature(); m.Id = 85465; m.Name = "张华辉"; m.DeptId = 17; m.EmployeeNo = 85465; m.FaceImagePath = @"D:\document\my-private-doc\head.jpg"; var retCode = Afw.Services.MemberEnroll.Register(ptrImageEngine, ref m); if (retCode == MError.MOK) { byte[] ys = new byte[m.AsfFaceFeature.featureSize]; Marshal.Copy(m.AsfFaceFeature.feature, ys, 0, m.AsfFaceFeature.featureSize); string text = string.Empty; for (int i = 0; i < ys.Length; i++) { text += ys[i].ToString("X2"); } var e = new Afw.Data.Domain.FaceFeature { DeptId = m.DeptId, EmployeeNo = m.EmployeeNo, FaceImagePath = m.FaceImagePath, Name = m.Name, Id = m.Id, Feature = new byte[m.AsfFaceFeature.featureSize], FeatureSize = m.AsfFaceFeature.featureSize }; Marshal.Copy(m.AsfFaceFeature.feature, e.Feature, 0, m.AsfFaceFeature.featureSize); var fullpath = $"e:\\{m.Id}.dat"; Afw.Data.Helper.BinaryEntityHelper.WriteEntityIntoFile <Data.Domain.FaceFeature>(e, fullpath); Console.WriteLine(text); } else { Console.WriteLine($"Register{retCode.GetFieldDescription()}"); } } else { Console.WriteLine($"InitialEngineForImage{errCode.GetFieldDescription()}"); } var r = Afw.Core.ASFWrapper.ASFUninitEngine(ptrImageEngine); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } Console.ReadLine(); }