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(); } } }
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); } }