Example #1
0
        public async Task <ReportToTeacherByScheduleIdResponse> ReportToTeacherByScheduleId(ReportToTeacherByScheduleIdRequest request)
        {
            int scheduleId       = Convert.ToInt32(request.ScheduleId);
            var reportedSchedule = _context.Schedules
                                   .Where(s => s.ScheduleId == scheduleId)
                                   .FirstOrDefault();

            if (reportedSchedule != null)
            {
                // Change attendance report status to Reported
                reportedSchedule.ReportStatus = "Reported";
                _context.SaveChanges();

                FirebaseNotificationModel firebaseNotiModel = new FirebaseNotificationModel()
                {
                    To           = "/topics/teacher_" + reportedSchedule.TeacherId,
                    Notification = new NotificationModel()
                    {
                        Title = "Attendance Report Date " + reportedSchedule.Date,
                        Body  = "Student with ID " + reportedSchedule.StudentId + " has reported attendance on slot " + reportedSchedule.SlotId
                    }
                };

                // Send notification to the responsible teacher and return response
                return(await FirebaseNotificationPusher.Send(firebaseNotiModel));
            }

            return(null);
        }
        public void SaveNewDetectedFace(string name, Image <Gray, byte> detectedFace)
        {
            using (var context = new FaceRecognitionContext())
            {
                byte[] pixelData;
                using (var ms = new MemoryStream())
                {
                    detectedFace.Bitmap.Save(ms, ImageFormat.Bmp);
                    pixelData = ms.ToArray();
                }

                var recognizedFace = new RecognizedFace
                {
                    Height    = detectedFace.Height,
                    Width     = detectedFace.Width,
                    PixelData = pixelData
                };
                var user = new User
                {
                    Face     = recognizedFace,
                    NickName = name
                };

                context.Users.Add(user);
                context.SaveChanges();
            }
        }
Example #3
0
 public void Add(ImageLabel image)
 {
     using (var context = new FaceRecognitionContext())
     {
         context.ImageLabels.Add(image);
         context.SaveChanges();
     }
 }
Example #4
0
 public void Add(IEnumerable <ImageLabel> images)
 {
     using (var context = new FaceRecognitionContext())
     {
         context.ImageLabels.AddRange(images);
         context.SaveChanges();
     }
 }
Example #5
0
 public void SetLabel(int imageLabelId, string label)
 {
     using (var context = new FaceRecognitionContext())
     {
         var imageLabelToSetLabel = context.ImageLabels.FirstOrDefault(e => e.ImageLabelId == imageLabelId);
         if (imageLabelToSetLabel != null)
         {
             imageLabelToSetLabel.Label = label;
             context.SaveChanges();
         }
     }
 }
Example #6
0
 public void Delete(int id)
 {
     using (var context = new FaceRecognitionContext())
     {
         var imageLabelToDelete = context.ImageLabels.FirstOrDefault(e => e.ImageLabelId == id);
         if (imageLabelToDelete != null)
         {
             context.ImageLabels.Remove(imageLabelToDelete);
             context.SaveChanges();
         }
     }
 }
        public async Task <TakeAttendanceByImageResponse> TakeAttendanceByImage(TakeAttendanceByImageRequest request)
        {
            TakeAttendanceByImageResponse response = new TakeAttendanceByImageResponse();
            var rootImages        = new List <RootImage>();
            var locationImagePath = Path.Combine(HttpRuntime.AppDomainAppPath, Constants.Config.AttendanceImagePath, request.Date.ToString("yyyyMMdd"), request.ClassId, request.SlotId.ToString());

            ImageConverter.CreateDirectory(locationImagePath);
            int numberOfImage = 1;
            await Task.Run(async() =>
            {
                foreach (var imageUrl in request.ImageUrls)
                {
                    var image = await GetImages(imageUrl);
                    rootImages.Add(image);
                    //save image to folder
                    ImageConverter.Base64ToImage(Path.Combine(locationImagePath, numberOfImage + ".jpg"), imageUrl);
                    numberOfImage++;
                }
            });

            var listCandidateId = new List <string>();

            try
            {
                foreach (var rootImage in rootImages)
                {
                    foreach (var image in rootImage.Images)
                    {
                        if (image.Candidates != null && image.Transaction.Status.Equals(Constants.KairosApi.TransactionSuccess))
                        {
                            var firstCandidate = image.Candidates.OrderByDescending(c => c.Confidence).First();
                            listCandidateId.Add(firstCandidate.SubjectId);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            listCandidateId = listCandidateId.Distinct().ToList();
            var studentList = (from sd in _context.Schedules
                               where sd.TeacherId == request.UserId &&
                               sd.Date == request.Date &&
                               sd.SlotId == request.SlotId
                               select sd).ToList();
            List <StudentAttendance> students = new List <StudentAttendance>();

            foreach (var student in studentList)
            {
                if (listCandidateId.Any(x => x.Equals(student.StudentId)))
                {
                    student.AttendanceStatus = Constants.AttendanceStatus.Presented;
                }
                else
                {
                    student.AttendanceStatus = Constants.AttendanceStatus.Absent;
                }
                var studentAttendance = (from st in _context.Students
                                         where st.StudentId == student.StudentId
                                         select new StudentAttendance()
                {
                    StudentId = st.StudentId,
                    FullName = st.FullName,
                    Email = st.Email,
                    AttendanceStatus = student.AttendanceStatus
                }).First();
                students.Add(studentAttendance);
            }
            _context.SaveChanges();
            response.Students = students;
            return(response);
        }