Ejemplo n.º 1
0
    /// <summary>
    /// Returns the pixel positions of the four corners of the object's 2D bounding box on the image.
    /// <para>Like most of Unity, the Y values are relative to the bottom of the image, which is unlike the
    /// raw imageBoundingBox data from the ObjectData struct.</para>
    ///  0 ------- 1
    ///  |   obj   |
    ///  3-------- 2
    /// </summary>
    /// <param name="scaleForCanvasUnityError">Adds an optional scaling factor to handle a bug in 2018.3 and greater where the
    /// canvas set to Screen Space - Camera has very weird offsets when its projection matrix has certain small changes made to it directly.</param>
    public Vector2[] Get2DBoundingBoxCorners_Image(float scaleForCanvasUnityError = 1)
    {
        //Shorthand.
        float zedimagewidth  = detectingZEDManager.zedCamera.ImageWidth;
        float zedimageheight = detectingZEDManager.zedCamera.ImageHeight;

        //Canvas offsets from horizontal and vertical calibration offsets (cx/cy).
        CalibrationParameters calib = detectingZEDManager.zedCamera.GetCalibrationParameters();
        float cxoffset = zedimagewidth * scaleForCanvasUnityError / 2f - calib.leftCam.cx * scaleForCanvasUnityError;
        float cyoffset = 0 - (zedimageheight / 2f - calib.leftCam.cy);


        Vector2[] flippedYimagecoords = new Vector2[4];
        for (int i = 0; i < 4; i++)
        {
            Vector2 rawcoord;
            rawcoord.x = objectData.imageBoundingBox[i].x * scaleForCanvasUnityError + cxoffset;
            rawcoord.y = detectingZEDManager.zedCamera.ImageHeight - objectData.imageBoundingBox[i].y + cyoffset;


#if UNITY_2018_1_OR_NEWER
            //Terrible hack to compensate for bug in Unity that scales the Canvas very improperly if you have certain (necessary) values on the projection matrix.
            rawcoord.y = (rawcoord.y - (zedimageheight / 2f)) * scaleForCanvasUnityError + (zedimageheight / 2f);
#endif

            flippedYimagecoords[i] = rawcoord;
        }

        return(flippedYimagecoords);
    }
Ejemplo n.º 2
0
        public CameraParas GetCameraPara()
        {
            ZEDCamera             zedCam  = zedManager.zedCamera;
            CalibrationParameters para    = zedCam.GetCalibrationParameters();
            CameraParas           fypPara = new CameraParas();

            fypPara.cx = para.leftCam.cx;
            fypPara.cy = para.leftCam.cy;
            fypPara.fx = para.leftCam.fx;
            fypPara.fy = para.leftCam.fy;
            fypPara.ResolutionWidth  = (int)para.leftCam.resolution.width;
            fypPara.ResolutionHeight = (int)para.leftCam.resolution.height;
            return(fypPara);
        }
        private float[] AdjustSensorData(int[] rawData, CalibrationParameters calParams)
        {
            float[] calibratedValues = new float[rawData.Length];
            float[] rotatedValues    = new float[rawData.Length];

            //Apply the calibration parameters
            for (int i = 0; i < rawData.Length; i++)
            {
                calibratedValues[i]  = (float)rawData[i];
                calibratedValues[i] -= calParams.LevelShift;
                calibratedValues[i] -= calParams.ChannelOffset[i];
                calibratedValues[i] *= calParams.CalFactor;
                calibratedValues[i] /= calParams.CalDivisor;
            }

            // Apply the rotation matrix
            // [Rotation] * [XYZ]
            rotatedValues[0] = (calParams.RotationMatrix[0, 0] * calibratedValues[0]) + (calParams.RotationMatrix[0, 1] * calibratedValues[1]) + (calParams.RotationMatrix[0, 2] * calibratedValues[2]);
            rotatedValues[1] = (calParams.RotationMatrix[1, 0] * calibratedValues[0]) + (calParams.RotationMatrix[1, 1] * calibratedValues[1]) + (calParams.RotationMatrix[1, 2] * calibratedValues[2]);
            rotatedValues[2] = (calParams.RotationMatrix[2, 0] * calibratedValues[0]) + (calParams.RotationMatrix[2, 1] * calibratedValues[1]) + (calParams.RotationMatrix[2, 2] * calibratedValues[2]);

            return(rotatedValues);
        }
 private void tcpipServer_OnCalibrationParameters(CalibrationParameters calParams)
 {
     // Todo: Should be sent from the tracker after applying settings everywhere..
     Tracker.Instance.Server.SendMessage(Commands.CalibrationParameters, calParams.ParametersAsString);
 }
Ejemplo n.º 5
0
        ///<summary>
        /// Event fired when a data is received from the Alchemy Websockets server instance.
        /// Parses data as JSON and calls the appropriate message or sends an error message.
        /// </summary>
        /// <param name="context">The user's connection context</param>
        public static void OnReceive(UserContext context)
        {
            try
            {
                cont = context;
                var json = context.DataFrame.ToString();
                Console.WriteLine(json);
                dynamic obj = JsonConvert.DeserializeObject(json);
                Console.WriteLine(obj.TYPE);
                if ((obj.TYPE) == ("IDENTIFICATION"))
                {
                    string name = "EyeTrackerClient";
                    var    r    = new Response {
                        TYPE = "IDENTIFICATION", DATA = name
                    };
                    context.Send(JsonConvert.SerializeObject(r));
                }

                if ((obj.TYPE) == ("IDENTIFICATION_COMPLETE"))
                {
                    // devo recuperare ID salvato su file ini per esempio!
                    // se è vuoto restituisco stringa vuota
                    // se c'è invece restituisco stringa con id: TYPE: MACHINE_ID, DATA: valore

                    XmlReader reader = XmlReader.Create("Settings.xml");
                    string    ID     = "";
                    while (reader.Read())
                    {
                        if (reader.NodeType == XmlNodeType.Element && reader.Name == "EyeTracker")
                        {
                            ID = reader.GetAttribute(0);
                        }
                    }
                    if (ID.Equals(""))
                    {
                        var r = new Response {
                            TYPE = "MACHINE_ID", DATA = ""
                        };
                        context.Send(JsonConvert.SerializeObject(r));
                    }
                    else
                    {
                        var r = new Response {
                            TYPE = "MACHINE_ID", DATA = ID
                        };
                        context.Send(JsonConvert.SerializeObject(r));
                    }
                }

                if ((obj.TYPE) == ("OFFSET_CALCULATION"))
                {
                    if ((obj.TODO) == ("true"))
                    {
                        var r = new Response {
                            TYPE = "START_OFFSET_CALCULATION", DATA = ""
                        };
                        context.Send(JsonConvert.SerializeObject(r));
                    }
                    else
                    {
                        var r = new Response {
                            TYPE = "READY_TO_PLAY", DATA = ""
                        };
                        context.Send(JsonConvert.SerializeObject(r));
                    }
                }

                if ((obj.TYPE) == ("CALCULATING"))
                {
                    // spedisco pacchetto TYPE: CALCULATING, DATA: data corrente in mill dal 1970
                    DateTime baseDate = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    TimeSpan diff     = DateTime.UtcNow - baseDate;
                    var      r        = new Response {
                        TYPE = "CALCULATING", DATA = (long)(diff.TotalMilliseconds)
                    };
                    context.Send(JsonConvert.SerializeObject(r));
                }

                if ((obj.TYPE) == ("OFFSET_CALCULATION_COMPLETE"))
                {
                    int id = obj.MACHINE_ID;
                    //devo salvare valore ID dell'EyeTracker dentro il file xml
                    XmlWriterSettings settings = new XmlWriterSettings();
                    settings.Indent = true;
                    XmlWriter writer = XmlWriter.Create("Settings.xml", settings);
                    writer.WriteStartDocument();
                    writer.WriteComment("This file is generated by the program.");
                    writer.WriteStartElement("EyeTracker");
                    writer.WriteAttributeString("ID", id.ToString());
                    writer.WriteEndElement();
                    writer.WriteEndDocument();
                    writer.Flush();
                    writer.Close();
                    var r = new Response {
                        TYPE = "READY_TO_PLAY", DATA = ""
                    };
                    context.Send(JsonConvert.SerializeObject(r));
                }

                if ((obj.TYPE) == ("TRAINING_SESSION"))
                {
                    int pID = obj.PATIENT_ID;
                    if (IDSession == pID)
                    {
                        var r = new Response {
                            TYPE = "TRAINING_SESSION", DATA = "false"
                        };
                        context.Send(JsonConvert.SerializeObject(r));
                    }
                    else
                    {
                        IDSession = pID;
                        var r = new Response {
                            TYPE = "TRAINING_SESSION", DATA = "true"
                        };
                        context.Send(JsonConvert.SerializeObject(r));
                    }
                }

                if ((obj.TYPE) == ("SCREEN_MEASURES"))
                {
                    receivedWidth  = obj.SCREEN_WIDTH;
                    receivedHeight = obj.SCREEN_HEIGHT;
                    gtClient.Calibration.AreaSize(receivedWidth, receivedHeight);
                }

                if ((obj.TYPE) == ("START_TRAINING"))
                {
                    CalibrationParameters parametri = new CalibrationParameters();
                    parametri.NumberOfPoints          = obj.POINTS;
                    parametri.PointDiameter           = obj.POINT_DIAMETER;
                    parametri.PointDuration           = obj.POINT_DURATION;
                    parametri.PointTransitionDuration = obj.TRANSITION_DURATION;
                    gtClient.Calibration.CalibrationParameters(parametri);
                    gtClient.Calibration.Start();
                }

                if ((obj.TYPE) == ("TRAINING_VALIDATION"))
                {
                    if ((obj.DATA) == "true")
                    {
                        gtClient.Calibration.Validate();
                    }
                    else
                    {
                        gtClient.Calibration.Abort();
                    }
                }

                if ((obj.TYPE) == ("START_WORKING"))
                {
                    // Devo Partire tra START_TIME - ora attuale millisecondi
                    StartTime = new DateTime(1970, 01, 01).AddMilliseconds((double)obj.START_TIME);
                    TimeSpan time = StartTime - DateTime.UtcNow;
                    System.Threading.Thread.Sleep(time);
                    gtClient.Stream.StreamStart();
                    onStream = true;
                }

                if ((obj.TYPE) == ("STOP_GAME"))
                {
                    gtClient.Stream.StreamStop();
                    onStream = false;
                }
            }
            catch (Exception e) // Bad JSON! For shame.
            {
                var r = new Response {
                    TYPE = "Errore: ", DATA = new { e.Message }
                };

                context.Send(JsonConvert.SerializeObject(r));
            }
        }
 public virtual bool setCalibrationParameters(int axis, CalibrationParameters arg1)
 {
     bool ret = yarpPINVOKE.IControlCalibration2_setCalibrationParameters(swigCPtr, axis, CalibrationParameters.getCPtr(arg1));
     if (yarpPINVOKE.SWIGPendingException.Pending) throw yarpPINVOKE.SWIGPendingException.Retrieve();
     return ret;
 }
Ejemplo n.º 7
0
        private void SendCommand(string command)
        {
            UpdateCommandLog(InstanceCommand);

            char[]   seperator = { ' ' };
            string[] cmds      = command.Split(seperator, 2);
            string   cmdStr    = cmds[0];

            string paramStr = "";

            if (cmds.Length > 1)
            {
                paramStr = cmds[1];
            }

            switch (cmdStr)
            {
            // Calibration

            case Commands.CalibrationStart:
                client.Calibration.Start();
                WindowState = WindowState.Minimized;
                break;

            case Commands.CalibrationAbort:
                client.Calibration.Abort();
                break;

            case Commands.CalibrationParameters:
                var calParams = new CalibrationParameters();
                calParams.ExtractParametersFromString(paramStr);
                client.Calibration.CalibrationParameters(calParams);
                break;

            // Stream

            case Commands.StreamStart:
                client.Stream.StreamStart();
                break;

            case Commands.StreamStop:
                client.Stream.StreamStop();
                break;

            // Log

            case Commands.LogStart:
                client.Log.Start();
                break;

            case Commands.LogStop:
                client.Log.Stop();
                break;

            case Commands.LogPathSet:
                client.Log.SetLogPath(paramStr);
                break;

            case Commands.LogPathGet:
                client.Log.GetLogPath();
                break;

            case Commands.LogWriteLine:
                client.Log.WriteLine(paramStr);
                break;

            // Camera

            case Commands.CameraParameters:
                client.Camera.ApplyParameters(paramStr);
                // available as override w/ string, eg. Brightness=100,Contrast=255 etc.
                break;


            // U.I

            case Commands.UIMinimize:
                client.UIControl.Minimize();
                break;

            case Commands.UIRestore:
                client.UIControl.Restore();
                break;

            case Commands.UISettings:
                client.UIControl.Settings();
                break;

            case Commands.UISettingsCamera:
                client.UIControl.SettingsCamera();
                break;

            // Mouse control

            case "MouseControl_Enable:":
                client.MouseControl.IsEnabled = true;
                break;

            case "MouseControl_Disable:":
                client.MouseControl.IsEnabled = false;
                break;
            }
        }
Ejemplo n.º 8
0
 private void Calibration_OnParameters(CalibrationParameters calParams)
 {
     Show("Calibration parameters changed.", calParams.ParametersAsString);
 }
Ejemplo n.º 9
0
        public System.Collections.Generic.List <Tuple <int, int> > GetBadPixels()
        {
            var calibrationParameters = new CalibrationParameters();

            return(calibrationParameters.badPixels);
        }
Ejemplo n.º 10
0
 public void GateWriteCalibrationParameters(CalibrationParameters Parameters)
 {
     Channel.GateWriteCalibrationParameters(Parameters);
 }
 internal static HandleRef getCPtr(CalibrationParameters obj)
 {
     return (obj == null) ? new HandleRef(null, IntPtr.Zero) : obj.swigCPtr;
 }