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