Beispiel #1
0
        public void write_subj_to_file(Subj_Data S)
        {
            Console.WriteLine("WRITING GAZE PT DATA TO FILE");
            //String out_path = Path.GetFullPath(System.Environment.GetCommandLineArgs()[1]);
            //String filename = out_path + "\\OUT_S" + Convert.ToString(S.get_ID()) + ".txt";

            String filename = @"C:\Users\pkhorra2\Documents\AvaScholar\Attention_Detector\C#_Proj\Server_Mult_Version\MultiThreadServer_w_log\out.txt";

            StreamWriter sW = new StreamWriter(filename);
            //ArrayList gaze_pts = S.get_gaze_pts();
            List<Gaze_Data_Pt> gaze_pts = S.get_pt_list();
            for (int i = 0; i < gaze_pts.Count; i++)
            {
                Point_Obj g = gaze_pts[i].gaze_pt;
                DateTime T = gaze_pts[i].time_stamp;
                sW.WriteLine("({0}, {1}) -- TIME: " + T.ToString(), g.get_x(), g.get_y()); //T.ToString());
                sW.WriteLine("TICKS: {0}", T.Ticks);
            }
            sW.Flush();
            sW.Close();
            Console.WriteLine("DONE WRITING");
        }
Beispiel #2
0
        private Point_Obj process_float_data(float[] input_array, Subj_Data S)
        {
            float frame_num = input_array[0];
            float success_flag = input_array[1];

            if (success_flag == 1.0)
            {
                Console.WriteLine("{0}: Gaze Pt Package", Convert.ToInt32(frame_num));

                Point_Obj left_eye = new Point_Obj(input_array[2], input_array[3], input_array[4]);
                Point_Obj right_eye = new Point_Obj(input_array[5], input_array[6], input_array[7]);

                float alpha = input_array[8] * 180;
                float beta = input_array[9] * 180;
                float gamma = input_array[10] * 180;
                int ID = S.get_ID();

                Gaze_Comp G = new Gaze_Comp();
                Point_Obj p = G.get_gaze_pt(right_eye, left_eye, alpha, beta, gamma);
                Console.WriteLine("{0} - GAZE POINT (X, Y): ({1}, {2})", ID, p.get_x(), p.get_y());
                Point_Obj disp_pt = new Point_Obj(-p.get_x(), p.get_y() + S.get_MONITOR_DIM_Y() / 2);
                plot_gaze_point(disp_pt, S);
                Console.WriteLine("{0} - TRANSF GAZE POINT (X, Y): ({1}, {2})", ID, disp_pt.get_x(), disp_pt.get_y());

                return p;
            }
            else if(success_flag == 2.0)
            {
                float age = input_array[2];
                float gender = input_array[3];

                Console.WriteLine("{0}: Age/Gender Package", Convert.ToInt32(frame_num));
                S.set_age(Convert.ToDouble(age));

                if (gender >= 0.5)
                {
                    // Male
                    S.set_gender('M');
                }
                else
                {
                    // Female
                    S.set_gender('F');
                }

                disp_age(S);
                disp_gender(S);

                if (S.get_pt_list().Count != 0)
                {
                    return S.get_pt_list().Last().gaze_pt;
                }
                else
                {
                    return new Point_Obj(0.0F, -S.get_MONITOR_DIM_Y()/2);
                }
            }
            else
            {
                Console.WriteLine("{0}: Tracking Failure", Convert.ToInt32(frame_num));
                //Point_Obj Gaze_Pt = new Point_Obj(Single.PositiveInfinity, Single.PositiveInfinity);
                Point_Obj disp_pt_f = new Point_Obj(-1000F, -1000F);
                plot_gaze_point(disp_pt_f, S);
                //disp_pt_f.set_coord(Single.PositiveInfinity, Single.PositiveInfinity, 0);
                return disp_pt_f;
            }
        }
Beispiel #3
0
        private void write_pt_to_hist(Point_Obj p, Screen_Prob_Map p_m, Subj_Data S, int frame_num)
        {
            int ID = S.get_ID();
            if (((Chart)this.hist_chart_list[ID]).InvokeRequired)
            {
                ChartHistCallback cH = new ChartHistCallback(write_pt_to_hist);
                this.Invoke(cH, new object[] { p, p_m, S, frame_num });
            }
            else
            {
                Chart chart = (Chart)this.hist_chart_list[ID];
                chart.ChartAreas[0].AxisX.Maximum = frame_num; // display points up to current frame

                Chart chart_f2 = (Chart)F2.hist_chart_list[ID];

                int MONITOR_DIM_X = S.get_MONITOR_DIM_X();
                int MONITOR_DIM_Y = S.get_MONITOR_DIM_Y();

                // convert gaze point (world coordinates) => monitor coordinates
                p.set_coord(-p.get_x(), p.get_y() + MONITOR_DIM_Y / 2, p.get_z());

                if (p.get_x() < -MONITOR_DIM_X / 2 || p.get_x() > MONITOR_DIM_X / 2)
                {
                    chart.Series["Series1"].Points.AddXY(frame_num, 0.0F);
                    Console.WriteLine("{0} - Confid Score: {1}", ID, 0.0F);

                    chart_f2.Series[0].Points.AddXY(DateTime.Now.ToLongTimeString(), 0.0F);
                }
                else if (p.get_y() < -MONITOR_DIM_Y / 2 || p.get_y() > MONITOR_DIM_Y / 2)
                {
                    chart.Series["Series1"].Points.AddXY(frame_num, 0.0F);
                    Console.WriteLine("{0} - Confid Score: {1}", ID, 0.0F);

                    chart_f2.Series[0].Points.AddXY(DateTime.Now.ToLongTimeString(), 0.0F);
                }
                else
                {
                    //chart.Series["Series1"].Points.AddXY(frame_num, 0);
                    //double D = p_m.look_up_value(Convert.ToInt32(-p.get_x()), Convert.ToInt32(p.get_y()) + MONITOR_DIM_Y / 2);
                    double D = p_m.look_up_value(Convert.ToInt32(p.get_x()), Convert.ToInt32(p.get_y()));
                    Console.WriteLine("{0} - Confid Score: {1}", ID, D);
                    //Console.WriteLine("Adding Point "+D.ToString());
                    chart.Series["Series1"].Points.AddXY(frame_num, Convert.ToSingle(D));
                    //write_to_msg_box(frame_num.ToString() + " " + D.ToString());

                    chart_f2.Series[0].Points.AddXY(DateTime.Now.ToLongTimeString(), Convert.ToSingle(D));
                }

                if (frame_num > 100)
                {
                    chart.ChartAreas[0].AxisX.Minimum = chart.ChartAreas[0].AxisX.Maximum - 100;
                }

            }
        }
Beispiel #4
0
        private void plot_gaze_point(Point_Obj p, Subj_Data S)
        {
            if (this.gaze_plot.InvokeRequired)
            {
                //ChartCallback c = new ChartCallback(plot_point);
                GazeChartCallback gC = new GazeChartCallback(plot_gaze_point);
                this.Invoke(gC, new object[] { p, S });
            }
            else
            {
                this.gaze_plot.Series["Series1"].Points.AddXY(p.get_x(), p.get_y());
                int L = this.gaze_plot.Series["Series1"].Points.Count;
                int MONITOR_DIM_X = S.get_MONITOR_DIM_X();
                int MONITOR_DIM_Y = S.get_MONITOR_DIM_Y();
                int ID = S.get_ID();

                if (p.get_x() < -MONITOR_DIM_X / 2 || p.get_x() > MONITOR_DIM_X / 2)
                {
                    //Console.WriteLine("POINT RED!");
                    this.gaze_plot.Series["Series1"].Points[L - 1].Color = Color.Red;
                }
                else if (p.get_y() < -MONITOR_DIM_Y / 2 || p.get_y() > MONITOR_DIM_Y / 2)
                {
                    //Console.WriteLine("POINT RED!");
                    this.gaze_plot.Series["Series1"].Points[L - 1].Color = Color.Red;
                }
                else
                {
                    //Console.WriteLine("POINT BLUE!");
                    this.gaze_plot.Series["Series1"].Points[L - 1].Color = color_list[ID];
                }

                if(L > POINTS_TO_SHOW)
                {
                    this.gaze_plot.Series["Series1"].Points.RemoveAt(0);
                }

            }
        }
Beispiel #5
0
 private void disp_gender(Subj_Data S)
 {
     int ID = S.get_ID();
     if (((TextBox)this.gender_box_list[ID]).InvokeRequired)
     {
         GenderBoxCallback g = new GenderBoxCallback(disp_gender);
         this.Invoke(g, new object[] { S });
     }
     else
     {
         TextBox t = (TextBox)this.gender_box_list[ID];
         //t.Text = Math.Round(S.get_age()).ToString();
         char gender = S.get_gender();
         if (gender == 'F')
         {
             t.BackColor = Color.Indigo;
             t.ForeColor = Color.White;
             t.Text = "FEMALE";
         }
         else
         {
             t.BackColor = Color.DimGray;
             t.ForeColor = Color.White;
             t.Text = "MALE";
         }
     }
 }
Beispiel #6
0
 private void disp_age(Subj_Data S)
 {
     int ID = S.get_ID();
     if (((TextBox)this.age_box_list[ID]).InvokeRequired)
     {
         AgeBoxCallback a = new AgeBoxCallback(disp_age);
         this.Invoke(a, new object[] { S });
     }
     else
     {
         TextBox t = (TextBox)this.age_box_list[ID];
         t.Text = Math.Round(S.get_age()).ToString();
     }
 }
Beispiel #7
0
        private Subj_Data check_if_distract(Subj_Data S, Point_Obj est_gaze_pt)
        {
            int MONITOR_DIM_X = S.get_MONITOR_DIM_X();
            int MONITOR_DIM_Y = S.get_MONITOR_DIM_Y();

            //Console.WriteLine("INPUT PT: {0}", est_gaze_pt.ToString());
            //est_gaze_pt.set_coord(-est_gaze_pt.get_x(), est_gaze_pt.get_y() + MONITOR_DIM_Y / 2, est_gaze_pt.get_z());
            Point_Obj disp_pt = new Point_Obj(-est_gaze_pt.get_x(), est_gaze_pt.get_y() + MONITOR_DIM_Y / 2, est_gaze_pt.get_z());

            int cur_num_frames_distracted = S.get_num_frames_distracted();
            if (disp_pt.get_x() < -MONITOR_DIM_X / 2 || disp_pt.get_x() > MONITOR_DIM_X / 2)
            {
                //Console.WriteLine("INCREMENT!");
                S.set_num_frames_distracted(++cur_num_frames_distracted);
            }
            else if (disp_pt.get_y() < -MONITOR_DIM_Y / 2 || disp_pt.get_y() > MONITOR_DIM_Y / 2)
            {
                //Console.WriteLine("INCREMENT!!");
                S.set_num_frames_distracted(++cur_num_frames_distracted);
            }
            else
            {
                //Console.WriteLine("RESET");
                S.set_num_frames_distracted(0);
            }

            //Console.WriteLine("NUM DISTRACT FRAMES PRIOR: {0}", S.get_num_frames_distracted());

            return S;
        }
Beispiel #8
0
        public void serve_client(TcpClient client, int ID)
        {
            write_to_msg_box("Client " + Convert.ToString(ID) + " Connected!!\n");
            NetworkStream stream = client.GetStream();
            // Array to store incoming data
            Byte[] bytes = new Byte[PACKET_LENGTH];

            //int MONITOR_DIM_X = 394;
            //int MONITOR_DIM_Y = 288;
            int MONITOR_DIM_X = 513;
            int MONITOR_DIM_Y = 348;
            //int MONITOR_DIM_X = 334;
            //int MONITOR_DIM_Y = 239;

            // Object to store information about subject
            Subj_Data S = new Subj_Data(client, 0, ID, MONITOR_DIM_X, MONITOR_DIM_Y);
            // Object to get confid values based on 2D Gaussian
            Screen_Prob_Map p_m = new Screen_Prob_Map(MONITOR_DIM_X, MONITOR_DIM_Y, 200, 100);
            int i;

            clear_chart(ID);

            try
            {
                while ((i = stream.Read(bytes, 0, PACKET_LENGTH)) != 0)
                {
                    // Convert byte array to float
                    float[] float_array = new float[NUM_FLOATS];
                    Console.Write("\n"+Convert.ToString(ID)+" - ");
                    for (int ii = 0; ii < float_array.Length; ii++)
                    {
                        float_array[ii] = BitConverter.ToSingle(bytes, ii * sizeof(float));
                        if (ii < 11)
                            Console.Write(float_array[ii] + " ");
                    }
                    //Console.Write("\n");

                    Console.Write("\n" + Convert.ToString(ID) + " - ");
                    for (int ii = 256; ii < float_array.Length; ii++)
                    {
                        float_array[ii] = BitConverter.ToSingle(bytes, ii * sizeof(float));
                        if (ii < 267)
                            Console.Write(float_array[ii] + " ");
                    }
                    Console.Write("\n");

                    // Process float array and get estimated gaze point
                    Point_Obj est_gaze_pt = process_float_data(float_array, S);

                    // Log estimated gaze point
                    //S.get_gaze_pts().Add(est_gaze_pt);
                    double confid_score = p_m.look_up_value(Convert.ToInt32(-est_gaze_pt.get_x()), Convert.ToInt32(est_gaze_pt.get_y()) + S.get_MONITOR_DIM_Y()/2 );
                    S.add_to_pt_list(new Gaze_Data_Pt((int)float_array[0], est_gaze_pt, DateTime.Now, Convert.ToSingle(confid_score), S.get_MONITOR_DIM_X(), S.get_MONITOR_DIM_Y() ));
                    //Console.WriteLine("{0} - CONFID_SCORE - in loop - {1}", ID, confid_score);
                    //Console.WriteLine("EST GAZE PT1: {0}", est_gaze_pt);

                    // Check if subject is distracted
                    S = check_if_distract(S, est_gaze_pt);
                    //Console.WriteLine("{0} - NUM DISTRACT FRAMES: {1}", S.get_ID(), S.get_num_frames_distracted());
                    if (S.get_num_frames_distracted() > DISTRACT_WINDOW)
                    {
                        write_to_alert_box(1, S.get_ID());
                    }
                    else
                    {
                        write_to_alert_box(0, S.get_ID());
                    }

                    //write_pt_to_hist(est_gaze_pt, ID, Convert.ToInt32(float_array[0]));

                    //Console.WriteLine("EST GAZE PT2: {0}", est_gaze_pt);
                    write_pt_to_hist(est_gaze_pt, p_m, S, Convert.ToInt32(float_array[0]));

                }

                stream.Close();
                client.Close();
                write_to_msg_box("Connection to Client " + Convert.ToString(S.get_ID()) + " Closed");

                // Set occupied flag back to 0 (need thread-safe call)
                mut.WaitOne();
                occupied_flags[ID] = 0; // atomic (?)
                write_to_msg_box("CLIENT FLAG ARRAY: " + occupied_flags[0].ToString() + " " + occupied_flags[1].ToString());
                all_subj.Add(S);
                mut.ReleaseMutex();

                //File_IO F = new File_IO();
                //F.write_subj_to_file(S);

            }
            catch (Exception EE)
            {
                Console.WriteLine("EXCEPTION: {0}\n", EE.Message);
                //all_subj.Add(S);
                stream.Close();
                client.Close();
                write_to_msg_box("Connection to Client "+Convert.ToString(S.get_ID())+" Closed");

                // Set occupied flag back to 0 (need thread-safe call)
                mut.WaitOne();
                occupied_flags[ID] = 0; // atomic (?)
                write_to_msg_box("CLIENT FLAG ARRAY: " + occupied_flags[0].ToString() + " " + occupied_flags[1].ToString());
                all_subj.Add(S);
                mut.ReleaseMutex();

                //File_IO F = new File_IO();
                //F.write_subj_to_file(S);

            }
            //all_subj.Add(S);

            // Set occupied flag back to 0 (need thread-safe call)
            //mut.WaitOne();
            //occupied_flags[ID] = 0; // atomic (?)
            //mut.ReleaseMutex();
        }