//二代身份证识别触发
 protected override void Cvr_GetNewDataEvent(object sender, CvrInfo e)
 {
     base.Cvr_GetNewDataEvent(sender, e);
     try
     {
         if (CvrPass)
         {
             Dispatcher.InvokeAsync(() =>
             {
                 //黑名单检查
                 if (IsCheckBlack && FaceFun.IsInBlack(e.Number))
                 {
                     LeftImg.Visibility = Visibility.Visible;
                 }
                 var item = IrAdvanced.GetBitmapImageFromFile(e.PeopleImg);
                 if (item != null)
                 {
                     CvrImgMain.Source = CvrImg.Source = item;
                     ShowEventMsg("正在识别人脸特征!", MsgType.Info);
                     FaceOut = 0;
                     CvrPass = true;
                 }
                 else
                 {
                     CvrPass = false;
                 }
             });
         }
     }
     catch (Exception ex)
     {
         ex.ToSaveLog();
         CvrPass = false;
     }
 }
 void SelectMatch_Loaded(object sender, RoutedEventArgs e)
 {
     try
     {
         if (isfirst)
         {
             //获取场次
             _matchList = FaceFun.GetMatch();
             foreach (var child in _matchList)
             {
                 var item = new SelectItem(child);
                 item.Click += item_Click;
                 Spanel.Children.Add(item);
             }
             var firstOrDefault = Spanel.Children.OfType <SelectItem>().FirstOrDefault();
             if (firstOrDefault != null)
             {
                 firstOrDefault.Effect = new DropShadowEffect()
                 {
                     Color = Colors.White, BlurRadius = 20, Opacity = 1
                 };
                 ThisMath = firstOrDefault.Info;
             }
             isfirst = false;
         }
     }
     catch (Exception ex)
     {
         ex.ToSaveLog("SelectMatch_Loaded:");
     }
 }
Example #3
0
        protected override void Capture_ImageGrabbed(object sender, EventArgs e)
        {
            base.Capture_ImageGrabbed(sender, e);
            try
            {
                if (FaceOut >= FaceOutCount)
                {
                    ShowEventMsg("对比失败", MsgType.FaceErr);
                    Dispatcher.InvokeAsync(() => { MiniImg.Source = FaceFun.ByteToBitmapImage(PhotoErr); });
                }
                //摄像头视频流输出
                Dispatcher.Invoke(() => { CameraPic1.ImageView = CvrPass && !FacePass ? Face.FaceBitmapSource : MyMat.Bitmap; });

                if (CvrPass && FacePass && _qrInfo != null)
                {
                    if (IsIdSame && (Cvr.Info.Number != _qrInfo.Value.IdNo))
                    {
                        ShowEventMsg("身份证号码与票面不符合!", MsgType.Info);
                    }
                    else
                    {
                        InSession(); //写入本地记录并且通知
                    }
                }
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("FaceIdView.Capture_ImageGrabbed:");
            }
        }
 protected override void Capture_ImageGrabbed(object sender, EventArgs e)
 {
     try
     {
         MyMat = null;
         MyMat = new Mat();
         if (MyCapture == null)
         {
             return;
         }
         MyCapture.Retrieve(MyMat, 0);
         if (icPass && white != null)
         {
             FaceOut++;
             if (FaceOut >= FaceOutCount)
             {
                 white.Value.IdNo.ToSaveLog("比对超时,比对失败:");
                 PhotoErr = FaceFun.BitmapToByte(MyMat.Bitmap);
                 icPass   = false;
                 ShowEventMsg("对比失败", MsgType.FaceErr);
                 Dispatcher.InvokeAsync(() => { MiniImg.Source = FaceFun.ByteToBitmapImage(PhotoErr); });
                 ShowEventMsg("失败:当前用户与身份证对比失败", MsgType.Info);
             }
             else
             {
                 ShowEventMsg("识别中" + (FaceOutCount - FaceOut), MsgType.TipErr);
                 CameraRft = Face.FaceTz(MyMat);
                 if (Face.VerifyIr.ToInt32() == 0)
                 {
                     FaceIr = FaceFun.FaceResult(CameraRft, Rft2);
                     if (FaceIr > _confidence)
                     {
                         try
                         {
                             //保存识别到的摄像头图片
                             white.Value.IdNo.ToSaveLog("保存检票成功照片:");
                             //  MyMat.Bitmap.Save(string.Format("{0}{1}.jpg", CamPath, Cvr.Info.Number),ImageFormat.Jpeg);
                             PhotoOk = FaceFun.BitmapToByte(MyMat.Bitmap);
                             ShowEventMsg("比对成功", MsgType.TipOk);
                             FaceIr.ToString().ToSaveLog(white.Value.IdNo + " 比对成功,相似度:");
                             FacePass = true; //当取信值大于80%认为是同一个人比对成功
                         }
                         catch (Exception ex)
                         {
                             ex.ToSaveLog("OnComplete:");
                         }
                     }
                 }
             }
         }
         //摄像头视频流输出
         Dispatcher.Invoke(() => { CameraPic1.ImageView = icPass && !FacePass ? Face.FaceBitmapSource : MyMat.Bitmap; });
     }
     catch (Exception ex)
     {
         ex.ToSaveLog("Capture_ImageGrabbed:");
     }
 }
        protected override void Capture_ImageGrabbed(object sender, EventArgs e)
        {
            try
            {
                MyMat = null;
                MyMat = new Mat();
                if (MyCapture == null)
                {
                    return;
                }
                if (Cvr == null)
                {
                    "身份证硬件初始化失败".ToSaveLog("FaceIdView.Cature_ImageGrabbed:"); return;
                }
                MyCapture.Retrieve(MyMat);
                if (CvrPass && !FacePass)
                {
                    FaceOut++;
                    if (FaceOut >= FaceOutCount)
                    {
                        Cvr.Info.Number.ToSaveLog("比对超时,比对失败:");
                        PhotoErr = FaceFun.BitmapToByte(MyMat.Bitmap);

                        CvrPass = false;
                        ShowEventMsg("比对超时:当前用户与身份证对比失败", MsgType.Info);
                        return;
                    }
                    ShowEventMsg("识别中" + (FaceOutCount - FaceOut), MsgType.TipErr);
                    CameraRft = Face.FaceTz(MyMat);
                    if (Face.VerifyIr.ToInt32() == 0)
                    {
                        FaceIr = FaceFun.FaceResult(CameraRft, Rft2);
                        if (FaceIr > _confidence)
                        {
                            try
                            {
                                //保存识别到的摄像头图片
                                Cvr.Info.Number.ToSaveLog("保存检票成功照片:");
                                //  MyMat.Bitmap.Save(string.Format("{0}{1}.jpg", CamPath, Cvr.Info.Number),ImageFormat.Jpeg);
                                PhotoOk = FaceFun.BitmapToByte(MyMat.Bitmap);
                                ShowEventMsg("比对成功", MsgType.TipOk);
                                FaceIr.ToString().ToSaveLog(Cvr.Info.Number + " 比对成功,相似度:");
                                FacePass = true; //当取信值大于80%认为是同一个人比对成功
                            }
                            catch (Exception ex)
                            {
                                ex.ToSaveLog("OnComplete:");
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("Capture_ImageGrabbed:");
            }
        }
Example #6
0
 void irSeialPort_DataReceived(object sender, string e)
 {
     try
     {
         _qrInfo = OnlyQr.ReadData(e, MyMatch.Key);
         if (_qrInfo != null)
         {
             if (!_qrInfo.Value.IdNo.IsNullOrEmpty())
             {
                 BarIdNo = _qrInfo.Value.IdNo;
             }
             //黑名单检查
             if (IsCheckBlack && FaceFun.IsInBlack(BarIdNo))
             {
                 LeftImg.Visibility = Visibility.Visible;
             }
             //校验身份证是否为空
             if (IsCheckIdNo && BarIdNo.IsNullOrEmpty())
             {
                 ShowEventMsg("请录入身份证号码.", MsgType.TipErr); return;
             }
             //白名单校验
             var white = CheckWhite(_qrInfo.Value.IdNo);
             //入场校验
             var session = CheckSession(_qrInfo.Value.TicketNo, false);
             if (white && session)
             {
                 if (MyCapture != null)
                 {
                     //取得人脸识别特征码
                     "拍照获取Photo.".ToSaveLog("");
                     using (var myMap = MyCapture.QueryFrame())
                     {
                         if (myMap != null)
                         {
                             PhotoOk = FaceFun.BitmapToByte(myMap.Bitmap);
                         }
                         else
                         {
                             "未取得摄像头Mat数据".ToSaveLog("OnlyQrView.BarCode_OnKeyUp:");
                         }
                     }
                 }
                 InSession();
             }
         }
         else
         {
             ShowEventMsg("检票失败,解码未通过.", MsgType.FaceErr);
         }
     }
     catch (Exception ex)
     {
         ex.ToSaveLog("BarCode_OnKeyUp:");
     }
 }
Example #7
0
        protected override void InSession()
        {
            try
            {
                if (_qrInfo != null)
                {
                    //写入本地记录并且通知
                    var info = new SessionsInfo
                    {
                        SessionId    = MyMatch.SessionId,
                        CreateDate   = DateTime.Now,
                        Name         = MyMatch.SessionName,
                        IdNo         = BarIdNo,
                        IdCardPhoto  = null,
                        TakePhoto    = PhotoOk,
                        FaceData     = FaceFun.StructToBytes(CameraRft),
                        IdAddress    = null,
                        TicketType   = 0,
                        TicketNo     = _qrInfo.Value.TicketNo,
                        Area         = _qrInfo.Value.Area,
                        Row          = _qrInfo.Value.Row,
                        Seat         = _qrInfo.Value.Seat,
                        TelNo        = IrAdvanced.ReadString("TelNo"),
                        TelArea      = IrAdvanced.ReadString("TelArea"),
                        BuyName      = "",
                        BuyPhoto     = null,
                        BuyDate      = null,
                        ValidateType = 5,
                        SyncTime     = null,
                        Status       = 0,
                        Remark       = "",
                        UserName     = AftUserName,
                    };

                    if (FaceFun.AddSessions(info) > 0)
                    {
                        Dispatcher.Invoke(() =>
                        {
                            MyArea.Text = string.Format("区域:{0}{1}排{2}座", info.Area, info.Row, info.Seat);
                            MyNum.Text  = "票号:" + info.TicketNo;
                            MyType.Text = "类型:散票";
                            MyTime.Text = "时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                            ShowEventMsg("检票成功", MsgType.FaceOk);
                        });
                    }
                    else
                    {
                        ShowEventMsg("检票失败,数据库连接失败", MsgType.TipErr);
                    }
                }
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("InSession");
            }
        }
Example #8
0
        protected virtual void TestHardConn()
        {
            #region 2019年3月屏蔽检查模块
            ////测试闸机连接
            //OnHardConn(string.Format("闸  机连接\t{0}\n", IdCardFunc.TestDevice(IdCardFunc.BeepPort) == 0 ? "\t\t成功 √" : "失败 ×"));
            ////测试摄像头
            //OnHardConn(string.Format("摄像头连接\t{0}\n", TestCapture() ? "\t\t成功 √" : "失败 ×"));
            #endregion

            //测试本地数据库
            OnHardConn(string.Format("数据库连接\t{0}\n", FaceFun.TestMatch() > 0 ? "\t\t成功 √" : "失败 ×"));
        }
Example #9
0
 /// <summary> 白名单校验是否通过,true通过,false未通过 </summary>
 /// <param name="idNo">身份证</param>
 /// <returns>是否通过</returns>
 protected virtual bool CheckWhite(string idNo)
 {
     //检查白名单验证
     if (UseWriteList)
     {
         if (!FaceFun.IsInWhiteList(idNo))
         {
             ClearValue();
             ShowEventMsg("错误:白名单验证失败!" + idNo, MsgType.Info); return(false);
         }
     }
     return(true);
 }
Example #10
0
 /// <summary> 入场校验是否允许,true通过,false未通过 </summary>
 /// <param name="idNo">身份证</param>
 /// <param name="isIdNo">是是身份证号,否是票号</param>
 /// <returns>是否通过</returns>
 protected virtual bool CheckSession(string idNo, bool isIdNo = true)
 {
     //检查是否已经入场
     if (UseInSession)
     {
         idNo.ToSaveLog("是否已经入场校验:");
         if (FaceFun.IsInSessions(idNo, isIdNo))
         {
             ClearValue();
             return(false);
         }
     }
     return(true);
 }
 /// <summary> 获取实时摄像头视频流 </summary>
 protected virtual Bitmap GetCamBitmap()
 {
     try
     {
         lock (Obj)
         {
             var mat = MyCapture.QueryFrame();
             if (CvrPass && !FacePass)
             {
                 FaceOut++;
                 if (FaceOut >= FaceOutCount)
                 {
                     FaceOut = 0;
                     //var errPhoto = string.Format("{0}CamPhoto\\Err_{1}.jpg", FaceFun.BaseDir, Cvr.Info.Number);
                     //mat.Bitmap.Save(errPhoto, ImageFormat.Jpeg);
                     //Thread.Sleep(100);
                     return(mat.Bitmap);
                 }
                 ShowEventMsg("识别中" + (FaceOutCount - FaceOut), MsgType.TipErr);
                 CameraRft = Face.FaceTz(mat);
                 if (Face.VerifyIr.ToInt32() == 0)
                 {
                     FaceIr = FaceFun.FaceResult(CameraRft, Rft2);
                     if (FaceIr > _confidence)
                     {
                         try
                         {
                             //保存识别到的摄像头图片
                             //   mat.Bitmap.Save(string.Format("{0}CamPhoto\\{1}.jpg", FaceFun.BaseDir, Cvr.Info.Number),ImageFormat.Jpeg);
                             ShowEventMsg("比对成功", MsgType.TipOk);
                             FaceIr.ToString().ToSaveLog(Cvr.Info.Number + " 比对成功,相似度:");
                             FacePass = true; //当取信值大于80%认为是同一个人比对成功
                         }
                         catch (Exception ex)
                         {
                             ex.ToSaveLog("OnComplete:");
                         }
                     }
                 }
                 return(Face.FaceBitmapSource);
             }
             return(mat.Bitmap);
         }
     }
     catch (Exception ex)
     {
         ex.ToSaveLog("Capture_ImageGrabbed:");
     }
     return(null);
 }
        /// <summary> 写入数据库 </summary>
        protected override void InSession()
        {
            try
            {
                //写入本地记录并且通知
                var info = new SessionsInfo
                {
                    SessionId    = MyMatch.SessionId,
                    CreateDate   = DateTime.Now,
                    Name         = MyMatch.SessionName,
                    IdNo         = Cvr.Info.Number,
                    IdCardPhoto  = IrAdvanced.ReadBytesFromFile(FaceFun.BaseDir + "\\pic.bmp"),
                    TakePhoto    = PhotoOk,
                    FaceData     = FaceFun.StructToBytes(CameraRft),
                    IdAddress    = Cvr.Info.Address,
                    TicketType   = 2,
                    TicketNo     = null,
                    Area         = null,
                    Row          = null,
                    Seat         = null,
                    TelNo        = IrAdvanced.ReadString("TelNo"),
                    TelArea      = IrAdvanced.ReadString("TelArea"),
                    BuyName      = Cvr.Info.Name,
                    BuyPhoto     = null,
                    BuyDate      = null,
                    ValidateType = 1,
                    SyncTime     = null,
                    Status       = 0,
                    Remark       = "",
                    UserName     = AftUserName,
                };

                if (FaceFun.AddSessions(info) > 0)
                {
                    Dispatcher.InvokeAsync(() =>
                    {
                        MiniImg.Source = FaceFun.ByteToBitmapImage(PhotoOk);
                    });
                    base.InSession();
                }
                else
                {
                    "写入数据库失败".ToSaveLog("入场记录时:");
                }
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("InSession");
            }
        }
 protected override void Capture_ImageGrabbed(object sender, EventArgs e)
 {
     base.Capture_ImageGrabbed(sender, e);
     try
     {
         if (FaceOut >= FaceOutCount)
         {
             ShowEventMsg("对比失败", MsgType.FaceErr);
             Dispatcher.InvokeAsync(() => { MiniImg.Source = FaceFun.ByteToBitmapImage(PhotoErr); });
         }
         //摄像头视频流输出
         Dispatcher.Invoke(() => { CameraPic1.ImageView = CvrPass && !FacePass ? Face.FaceBitmapSource : MyMat.Bitmap; });
     }
     catch (Exception ex)
     {
         ex.ToSaveLog("FaceIdView.GetCamBitmap:");
     }
 }
Example #14
0
        void irSeialPort_DataReceived(object sender, string e)
        {
            try
            {
                _qrInfo = OnlyQr.ReadData(e, MyMatch.Key);
                if (_qrInfo != null)
                {
                    //白名单校验
                    var white = CheckWhite(_qrInfo.Value.IdNo);
                    //入场校验
                    var session = CheckSession(_qrInfo.Value.TicketNo, false);
                    if (white && session)
                    {
                        Dispatcher.Invoke(() =>
                        {
                            MyArea.Text = string.Format("区域:{0}{1}排{2}座", _qrInfo.Value.Area, _qrInfo.Value.Row, _qrInfo.Value.Seat);
                            MyNum.Text  = "票号:" + _qrInfo.Value.TicketNo;
                            MyType.Text = "类型:散票";
                            MyTime.Text = "时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        });

                        //取得人脸识别特征码
                        Mat myMap = MyCapture.QueryFrame();
                        if (myMap != null)
                        {
                            PhotoOk = FaceFun.BitmapToByte(myMap.Bitmap);
                        }
                        else
                        {
                            "未取得摄像头Mat数据".ToSaveLog("OnlyQrView.BarCode_OnKeyUp:");
                        }
                    }
                }
                else
                {
                    ShowEventMsg("检票失败,解码未通过.", MsgType.FaceErr);
                }
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("BarCode_OnKeyUp:");
            }
        }
        protected override void ShowEventMsg(string strMsg, MsgType type)
        {
            base.ShowEventMsg(strMsg, type);
            Dispatcher.InvokeAsync(() =>
            {
                switch (type)
                {
                case MsgType.TipErr:
                    Tip1.Text       = strMsg;
                    Tip1.Foreground = Brushes.Red;
                    break;

                case MsgType.Info:
                    Tip2.Text       = strMsg;
                    Tip2.Foreground = Brushes.GreenYellow;
                    break;

                case MsgType.InfoErr:
                    Tip2.Text       = strMsg;
                    Tip2.Foreground = Brushes.Red;
                    break;

                case MsgType.TipOk:
                    Tip1.Text       = strMsg;
                    Tip1.Foreground = Brushes.White;
                    Tip2.Text       = "请将身份证放置刷卡感应区域!";
                    MiniImg.Source  = FaceFun.ByteToBitmapImage(PhotoOk);
                    break;

                case MsgType.FaceOk:
                    Tip1.Text       = strMsg;
                    Tip1.Foreground = Brushes.White;
                    icPass          = false;
                    HideShow(2);
                    break;

                case MsgType.FaceErr:
                    Tip1.Text       = strMsg;
                    Tip1.Foreground = Brushes.Red;
                    break;
                }
            });
        }
Example #16
0
        /// <summary> 写入本地记录并且通知 </summary>
        protected override void InSession()
        {
            //写入本地记录并且通知
            var info = new SessionsInfo
            {
                SessionId    = MyMatch.SessionId,
                CreateDate   = DateTime.Now,
                Name         = MyMatch.SessionName,
                IdNo         = Cvr.Info.Number,
                IdCardPhoto  = IrAdvanced.ReadBytesFromFile(FaceFun.BaseDir + "\\pic.bmp"),
                TakePhoto    = PhotoOk,
                FaceData     = FaceFun.StructToBytes(CameraRft),
                IdAddress    = Cvr.Info.Address,
                TicketType   = 0,
                TicketNo     = _qrInfo.Value.TicketNo,
                Area         = _qrInfo.Value.Area,
                Row          = _qrInfo.Value.Row,
                Seat         = _qrInfo.Value.Seat,
                TelNo        = IrAdvanced.ReadString("TelNo"),
                TelArea      = IrAdvanced.ReadString("TelArea"),
                BuyName      = Cvr.Info.Name,
                BuyPhoto     = null,
                BuyDate      = null,
                ValidateType = 3,
                SyncTime     = null,
                Status       = 0,
                Remark       = "",
                UserName     = AftUserName,
            };

            if (FaceFun.AddSessions(info) > 0)
            {
                ShowEventMsg("检票成功", MsgType.FaceOk);
            }
            else
            {
                "写入数据库失败".ToSaveLog("入场记录时:");
                ShowEventMsg("检票失败", MsgType.FaceErr);
            }
        }
Example #17
0
        /// <summary> 写入数据库 </summary>
        protected override void InSession()
        {
            try
            {
                //写入本地记录并且通知
                var info = new SessionsInfo
                {
                    SessionId    = MyMatch.SessionId,
                    CreateDate   = DateTime.Now,
                    Name         = MyMatch.SessionName,
                    IdNo         = Cvr.Info.Number,
                    IdCardPhoto  = IrAdvanced.ReadBytesFromFile(FaceFun.BaseDir + "\\pic.bmp"),
                    TakePhoto    = PhotoOk,
                    FaceData     = FaceFun.StructToBytes(CameraRft),
                    IdAddress    = Cvr.Info.Address,
                    TicketType   = 2,
                    TicketNo     = null,
                    Area         = null,
                    Row          = null,
                    Seat         = null,
                    TelNo        = IrAdvanced.ReadString("TelNo"),
                    TelArea      = IrAdvanced.ReadString("TelArea"),
                    BuyName      = Cvr.Info.Name,
                    BuyPhoto     = null,
                    BuyDate      = null,
                    ValidateType = 1,
                    SyncTime     = null,
                    Status       = 0,
                    Remark       = "",
                    UserName     = AftUserName,
                };

                AFT_System.Face.FaceFun.AddSessions(info);
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("InSession");
            }
        }
Example #18
0
        //显示通知
        protected virtual void ShowEventMsg(string strMsg, MsgType type)
        {
            switch (type)
            {
            case MsgType.FaceOk:
                ClearValue();
                if (IsAudio)
                {
                    Dispatcher.InvokeAsync(() => FaceFun.PlayMp3("sound\\检票成功.mp3"));
                }
                IdCardFunc.Beep();
                break;

            case MsgType.FaceErr:
                HideShow(2);
                ClearValue();
                if (IsAudio)
                {
                    Dispatcher.InvokeAsync(() => FaceFun.PlayMp3("sound\\检票失败.mp3"));
                }
                break;
            }
        }
 //二代身份证识别触发
 protected virtual void Cvr_GetNewDataEvent(object sender, CvrInfo e)
 {
     if (e.Number.IsNullOrEmpty())
     {
         return;
     }
     //当识别到新身份证,清空之前认证结果
     e.Number.ToSaveLog("新的身份证信息被发现:");
     ClearValue();
     try
     {
         if (CheckRule(e.Number))
         {
             //当识别到新身份证,清空之前认证结果
             var item = IrAdvanced.GetBitmapFromFile(e.PeopleImg);
             if (item != null)
             {
                 FaceFun.TimeStart();
                 Rft2 = Face.FaceTz(item);
                 if (Face.TzIr.ToInt32() == 0)
                 {
                     CvrPass = true;
                 }
                 else
                 {
                     "身份证照片人脸检测失败".ToSaveLog("Cvr_GetNewDataEvent");
                 }
                 FaceFun.TimeStop("读取身份证人脸数据耗时:");
             }
         }
     }
     catch (Exception ex)
     {
         ex.ToSaveLog("BaseFaceView:");
     }
 }
Example #20
0
        private void FaceCompare()
        {
            Dispatcher.InvokeAsync(() =>
            {
                ShowEventMsg("识别中", MsgType.TipErr);
                this.MyName.Text = "购票者:";
                this.MyTime.Text = "检票时间:";
                CvrImg.Source    = null;
            });
            try
            {
                "开始识别".ToSaveLog("FaceVerify");
                FaceVerifyData faceVerifyData = faceFactory.FaceVerify(MyMat);

                "识别完成".ToSaveLog("FaceVerify");
                if (faceVerifyData.Success)
                {
                    DateTime checkTime = DateTime.Now;
                    foreach (WhiteNameInfo item in AFT_System.Face.FaceFun.WhiteList)
                    {
                        FaceIr = faceFactory.FaceResult(faceVerifyData.rr_Feature, item.rrfeature);
                        if (FaceIr > _confidence)
                        {
                            if (AFT_System.Face.FaceFun.IsInSessions(item.IdNo, MyMatch.SessionId, out checkTime))
                            {
                                Dispatcher.InvokeAsync(() =>
                                {
                                    CvrImg.Source    = null;
                                    CvrImg.Source    = new BitmapImage(new Uri(item.IdCardPhotoPath, UriKind.Absolute));
                                    this.MyName.Text = "购票者:" + item.BuyName;
                                    this.MyTime.Text = "检票时间:" + checkTime.ToString("yyyy-MM-dd hh:mm");
                                    ShowEventMsg("该人员已检票", MsgType.TipErr);
                                });
                            }
                            else
                            {
                                Dispatcher.InvokeAsync(() =>
                                {
                                    CvrImg.Source = null;
                                    CvrImg.Source = new BitmapImage(new Uri(item.IdCardPhotoPath, UriKind.Absolute));

                                    //CameraPic2.ImageView2 = null;
                                    //CameraPic2.ImageView2 = Face.FaceBitmapSource;


                                    //保存识别到的摄像头图片
                                    item.IdNo.ToSaveLog("保存检票成功照片:");
                                    PhotoOk = FaceFun.BitmapToByte(MyMat.Bitmap);
                                    ShowEventMsg("比对成功", MsgType.FaceOk);
                                    FaceIr.ToString().ToSaveLog(item.IdNo + " 比对成功,相似度:");
                                    if (Cvr != null)
                                    {
                                        Cvr.Info = new CvrInfo()
                                        {
                                            Name      = item.BuyName,
                                            Number    = item.IdNo,
                                            PeopleImg = item.IdCardPhotoPath
                                        };
                                        this.MyName.Text = "购票者:" + item.BuyName;
                                        this.MyTime.Text = "检票时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm");
                                        InSession();
                                    }
                                });
                            }
                            FacePass   = true; //当取信值大于80%认为是同一个人比对成功
                            sucessTime = DateTime.Now;
                            break;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
                ex.ToSaveLog("OnComplete:");
            }
            Compareing = false;
        }
        /// <summary> 读写IC卡 </summary>
        private int CheckICard()
        {
            try
            {
                "准备请求读卡".ToSaveLog("CheckIcard:");
                FaceFun.TimeStart();
                var icInfo = new IdCardFunc.TicketCardInfo();
                int i      = IdCardFunc.GetTicketData_New(ref icInfo);
                if (i == 0)
                {
                    tempTime = DateTime.Now;
                    icInfo.IDCard.ToSaveLog("读取到IC卡:");
                    //判断是否超过时限
                    if (!icInfo.IDCard.IsNullOrEmpty())
                    {
                        Dispatcher.Invoke(() => MyIdNo.Text = icInfo.IDCard);
                    }
                    var flag = true;
                    Dispatcher.Invoke(() =>
                    { //黑名单检查
                        if (IsCheckBlack && FaceFun.IsInBlack(MyIdNo.Text))
                        {
                            LeftImg.Visibility = Visibility.Visible;
                        }
                        if (IsCheckIdNo && MyIdNo.Text.IsNullOrEmpty())
                        {
                            flag = false;
                        }
                    });
                    if (!flag)
                    {
                        ShowEventMsg("请录入身份证号码.", MsgType.TipErr); return(1);
                    }
                    //检查白名单验证
                    if (!CheckWhite(icInfo.IDCard))
                    {
                        return(1);
                    }
                    PhotoOk = null;
                    lock (Obj)
                    {
                        if (MyCapture != null)
                        {
                            "拍照获取Photo.".ToSaveLog("");
                            using (var myMap = MyCapture.QueryFrame())
                            {
                                if (myMap != null)
                                {
                                    PhotoOk = FaceFun.BitmapToByte(myMap.Bitmap);
                                }
                                else
                                {
                                    "未取得摄像头Mat数据".ToSaveLog("OnlyQrView.BarCode_OnKeyUp:");
                                }
                            }
                        }
                    }
                    //写入本地记录并且通知
                    var info = new SessionsInfo
                    {
                        SessionId    = MyMatch.SessionId,
                        CreateDate   = DateTime.Now,
                        Name         = MyMatch.SessionName,
                        IdNo         = icInfo.IDCard,
                        IdCardPhoto  = null,
                        TakePhoto    = PhotoOk,
                        FaceData     = null,
                        IdAddress    = "",
                        TicketType   = 1,
                        TicketNo     = icInfo.CardNo,
                        Area         = icInfo.StadiumArea,
                        Row          = icInfo.Row,
                        Seat         = icInfo.Position,
                        TelNo        = IrAdvanced.ReadString("TelNo"),
                        TelArea      = IrAdvanced.ReadString("TelArea"),
                        BuyName      = icInfo.Name,
                        BuyPhoto     = null,
                        BuyDate      = null,
                        ValidateType = 4,
                        SyncTime     = null,
                        Status       = 0,
                        Remark       = "",
                        UserName     = AftUserName,
                    };
                    if (FaceFun.AddSessions(info) > 0)
                    {
                        Dispatcher.Invoke(() =>
                        {
                            MyArea.Text = string.Format("区域:{0}区{1}排{2}座", info.Area, info.Row, info.Seat);
                            MyNum.Text  = "票号:" + info.TicketNo;
                            MyType.Text = "类型:年票";
                            MyTime.Text = "时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        });
                        ShowEventMsg("检票成功", MsgType.FaceOk);
                        Thread.Sleep(500);
                    }

                    FaceFun.TimeStop("IC读写耗时:");
                }
                else if (i == 16)
                {
                    i.ToString().ToSaveLog("已刷卡:");
                    var str = (tempTime == null) ? "拒绝入场" : string.Format("{0}入场", tempTime);
                    ShowEventMsg("一天只能入场一次!\n" + str, MsgType.FaceErr);
                    Thread.Sleep(500);
                }
                else if (i == 1)    //未放卡
                {
                    tempTime = null;
                }
                else
                {
                    i.ToString().ToSaveLog("IC卡读卡失败:");
                    Thread.Sleep(300);
                }

                icPass = false;
                return(i);
            }
            catch (Exception ex)
            {
                ex.ToSaveLog("CheckICard失败:");
            }
            icPass = false;
            return(0);
        }
Example #22
0
 private void searchData(object sessionid)
 {
     FaceFun.GetWhiteName((int)sessionid);
 }
        /// <summary> 读写IC卡 </summary>
        private int CheckICard()
        {
            FaceFun.TimeStart();
            var icInfo = new IdCardFunc.TicketCardInfo();
            int i      = IdCardFunc.GetTicketData_New(ref icInfo);

            if (i == 0)
            {
                if (IsIdSame && (Cvr.Info.Number != icInfo.IDCard))
                {
                    ShowEventMsg("身份证号码与票面不符合!", MsgType.Info);
                }
                else
                {
                    tempTime = DateTime.Now;
                    //检查白名单验证
                    if (!CheckWhite(icInfo.IDCard))
                    {
                        return(1);
                    }
                    //写入本地记录并且通知
                    var info = new SessionsInfo
                    {
                        SessionId    = MyMatch.SessionId,
                        CreateDate   = DateTime.Now,
                        Name         = MyMatch.SessionName,
                        IdNo         = icInfo.IDCard,
                        IdCardPhoto  = IrAdvanced.ReadBytesFromFile(FaceFun.BaseDir + "\\pic.bmp"),
                        TakePhoto    = PhotoOk,
                        FaceData     = FaceFun.StructToBytes(CameraRft),
                        IdAddress    = "",
                        TicketType   = 1,
                        TicketNo     = icInfo.CardNo,
                        Area         = icInfo.StadiumArea,
                        Row          = icInfo.Row,
                        Seat         = icInfo.Position,
                        TelNo        = IrAdvanced.ReadString("TelNo"),
                        TelArea      = IrAdvanced.ReadString("TelArea"),
                        BuyName      = icInfo.Name,
                        BuyPhoto     = null,
                        BuyDate      = null,
                        ValidateType = 2,
                        SyncTime     = null,
                        Status       = 0,
                        Remark       = "",
                        UserName     = AftUserName,
                    };
                    if (FaceFun.AddSessions(info) > 0)
                    {
                        Dispatcher.InvokeAsync(() =>
                        {
                            ShowEventMsg("检票成功", MsgType.FaceOk);
                            MyArea.Text = string.Format("区域:{0}{1}排{2}座", info.Area, info.Row, info.Seat);
                            MyNum.Text  = "票号:" + info.TicketNo;
                            MyType.Text = "类型:年票";
                            MyTime.Text = "时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        });
                    }
                }
            }
            else if (i == 16)
            {
                i.ToString().ToSaveLog("已刷卡:");
                var str = (tempTime == null) ? "拒绝入场" : string.Format("{0}入场", tempTime);
                ShowEventMsg("一天只能入场一次!\n" + str, MsgType.InfoErr);
                ShowEventMsg("检票失败", MsgType.FaceErr);
                Thread.Sleep(500);
            }
            else if (i == 1)    //未放卡
            {
                tempTime = null;
            }
            else
            {
                i.ToString().ToSaveLog("IC卡读卡失败:");
                Thread.Sleep(300);
            }
            FaceFun.TimeStop("IC读写耗时:");
            return(i);
        }
        /// <summary> 读写IC卡 </summary>
        private int CheckICard()
        {
            FaceFun.TimeStart();
            var icInfo = new IdCardFunc.TicketCardInfo();
            int i      = IdCardFunc.GetTicketData_New(ref icInfo);

            if (i == 0)
            {
                if (icInfo.IDCard.IsNullOrEmpty())
                {
                    "读卡成功,但身份证号码为空.".ToSaveLog(); return(1);
                }
                //黑名单检查
                if (IsCheckBlack && FaceFun.IsInBlack(icInfo.IDCard))
                {
                    LeftImg.Visibility = Visibility.Visible;
                }
                //判断是否超过时限
                var now  = DateTime.Now;
                var time = IrAdvanced.StringToDateTime(icInfo.Reserved2);
                if ((time.Year <= now.Year && time.Month <= now.Month && time.Day < now.Day))
                {
                    //读取数据库白名单记录
                    white = FaceFun.CheckWhiteName(icInfo.IDCard);
                    if (white != null)
                    {
                        Bitmap photobitmap = IrAdvanced.GetBitmapFormByte(white.Value.IdCardPhoto);
                        Dispatcher.Invoke(() =>
                        {
                            BitmapImage photoImg = IrAdvanced.GetBitmapImageFormByte(white.Value.IdCardPhoto);
                            CvrImgMain.Source    = CvrImg.Source = photoImg;
                        });
                        Rft2 = Face.FaceTz(photobitmap);
                        if (Face.TzIr.ToInt32() == 0)
                        {
                            icPass = true;
                            ShowEventMsg("正在进行人脸识别", MsgType.Info);
                        }
                        else
                        {
                            ShowEventMsg("无法识别该照片人脸特征码", MsgType.InfoErr);
                        }
                    }
                    else
                    {
                        ShowEventMsg("白名单不存在此年票记录.", MsgType.InfoErr);
                    }
                }
                else
                {
                    Dispatcher.InvokeAsync(() =>
                    {
                        ShowEventMsg(string.Format("一天只能入场一次!\n{0}已使用", icInfo.Reserved2), MsgType.InfoErr);
                        MyArea.Text = string.Format("区域:{0}区{1}排{2}座", icInfo.StadiumArea, icInfo.Row, icInfo.Position);
                        MyNum.Text  = "票号:" + icInfo.CardNo;
                        MyType.Text = "类型:年票";
                        MyTime.Text = "时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss");
                        ShowEventMsg("检票失败", MsgType.FaceErr);
                    });
                }
            }
            FaceFun.TimeStop("IC读写耗时:");
            return(i);
        }