Example #1
0
        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>());
        }
Example #2
0
        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();
        }