Beispiel #1
0
        private async void scaning_Interval_Tick(object sender, EventArgs e)
        {
            numberBefore++;
            lblBefore.Text = numberBefore.ToString();
            //taking frame from picturebox pbCamera
            Bitmap frame        = pbCamera.Image.Clone() as Bitmap;
            bool   savingActive = false;

            //convert frame to grayscale maybe...
            //readQR returns null if user with given qr code does not exist
            if (frame != null)
            {
                if (act == action.idle || act == action.qr_recognition)
                {
                    act            = action.qr_recognition;
                    lblAction.Text = act.ToString();
                    user           = await readQR(frame, apiService_AuthUser);

                    if (user == null)
                    {
                        return;
                    }
                    else
                    {
                        act              = action.face_recognition;
                        lblAction.Text   = act.ToString();
                        lblLastUser.Text = user.FirstName + " " + user.LastName;
                        ticks           += 1;
                        lblTicks.Text    = ticks.ToString();
                        scaning_Interval.Dispose();
                        scaning_Interval.Stop();

                        if (act == action.face_recognition)
                        {
                            await trainRecognizer(user.Id);

                            var search = new Model.SearchRequest.PresenceSearchRequest()
                            {
                                EventId = (int)eventId, UserId = user.Id
                            };
                            var presenceList = await apiService_Presence.Get <List <Model.Presence> >(search);

                            presence = presenceList[0];
                            face_recognition.Start();
                        }
                        //scaning_Interval.Container.Dispose();
                        //act = action.face_detection;
                        //lblAction.Text = act.ToString();
                        //scaning_Interval.Dispose();
                        //face_recognition.Start();
                    }
                    numberAfter++;
                    lblAfter.Text = numberAfter.ToString();
                }
            }
        }
Beispiel #2
0
        private async void face_recognition_Tick(object sender, EventArgs e)
        {
            Bitmap frame = pbCamera.Image.Clone() as Bitmap;

            Image <Gray, Byte> frameGray = new Image <Gray, Byte>(frame);
            //detecting face
            var rect = detectFace(frameGray);

            //face not found
            if (rect == null)
            {
                return;
            }
            else
            {
                //face found
                var userImage = cutImage(frameGray, (Rectangle)rect);
                //replacing pbImage
                var bitmapUserImage = userImage.Bitmap;
                pbUser.Image = bitmapUserImage;
                //scaling image to 100x100 so face can be recognized
                Image <Gray, byte> result = userImage.Copy().Convert <Gray, byte>().Resize(100, 100, Emgu.CV.CvEnum.Inter.Cubic);
                //predicting user based on picture...
                var predictResult = FaceRecognition.Predict(result.Mat);
                var id            = (int)predictResult.Label;
                if ((int)id > 0)
                {
                    FaceRecognitionTicks      = 0;
                    FaceRecognitionTotalTicks = 0;
                    act            = action.idle;
                    lblAction.Text = act.ToString();
                    face_recognition.Dispose();


                    var presenceInsertRequest = new PresenceInsertRequest()
                    {
                        AttendedWholeEvent = true,
                        EventId            = Event.Id,
                        UserId             = user.Id,
                        Image = ImageToByte2(result.Bitmap),
                        Notes = "",
                        PresenceAttendingDateTime = DateTime.Now,
                        PresenceCreatingDateTime  = presence.PresenceCreatingDateTime,
                        PresenceLeavingDateTime   = null,
                        FaceDetected   = true,
                        FaceRecognized = true
                    };
                    await apiService_Presence.Update <Model.Presence>(presence.Id, presenceInsertRequest);
                }
                else
                {
                    FaceRecognitionTicks += 1;
                    if (FaceRecognitionTicks >= 10)
                    {
                        //save user to prisustvo...
                        FaceRecognitionTicks      = 0;
                        FaceRecognitionTotalTicks = 0;
                        act            = action.idle;
                        lblAction.Text = act.ToString();
                        face_recognition.Dispose();
                        face_recognition.Stop();
                        var presenceInsertRequest = new PresenceInsertRequest()
                        {
                            AttendedWholeEvent = true,
                            EventId            = Event.Id,
                            UserId             = user.Id,
                            Image = ImageToByte2(result.Bitmap),
                            Notes = "",
                            PresenceAttendingDateTime = DateTime.Now,
                            PresenceCreatingDateTime  = presence.PresenceCreatingDateTime,
                            PresenceLeavingDateTime   = null,
                            FaceDetected   = true,
                            FaceRecognized = false
                        };
                        await apiService_Presence.Update <Model.Presence>(presence.Id, presenceInsertRequest);
                    }
                }
            }
            FaceRecognitionTotalTicks += 1;
            if (FaceRecognitionTotalTicks >= 20)
            {
                FaceRecognitionTicks      = 0;
                FaceRecognitionTotalTicks = 0;
                act            = action.idle;
                lblAction.Text = act.ToString();
                face_recognition.Dispose();

                var presenceInsertRequest = new PresenceInsertRequest()
                {
                    AttendedWholeEvent = null,
                    EventId            = Event.Id,
                    UserId             = user.Id,
                    Image = null,
                    Notes = "",
                    PresenceAttendingDateTime = DateTime.Now,
                    PresenceCreatingDateTime  = presence.PresenceCreatingDateTime,
                    PresenceLeavingDateTime   = null,
                    FaceDetected   = false,
                    FaceRecognized = false
                };
                await apiService_Presence.Update <Model.Presence>(presence.Id, presenceInsertRequest);
            }
        }