private static FaceRecognizer CreateRollCallRecognizer(int RollCallID)
        {
            //Tu rollcall ID, tao face recognizer, train
            //FaceRecognizer FaceRec = new LBPHFaceRecognizer(1, 8, 8, 8, 75);
            FaceRecognizer FaceRec = new FisherFaceRecognizer(80, RECOGNIZER_THREEHOLD);

            List <int> StudentIDs = new List <int>();
            List <Image <Gray, byte> > StudentImages = new List <Image <Gray, byte> >();

            RollCallBusiness RollBO = new RollCallBusiness();
            //Load danh sach student cua roll call
            RollCall RollCall = RollBO.GetRollCallByID(RollCallID);

            foreach (var Student in RollCall.Students)
            {
                foreach (var Image in Student.StudentImages)
                {
                    //Load ID va anh de train cho bo recognizer
                    StudentIDs.Add(Image.StudentID);
                    String             TrainingImagePath = TRAINING_FOLDER_PATH + "/" + Image.ImageLink;
                    Image <Gray, byte> TrainingImage     = new Image <Gray, byte>(TrainingImagePath);

                    TrainingImage._EqualizeHist();
                    StudentImages.Add(TrainingImage);
                }
            }

            FaceRec.Train(StudentImages.ToArray(), StudentIDs.ToArray());

            return(FaceRec);
        }
        public ActionResult GetCurrentRollCalls(int InstructorID)
        {
            //Nhung mon ma instructor nay dang day, sau nay phai check status, instructor teaching phai them ngay thang
            RollCallBusiness RollBO = new RollCallBusiness();

            var RollCalls = RollBO.GetInstructorCurrentRollCalls(InstructorID);
            //Mon dang day vao thoi diem dang nhap
            RollCall CurrentRollCall = null;
            TimeSpan CurrentTime     = DateTime.Now.TimeOfDay;

            if (RollCalls.Count() > 0)
            {
                CurrentRollCall = RollCalls.FirstOrDefault(r => r.StartTime <= CurrentTime && r.EndTime >= CurrentTime);
            }

            var RollCallJson = RollCalls.ToList().Select(r => new
            {
                rollID  = r.RollCallID,
                subject = r.Subject.FullName,
                classes = r.Class.ClassName,
                time    = r.StartTime.Equals(new TimeSpan(0, 0, 0)) ?
                          "No Slot" : r.StartTime.ToString(@"hh\:mm") + " - " + r.EndTime.ToString(@"hh\:mm"),
                date           = r.BeginDate.ToString("dd-MM-yyyy") + " to " + r.EndDate.ToString("dd-MM-yyyy"),
                isCurrent      = CurrentRollCall != null && CurrentRollCall == r ? true : false,
                attendanceDate = r.AttendanceDate().ToString("MM-dd-yyyy")
            });

            return(Json(RollCallJson, JsonRequestBehavior.AllowGet));
        }
        public ActionResult GetRollCallInfo(int RollCallID)
        {
            RollCallBusiness RollBO   = new RollCallBusiness();
            RollCall         rollcall = RollBO.GetRollCallByID(RollCallID);

            AttendanceBusiness AttenBO = new AttendanceBusiness();
            var AttendLog = AttenBO.GetRollCallAttendanceLog(RollCallID);

            var ReturnLog = AttendLog.Where(log => log.LogDate >= DateTime.Today.AddDays(-1)).ToList();//.OrderByDescending(log => log.LogDate);

            //Truong hop hom nay la thu 2
            if (DateTime.Today.DayOfWeek == DayOfWeek.Monday)
            {
                //Tim log thu 6 hoac thu 7
                DateTime LastSaturday    = DateTime.Today.AddDays(-2);
                var      LastSaturdayLog = AttendLog.FirstOrDefault(log => log.LogDate == LastSaturday);
                if (LastSaturdayLog != null)
                {
                    ReturnLog.Add(LastSaturdayLog);
                }
                else
                {
                    DateTime LastFriday    = DateTime.Today.AddDays(-3);
                    var      LastFridayLog = AttendLog.FirstOrDefault(log => log.LogDate == LastFriday);
                    if (LastFridayLog != null)
                    {
                        ReturnLog.Add(LastFridayLog);
                    }
                }
            }

            var RollJson = new
            {
                rollID  = rollcall.RollCallID,
                subject = rollcall.Subject.FullName,
                classes = rollcall.Class.ClassName,
                time    = rollcall.StartTime.ToString(@"hh\:mm") + " - " + rollcall.EndTime.ToString(@"hh\:mm"),
                date    = rollcall.BeginDate.ToString("dd-MM-yyyy") + " to " + rollcall.EndDate.ToString("dd-MM-yyyy"),

                studentList = rollcall.Students.Select(st => new
                {
                    studentID   = st.StudentID,
                    studentCode = st.StudentCode,
                    studentName = st.FullName,
                    percentRate = String.Format("{0:0.00}%", AttenBO.GetStudentAbsentRate(st.StudentID, RollCallID))
                }),
                logList = ReturnLog.OrderByDescending(log => log.LogDate).Select(log => new
                {
                    rollID     = log.RollCallID,
                    logID      = log.LogID,
                    logDate    = log.LogDate.ToString("dd-MM-yyyy"),
                    logPresent = log.StudentAttendances.Count(attend => attend.IsPresent) + "/" + log.RollCall.Students.Count,
                }),
            };

            return(Json(RollJson, JsonRequestBehavior.AllowGet));
        }
        public ActionResult RollCallStudentLists(List <int> RollCallIDs)
        {
            String FileName = "RollCallStudentList" + "_" + DateTime.Today.ToString("dd-MM-yyyy") + ".xlsx";

            RollCallBusiness BO       = new RollCallBusiness();
            String           FilePath = Server.MapPath("~/Content/Temp/" + FileName);

            BO.CreateStudentLists(RollCallIDs, FilePath);

            return(File(FilePath, ExcelMimeType, FileName));
        }
示例#5
0
        public StudentController()
        {
            RSMEntities db = new RSMEntities();

            slFactory = new SelectListFactory(db);
            ClassBO   = new ClassBusiness(db);
            StuBO     = new StudentBusiness(db);
            AccBO     = new AccountBusiness(db);
            RollBO    = new RollCallBusiness(db);
            ReBO      = new RequestBusiness(db);
        }
        public RollCallController()
        {
            RSMEntities DB = new RSMEntities();

            RollBO    = new RollCallBusiness(DB);
            SlFactory = new SelectListFactory(DB);
            ClaBO     = new ClassBusiness(DB);
            SubBO     = new SubjectBusiness(DB);
            StuBO     = new StudentBusiness(DB);
            InsBO     = new InstructorBusiness(DB);
            SeBO      = new SemesterBusiness(DB);
            MjBO      = new MajorBusiness(DB);
        }
        public ActionResult RollCall(int id)
        {
            RollCall RollCall = db.RollCalls.First(r => r.RollCallID == id);
            String   FileName = RollCall.Class.ClassName.Trim() + "_" + RollCall.Subject.ShortName
                                + "_" + DateTime.Today.ToString("dd-MM-yyyy") + ".xlsx";

            RollCallBusiness BO       = new RollCallBusiness();
            String           FilePath = Server.MapPath("~/Content/Temp/" + FileName);

            BO.CreateRollCallReport(id, FilePath);

            return(File(FilePath, ExcelMimeType, FileName));
        }
        public ActionResult CheckAttendanceAuto(int RollCallID, List <HttpPostedFileBase> ImageFiles, DateTime?AttendanceDate)
        {
            RollCallBusiness RollBO  = new RollCallBusiness();
            var           rollCall   = RollBO.GetRollCallByID(RollCallID);
            List <String> ImagePaths = new List <string>();

            foreach (HttpPostedFileBase file in ImageFiles)
            {
                //Save file anh xuong
                String OldPath = Server.MapPath("~/Content/Temp/" + file.FileName);
                file.SaveAs(OldPath);

                //Resize file anh, luu vao thu muc log, nho them ngay thang truoc
                String NewPath = Server.MapPath("~/Content/Log/"
                                                + rollCall.Class.ClassName + "_"
                                                + rollCall.Subject.ShortName + "_"
                                                + file.FileName);
                FaceBusiness.ResizeImage(OldPath, NewPath);
                ImagePaths.Add(NewPath);

                //Nhan dien tung khuon mat trong anh
            }

            List <RecognizerResult> Results = FaceBusiness.RecognizeStudentForAttendance(RollCallID, ImagePaths);
            //Dua result nay cho AttendanceBO xu ly
            AttendanceBusiness AttenBO = new AttendanceBusiness();
            AttendanceLog      Log     = null;

            if (AttendanceDate == null)
            {
                Log = AttenBO.WriteAttendanceAutoLog(RollCallID, Results);
            }
            else
            {
                Log = AttenBO.WriteAttendanceAutoLog(RollCallID, Results, AttendanceDate.Value);
            }

            //Danh sach sinh vien trong log

            List <int> StudentIDs = AttenBO.GetStudentIDList(Results);

            //Lay danh sach sinh vien ton tai trong log
            StudentBusiness StuBO = new StudentBusiness();
            //List<Student> Students = StuBO.Find(stu => StudentIDs.Contains(stu.StudentID)).ToList();

            /*
             * var StudentsJson = Students.ToList().Select(s => new
             * {
             *  studentID = s.StudentID,
             *  studentCode = s.StudentCode,
             *  studentName = s.FullName
             * });
             */

            var StudentsJson = Log.StudentAttendances.Select(sa => new
            {
                studentID   = sa.StudentID,
                studentCode = sa.Student.StudentCode,
                studentName = sa.Student.FullName,
                isPresent   = sa.IsPresent
            });

            return(Json(StudentsJson, JsonRequestBehavior.AllowGet));
        }
 public StudySessionController()
 {
     StuSesBO = new StudySessionBusiness();
     RollBO   = new RollCallBusiness();
 }
示例#10
0
        public void Execute()
        {
            RollCallBusiness RollBO = new RollCallBusiness();

            RollBO.SetRollCallStatus();
        }
 public InstructorController()
 {
     InsBO  = new InstructorBusiness();
     AccBO  = new AccountBusiness();
     RollBO = new RollCallBusiness();
 }
        //Tim xem can bao nhiu hinh thi nhan dien du SV
        static void FindRequiredImageNumber()
        {
            Console.WriteLine("Testing begin. Initialize the Recognizer.");
            Random random = new Random();

            //Set cac gia tri
            int    TestRollCallID      = 24;
            int    StudentPresent      = 17;
            String TestImageFolderPath = @"C:\Users\Hoang\Documents\Visual Studio 2010\Projects\RollSystemMobile\FaceRecAutomationTesting\More Test\Unknown";

            //Tao BO
            RollCall           roll    = new RollCallBusiness().GetRollCallByID(TestRollCallID);
            AttendanceBusiness AttenBO = new AttendanceBusiness();

            //Tao 1 mang luu ket qua
            List <MoreTestSingleResult> FinalResults = new List <MoreTestSingleResult>();
            List <RollSystemMobile.Models.RecognizerResult> AllResult = new List <RollSystemMobile.Models.RecognizerResult>();

            //Doc toan bo anh trong folder, recognize roi dua vao mang
            List <String> ImageFiles = Directory.GetFiles(TestImageFolderPath, "*.jpg", SearchOption.TopDirectoryOnly).ToList();

            foreach (var FilePath in ImageFiles)
            {
                var Result = FaceBusinessForMoreTest.RecognizeStudentForAttendance(TestRollCallID, FilePath);
                AllResult.Add(Result);
                Console.WriteLine(FilePath + " processed.");
            }


            //Chay test 10000 lan
            for (int i = 0; i < 10000; i++)
            {
                List <RollSystemMobile.Models.RecognizerResult> Results = new List <RollSystemMobile.Models.RecognizerResult>();
                int StudentDetected = 0;

                //Sao chep ra mot mang rieng
                List <RollSystemMobile.Models.RecognizerResult> AllResultClone = new List <RollSystemMobile.Models.RecognizerResult>(AllResult);
                List <String> FileUsed = new List <string>();

                while (StudentDetected < StudentPresent)
                {
                    //Lay 1 phan tu ra khoi mang clone
                    int Position  = random.Next(AllResultClone.Count);
                    var GetResult = AllResultClone.ElementAt(Position);
                    AllResultClone.Remove(GetResult);
                    FileUsed.Add(GetResult.ImageLink);


                    Results.Add(GetResult);

                    StudentDetected = AttenBO.GetStudentIDList(Results).Count;
                }
                MoreTestSingleResult SingleResult = new MoreTestSingleResult();
                SingleResult.FileUsed        = FileUsed;
                SingleResult.RunCount        = FileUsed.Count;
                SingleResult.StudentDetected = StudentDetected;
                FinalResults.Add(SingleResult);
                Console.WriteLine("Test run: " + i);
            }

            FinalResults = FinalResults.OrderBy(rs => rs.RunCount).ToList();
            MoreTestSingleResult MinResult = FinalResults.First();

            Console.WriteLine("Minimum image required: " + MinResult.RunCount);
            Console.Write("File Used: ");
            foreach (var FilePath in MinResult.FileUsed)
            {
                Console.WriteLine(Path.GetFileNameWithoutExtension(FilePath) + "|");
            }
            Console.WriteLine();

            MoreTestSingleResult MaxResult = FinalResults.Last();

            Console.WriteLine("Maximum image required: " + MaxResult.RunCount);
            Console.WriteLine("File Used: ");
            foreach (var FilePath in MaxResult.FileUsed)
            {
                Console.WriteLine(Path.GetFileNameWithoutExtension(FilePath) + "|");
            }
            Console.WriteLine();


            for (int i = MinResult.RunCount; i <= MaxResult.RunCount; i++)
            {
                int Times = FinalResults.Count(rs => rs.RunCount == i);
                Console.WriteLine("Required: " + i + ".Times: " + Times);
            }

            double AvgRun = FinalResults.Average(r => r.RunCount);

            Console.WriteLine("Avarage image required: " + AvgRun);
            Console.ReadLine();
        }
        //So luong hinh tang dan, tinh so luong SV detected dc
        static void FindAvarageStudentDetected()
        {
            Random random = new Random();

            //Set cac gia tri
            int    TestRollCallID      = 24;
            String TestImageFolderPath = @"C:\Users\Hoang\Documents\Visual Studio 2010\Projects\RollSystemMobile\FaceRecAutomationTesting\More Test\13 After - Copy";


            //Tao BO
            RollCall           roll    = new RollCallBusiness().GetRollCallByID(TestRollCallID);
            AttendanceBusiness AttenBO = new AttendanceBusiness();

            //Tao 1 mang luu ket qua
            List <MoreTestSingleResult> FinalResults = new List <MoreTestSingleResult>();
            List <RollSystemMobile.Models.RecognizerResult> AllResult = new List <RollSystemMobile.Models.RecognizerResult>();


            //Doc toan bo anh trong folder
            List <String> ImageFiles = Directory.GetFiles(TestImageFolderPath, "*.jpg", SearchOption.TopDirectoryOnly).ToList();

            foreach (var FilePath in ImageFiles)
            {
                var Result = FaceBusinessForMoreTest.RecognizeStudentForAttendance(TestRollCallID, FilePath);
                AllResult.Add(Result);
                Console.WriteLine(FilePath + " processed.");
            }

            //So luong hinh tang dan, tu 5 toi max
            for (int i = 1; i < ImageFiles.Count; i++)
            {
                //Chay 1000 lan
                for (int j = 0; j < 1000; j++)
                {
                    List <RollSystemMobile.Models.RecognizerResult> Results = new List <RollSystemMobile.Models.RecognizerResult>();
                    //Sao chep ra mot mang rieng
                    List <RollSystemMobile.Models.RecognizerResult> AllResultClone = new List <RollSystemMobile.Models.RecognizerResult>(AllResult);
                    List <String> FileUsed = new List <string>();

                    //Lay random i hinh, set result
                    for (int k = 0; k < i; k++)
                    {
                        //Lay 1 phan tu ra khoi mang clone
                        int Position  = random.Next(AllResultClone.Count);
                        var GetResult = AllResultClone.ElementAt(Position);
                        AllResultClone.Remove(GetResult);
                        FileUsed.Add(GetResult.ImageLink);

                        Results.Add(GetResult);
                    }
                    MoreTestSingleResult SingleResult = new MoreTestSingleResult();
                    SingleResult.FileUsed        = FileUsed;
                    SingleResult.RunCount        = FileUsed.Count;
                    SingleResult.StudentDetected = AttenBO.GetStudentIDList(Results).Count;
                    FinalResults.Add(SingleResult);
                }
            }


            //Bat dau tinh, voi so luong hinh tang dan, trung binh nhan dien dc bao nhieu hs
            for (int i = 1; i < ImageFiles.Count; i++)
            {
                Console.WriteLine("Number of image used: " + i);
                double AvgStudentDetected = FinalResults.Where(r => r.RunCount == i).Average(r => r.StudentDetected);
                Console.WriteLine("Average Student Detected: " + AvgStudentDetected);
            }
            Console.ReadLine();
        }