Example #1
0
        private String getSeconds(EmployeeBadge e)
        {
            Debug.WriteLine("getSeconds called");
            DBConnect       db         = new DBConnect();
            MySqlConnection conn       = db.getConnection();
            string          query      = "SELECT * FROM `access` where rfid='" + e.rfid + "'" + " and session_id='" + e.session + "'" + " and type='" + BadgeType.EXIT + "'";
            MySqlCommand    cmd        = new MySqlCommand(query, conn);
            MySqlDataReader dataReader = cmd.ExecuteReader();
            DateTime        d;
            string          secondExit  = "";
            string          secondEnter = "";

            if (!dataReader.Read())
            {
                conn.Close();
                Debug.WriteLine("Entry for {0} {1} {2} not found in 'access' table", e.rfid, e.session, BadgeType.EXIT);
                throw new Exception("Not found session or rfid or type wrong.");
            }
            else
            {
                d          = (DateTime)dataReader["date"];
                secondExit = dataReader["time"].ToString();
            }
            conn.Close();

            string datesql = d.Year + "-" + d.Month + "-" + d.Day;

            query      = "SELECT * FROM `access` where rfid='" + e.rfid + "'" + " and type='" + BadgeType.ENTER + "'" + " and date='" + datesql + "'";
            db         = new DBConnect();
            conn       = db.getConnection();
            cmd        = new MySqlCommand(query, conn);
            dataReader = cmd.ExecuteReader();
            Double maxNow  = 0.0;
            int    control = 0;

            while (dataReader.Read())
            {
                if (control == 0)
                {
                    control++;
                }
                if (Double.Parse(dataReader["time"].ToString()) > maxNow)
                {
                    secondEnter = dataReader["time"].ToString();
                    maxNow      = Double.Parse(dataReader["time"].ToString());
                }
            }
            if (control == 0)
            {
                conn.Close();
                throw new Exception("You are trying to cheat the system.");
            }
            conn.Close();
            //compute difference
            Double fexit = 0.0, fenter = 0.0;

            fexit  = Double.Parse(secondExit);
            fenter = Double.Parse(secondEnter);
            Double doublesecondsOfWork = fexit - fenter;
            int    secondOfWork        = (int)doublesecondsOfWork;

            Debug.WriteLine("calculated seconds: " + secondOfWork.ToString());

            TimeSpan span = TimeSpan.FromSeconds(secondOfWork);
            string   s    = span.ToString(@"hh\:mm\:ss");

            string[] arr = s.Split(":".ToArray());
            return(arr[0] + " h " + arr[1] + " min " + arr[2] + " sec ");
        }
Example #2
0
        public ResponseMessageColor faceDetectionAndConcludeSession(EmployeeBadge employee, string name, string surname, bool isentering)
        {
            DBConnect       db         = new DBConnect();
            MySqlConnection conn       = db.getConnection();
            string          query      = "SELECT * FROM colors where color='GREEN' and rfid='" + employee.rfid + "'";
            MySqlCommand    cmd        = new MySqlCommand(query, conn);
            MySqlDataReader dataReader = cmd.ExecuteReader();

            int count = 0;

            while (dataReader.Read())
            {
                count++;
            }

            conn.Close();

            if (count < 5)
            {
                if (isentering)
                {
                    return(new ResponseMessageColor(200, "Welcome " + name + " " + surname, "YELLOW"));
                }
                else
                {
                    return(new ResponseMessageColor(200, "You worked " + getSeconds(employee), "YELLOW"));
                }
            }



            string pathpicture = getPictureUri(employee.rfid, employee.session);

            Image <Bgr, byte>  receivedImg   = new Image <Bgr, byte>(pathpicture);
            Image <Gray, byte> normalizedImg = receivedImg.Convert <Gray, Byte>();

            Rectangle[] rectangles = classifier.DetectMultiScale(normalizedImg, 1.4, 1, new Size(100, 100), new Size(800, 800));

            foreach (Rectangle r in rectangles)
            {
                receivedImg.Draw(r, new Bgr(Color.Red), 2);
            }

            receivedImg.Save("photoFaced.jpg");

            if (rectangles.Length <= 0)
            {
                // NEVER REACHED THIS CODE ! ! ! ! !


                //put into red folder

                /* ChangePicture c = new ChangePicture();
                 * c.rfid = employee.rfid;
                 * c.session_id = employee.session;
                 * c.color = ColorType.RED.ToString();
                 * changeColor(c);*/
                // putSessionPhotoIntoRightFolder(employee, ColorType.RED);
                return(new ResponseMessageColor(404, "Never reached this code."));
            }



            //face recognition
            normalizedImg = receivedImg.Copy(rectangles[0]).Convert <Gray, byte>().Resize(64, 64, Emgu.CV.CvEnum.Inter.Cubic);
            normalizedImg._EqualizeHist();

            Classifier_Train eigenRecog = new Classifier_Train(ROOT + "\\" + employee.rfid + "\\" + ColorType.GREEN.ToString());

            string labelName = eigenRecog.Recognize(normalizedImg, greenValue);

            //eigenRecog.AddTrainingImage(normalizedImg, "Unknown");

            if (labelName == null || labelName == "" || labelName == "Unknown")
            {
                labelName = eigenRecog.Recognize(normalizedImg, yellowValue);

                if (labelName == null || labelName == "" || labelName == "Unknown")
                {
                    //put into red folder
                    ChangePicture c = new ChangePicture();
                    c.rfid       = employee.rfid;
                    c.session_id = employee.session;
                    c.color      = ColorType.RED.ToString();
                    changeColor(c);
                    //putSessionPhotoIntoRightFolder(employee, ColorType.RED);
                    if (isentering)
                    {
                        return(new ResponseMessageColor(200, "Welcome " + name + " " + surname));
                    }
                    else
                    {
                        return(new ResponseMessageColor(200, "You worked " + getSeconds(employee).ToString()));
                    }
                }
                else
                {
                    //put into yellow folder
                    ChangePicture c = new ChangePicture();
                    c.rfid       = employee.rfid;
                    c.session_id = employee.session;
                    c.color      = ColorType.YELLOW.ToString();
                    changeColor(c);
                    //putSessionPhotoIntoRightFolder(employee, ColorType.YELLOW);
                    if (isentering)
                    {
                        return(new ResponseMessageColor(200, "Welcome " + name + " " + surname, "YELLOW"));
                    }
                    else
                    {
                        return(new ResponseMessageColor(200, "You worked " + getSeconds(employee), "YELLOW"));
                    }
                }
            }
            else
            {
                //put into green folder
                ChangePicture c = new ChangePicture();
                c.rfid       = employee.rfid;
                c.session_id = employee.session;
                c.color      = ColorType.GREEN.ToString();
                changeColor(c);
                eigenRecog.AddTrainingImage(normalizedImg, employee.rfid, employee.rfid + ".bmp");
                if (isentering)
                {
                    return(new ResponseMessageColor(200, "Welcome " + name + " " + surname, "GREEN"));
                }
                else
                {
                    return(new ResponseMessageColor(200, "You worked " + getSeconds(employee), "GREEN"));
                }
            }
        }
Example #3
0
        public ResponseMessageColor enterBadge(EmployeeBadge e)
        {
            Debug.WriteLine("enterBadge called");
            DBConnect       db = new DBConnect();
            MySqlConnection conn = db.getConnection();
            string          query = "SELECT * FROM user where rfid='" + e.rfid + "'";
            MySqlCommand    cmd = new MySqlCommand(query, conn);
            MySqlDataReader dataReader = cmd.ExecuteReader();
            string          name = "none", surname = "none";

            if (dataReader.Read())
            {
                name    = dataReader["name"].ToString();
                surname = dataReader["surname"].ToString();
                Debug.WriteLine("RFID belongs to " + name + " " + surname);
            }
            else
            {
                conn.Close();
                Debug.WriteLine("Person with that RFID not found");
                return(new ResponseMessageColor(201, "Not found RFID."));
            }

            conn.Close();



            db         = new DBConnect();
            conn       = db.getConnection();
            query      = "SELECT * FROM sessions_user where session_id='" + e.session + "'";
            cmd        = new MySqlCommand(query, conn);
            dataReader = cmd.ExecuteReader();
            if (!dataReader.Read())
            {
                conn.Close();
                Debug.WriteLine("Session '" + e.session + "' not found");
                return(new ResponseMessageColor(201, "Not found session."));
            }
            conn.Close();


            if (!checkFace(PATHDIR + "\\" + e.session + ".bmp"))
            {
                File.Delete(PATHDIR + "\\" + e.session + ".bmp");

                db   = new DBConnect();
                conn = db.getConnection();
                MySqlCommand cmd3 = new MySqlCommand();
                cmd3.Connection  = conn;
                cmd3.CommandText = "delete from sessions_user where session_id =?a ";
                cmd3.Parameters.Add("?a", MySqlDbType.VarChar).Value = e.session;
                try
                {
                    cmd3.ExecuteNonQuery();
                }
                catch (MySqlException ex)
                {
                    Debug.WriteLine("Failed to delete from sessions_user, error code: " + ex.Number);
                }
                conn.Close();


                return(new ResponseMessageColor(404, "Face Not found."));
            }


            db    = new DBConnect();
            conn  = db.getConnection();
            query = "SELECT COUNT(*) FROM access where rfid='" + e.rfid + "'";
            cmd   = new MySqlCommand(query, conn);
            int count = Convert.ToInt32(cmd.ExecuteScalar());

            if (count % 2 != 0)
            {
                conn.Close();


                db   = new DBConnect();
                conn = db.getConnection();
                MySqlCommand cmd3 = new MySqlCommand();
                cmd3.Connection  = conn;
                cmd3.CommandText = "delete from sessions_user where session_id =?a ";
                cmd3.Parameters.Add("?a", MySqlDbType.VarChar).Value = e.session;
                try
                {
                    cmd3.ExecuteNonQuery();
                }
                catch (MySqlException ex)
                {
                    Debug.WriteLine("Failed to delete from sessions_user, error code: " + ex.Number);
                }
                conn.Close();


                File.Delete(PATHDIR + "\\" + e.session + ".bmp");
                return(new ResponseMessageColor(201, "You cannot enter again."));
            }
            conn.Close();

            db   = new DBConnect();
            conn = db.getConnection();
            MySqlCommand cmd2 = new MySqlCommand();

            cmd2.Connection  = conn;
            cmd2.CommandText = "INSERT INTO access(rfid,date,time,type,session_id) VALUES(?a,?b,?c,?d,?e)";
            cmd2.Parameters.Add("?a", MySqlDbType.VarChar).Value = e.rfid;
            DateTime d = DateTime.Now;

            cmd2.Parameters.Add("?b", MySqlDbType.Date).Value     = d.Date;
            cmd2.Parameters.Add("?c", MySqlDbType.VarChar).Value  = (d - DateTime.Today).TotalSeconds;
            cmd2.Parameters.Add("?d", MySqlDbType.Enum).Value     = BadgeType.ENTER;
            cmd2.Parameters.Add("?e", MySqlDbType.LongBlob).Value = e.session;
            try
            {
                cmd2.ExecuteNonQuery();
                Debug.WriteLine("INSERT for RFID " + e.rfid + ", date " + d.Date.ToShortDateString() + ", time " + (d - DateTime.Today).TotalSeconds.ToString() + " session_id " + e.session + " type ENTER into access executed");
            }
            catch (MySqlException ex)
            {
                Debug.WriteLine("Insertion execution failed, error code: " + ex.Number);
            }
            conn.Close();

            db   = new DBConnect();
            conn = db.getConnection();
            MySqlCommand cmd6 = new MySqlCommand();

            cmd6.Connection  = conn;
            cmd6.CommandText = "delete from sessions_user where session_id =?a ";
            cmd6.Parameters.Add("?a", MySqlDbType.VarChar).Value = e.session;
            cmd6.ExecuteNonQuery();
            conn.Close();

            concludeSession(e.rfid, e.session);
            db               = new DBConnect();
            conn             = db.getConnection();
            cmd2             = new MySqlCommand();
            cmd2.Connection  = conn;
            cmd2.CommandText = "INSERT INTO colors(session_id,rfid,color) VALUES(?a,?b,?c)";
            cmd2.Parameters.Add("?a", MySqlDbType.VarChar).Value = e.session;
            cmd2.Parameters.Add("?b", MySqlDbType.VarChar).Value = e.rfid;
            cmd2.Parameters.Add("?c", MySqlDbType.Enum).Value    = ColorType.YELLOW;
            try
            {
                cmd2.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                Debug.WriteLine("Insertion execution failed, error code: " + ex.Number);
            }
            conn.Close();

            return(faceDetectionAndConcludeSession(e, name, surname, true));
        }