Example #1
0
        /// <summary>
        /// 创建
        /// </summary>
        /// <param name="faceFeature"></param>
        /// <returns></returns>
        public static MemberData CreateStruct(this Afw.Data.Domain.FaceFeature faceFeature)
        {
            var retMemberData = new MemberData();

            retMemberData.Face3DStatus                    = 0;
            retMemberData.FaceNum                         = 1;
            retMemberData.memberWithFeature.Id            = faceFeature.Id;
            retMemberData.memberWithFeature.Name          = faceFeature.Name;
            retMemberData.memberWithFeature.DeptId        = faceFeature.DeptId;
            retMemberData.memberWithFeature.EmployeeNo    = faceFeature.EmployeeNo;
            retMemberData.memberWithFeature.FaceImagePath = faceFeature.FaceImagePath;
            retMemberData.memberWithFeature.AsfFaceFeature.featureSize = faceFeature.FeatureSize;
            retMemberData.memberWithFeature.AsfFaceFeature.feature     = MemoryHelper.Malloc(faceFeature.FeatureSize);
            MemoryHelper.Copy(faceFeature.Feature, 0, retMemberData.memberWithFeature.AsfFaceFeature.feature, faceFeature.FeatureSize);
            return(retMemberData);
        }
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();
        }
Example #3
0
        protected override void DefWndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case UserMessage.WM_MESSAGE:
                var wmMsg = Marshal.PtrToStringAnsi(m.LParam);
                this.Invoke(new Action(delegate
                {
                    this.txbDisplay.AppendText(wmMsg + Environment.NewLine);
                }));
                break;

            case UserMessage.WM_FACE_DATA_LOADED:
                var cnt   = (int)m.LParam;
                var ldMsg = $"人脸数据源模块对接成功,共导入人脸数据{cnt}条![{SimplifiedUtility.GetDatetimeNow}]";
                this.Invoke(new Action(delegate
                {
                    this.txbDisplay.AppendText(ldMsg + Environment.NewLine);
                    this.FaceDataGridViewRender(iFaceDataRepository.Table);
                }));
                this.ButtonReleaseForFaceDataViewReloaded();
                break;

            case UserMessage.WM_PARENT_FORM_UNLOCK:
                this.Invoke(new Action(delegate
                {
                    FaceFormUnlock();
                }));
                break;

            case UserMessage.WM_QUERY_FACE_FEATURE_VIA_ID:
                var ptrReq     = m.WParam;
                var userId     = (int)m.LParam;
                var userExists = iFaceDataRepository.TableNoTracking.Count(i => i.Id == userId);
                Afw.WinForm.WinMessageHelper.SendMessage(ptrReq, UserMessage.WM_RESPONSE_FACE_FEATURE_VIA_ID, (IntPtr)userId, (IntPtr)userExists);
                break;

            case UserMessage.WM_QUERY_FACE_FEATURE_VIA_EMPLOYEE_NO:
                var ptrReqViaEmpNo   = m.WParam;
                var employeeNo       = (int)m.LParam;
                var employeeNoExists = iFaceDataRepository.TableNoTracking.Count(i => i.EmployeeNo == employeeNo);
                Afw.WinForm.WinMessageHelper.SendMessage(ptrReqViaEmpNo, UserMessage.WM_RESPONSE_FACE_FEATURE_VIA_EMPLOYEE_NO, (IntPtr)employeeNo, (IntPtr)employeeNoExists);
                break;

            case UserMessage.WM_FACE_DATA_REGISTER:
                var faceFeature = MemoryHelper.PtrToStructure <MemberData>(m.LParam);
                var ptrReqForm  = m.WParam;
                var e           = new Afw.Data.Domain.FaceFeature
                {
                    DeptId        = faceFeature.memberWithFeature.DeptId,
                    EmployeeNo    = faceFeature.memberWithFeature.EmployeeNo,
                    FaceImagePath = faceFeature.memberWithFeature.FaceImagePath,
                    Name          = faceFeature.memberWithFeature.Name,
                    Id            = faceFeature.memberWithFeature.Id,
                    Feature       = new byte[faceFeature.memberWithFeature.AsfFaceFeature.featureSize],
                    FeatureSize   = faceFeature.memberWithFeature.AsfFaceFeature.featureSize
                };
                Marshal.Copy(faceFeature.memberWithFeature.AsfFaceFeature.feature, e.Feature, 0, faceFeature.memberWithFeature.AsfFaceFeature.featureSize);
                Insert(e);
                registerForm.Visible = false;
                FaceDataGridViewAppend(e);
                FaceFormUnlock();
                MemoryHelper.Free(m.LParam);
                break;

            case UserMessage.WM_FACE_DATA_REFRESH:
                this.Invoke(new Action(delegate
                {
                    FaceFormUnlock();
                    ButtonLockForFaceDataViewReload();
                    FaceDataGridViewClear();
                    FaceDataLoad();
                }));
                break;

            case UserMessage.WM_FACE_DATA_UPDATE:
                var faceFeatureToUpdate  = MemoryHelper.PtrToStructure <MemberData>(m.LParam);
                var ptrReqToUpdate       = m.WParam;
                var faceFeatureCandidate = new Afw.Data.Domain.FaceFeature
                {
                    DeptId        = faceFeatureToUpdate.memberWithFeature.DeptId,
                    EmployeeNo    = faceFeatureToUpdate.memberWithFeature.EmployeeNo,
                    FaceImagePath = faceFeatureToUpdate.memberWithFeature.FaceImagePath,
                    Name          = faceFeatureToUpdate.memberWithFeature.Name,
                    Id            = faceFeatureToUpdate.memberWithFeature.Id,
                    Feature       = new byte[faceFeatureToUpdate.memberWithFeature.AsfFaceFeature.featureSize],
                    FeatureSize   = faceFeatureToUpdate.memberWithFeature.AsfFaceFeature.featureSize
                };
                Marshal.Copy(faceFeatureToUpdate.memberWithFeature.AsfFaceFeature.feature, faceFeatureCandidate.Feature, 0, faceFeatureToUpdate.memberWithFeature.AsfFaceFeature.featureSize);
                Update(faceFeatureCandidate);
                registerForm.Visible = false;
                FaceDataGridViewUpdate(faceFeatureCandidate);
                FaceFormUnlock();
                MemoryHelper.Free(m.LParam);
                break;

            case UserMessage.WM_FACE_DATA_DELETE:
                var rowIndex                = (int)m.WParam;
                var faceFeatureToDelete     = MemoryHelper.PtrToStructure <MemberData>(m.LParam);
                var faceFeatureDelCandidate = new Afw.Data.Domain.FaceFeature
                {
                    DeptId        = faceFeatureToDelete.memberWithFeature.DeptId,
                    EmployeeNo    = faceFeatureToDelete.memberWithFeature.EmployeeNo,
                    FaceImagePath = faceFeatureToDelete.memberWithFeature.FaceImagePath,
                    Name          = faceFeatureToDelete.memberWithFeature.Name,
                    Id            = faceFeatureToDelete.memberWithFeature.Id,
                    Feature       = new byte[faceFeatureToDelete.memberWithFeature.AsfFaceFeature.featureSize],
                    FeatureSize   = faceFeatureToDelete.memberWithFeature.AsfFaceFeature.featureSize
                };
                Marshal.Copy(faceFeatureToDelete.memberWithFeature.AsfFaceFeature.feature, faceFeatureDelCandidate.Feature, 0, faceFeatureToDelete.memberWithFeature.AsfFaceFeature.featureSize);
                Delete(faceFeatureDelCandidate);
                registerForm.Visible = false;
                FaceDataGridViewRemove(rowIndex);
                FaceFormUnlock();
                MemoryHelper.Free(m.LParam);
                break;

            default:
                base.DefWndProc(ref m);    //调用基类函数处理非自定义消息。
                break;
            }
        }