Ejemplo n.º 1
1
        public void ReportCapture_ReportsProperJson()
        {
            var filename = "my/file.png";

            var egoPosition = new float3(.02f, .03f, .04f);
            var egoRotation = new quaternion(.1f, .2f, .3f, .4f);

            var egoVelocity = new Vector3(.1f, .2f, .3f);

            var position   = new float3(.2f, 1.1f, .3f);
            var rotation   = new quaternion(.3f, .2f, .1f, .5f);
            var intrinsics = new float3x3(.1f, .2f, .3f, 1f, 2f, 3f, 10f, 20f, 30f);


            var capturesJsonExpected =
                $@"{{
  ""version"": ""{DatasetCapture.SchemaVersion}"",
  ""captures"": [
    {{
      ""id"": <guid>,
      ""sequence_id"": <guid>,
      ""step"": 0,
      ""timestamp"": 0.0,
      ""sensor"": {{
        ""sensor_id"": <guid>,
        ""ego_id"": <guid>,
        ""modality"": ""camera"",
        ""translation"": [
          {Format(position.x)},
          {Format(position.y)},
          {Format(position.z)}
        ],
        ""rotation"": [
          {Format(rotation.value.x)},
          {Format(rotation.value.y)},
          {Format(rotation.value.z)},
          {Format(rotation.value.w)}
        ],
        ""camera_intrinsic"": [
          [
            {Format(intrinsics.c0.x)},
            {Format(intrinsics.c0.y)},
            {Format(intrinsics.c0.z)}
          ],
          [
            {Format(intrinsics.c1.x)},
            {Format(intrinsics.c1.y)},
            {Format(intrinsics.c1.z)}
          ],
          [
            {Format(intrinsics.c2.x)},
            {Format(intrinsics.c2.y)},
            {Format(intrinsics.c2.z)}
          ]
        ]
      }},
      ""ego"": {{
        ""ego_id"": <guid>,
        ""translation"": [
          {Format(egoPosition.x)},
          {Format(egoPosition.y)},
          {Format(egoPosition.z)}
        ],
        ""rotation"": [
          {Format(egoRotation.value.x)},
          {Format(egoRotation.value.y)},
          {Format(egoRotation.value.z)},
          {Format(egoRotation.value.w)}
        ],
        ""velocity"": [
          {Format(egoVelocity.x)},
          {Format(egoVelocity.y)},
          {Format(egoVelocity.z)}
        ],
        ""acceleration"": null
      }},
      ""filename"": ""{filename}"",
      ""format"": ""PNG""
    }}
  ]
}}";

            var ego               = DatasetCapture.RegisterEgo("");
            var sensorHandle      = DatasetCapture.RegisterSensor(ego, "camera", "", 1, 0);
            var sensorSpatialData = new SensorSpatialData(new Pose(egoPosition, egoRotation), new Pose(position, rotation), egoVelocity, null);

            sensorHandle.ReportCapture(filename, sensorSpatialData, ("camera_intrinsic", intrinsics));

            DatasetCapture.ResetSimulation();
            Assert.IsFalse(sensorHandle.IsValid);

            var capturesPath = Path.Combine(DatasetCapture.OutputDirectory, "captures_000.json");

            FileAssert.Exists(capturesPath);

            AssertJsonFileEquals(capturesJsonExpected, capturesPath);
        }
Ejemplo n.º 2
0
        void CaptureRgbData(Camera cam)
        {
            Profiler.BeginSample("CaptureDataFromLastFrame");
            if (!captureRgbImages)
            {
                return;
            }

            var captureFilename = Path.Combine(Manager.Instance.GetDirectoryFor(RgbDirectory), $"{s_RgbFilePrefix}{Time.frameCount}.png");
            var dxRootPath      = Path.Combine(RgbDirectory, $"{s_RgbFilePrefix}{Time.frameCount}.png");

            SensorHandle.ReportCapture(dxRootPath, SensorSpatialData.FromGameObjects(m_EgoMarker == null ? null : m_EgoMarker.gameObject, gameObject), m_PersistentSensorData.Select(kvp => (kvp.Key, kvp.Value)).ToArray());

            Func <AsyncRequest <CaptureCamera.CaptureState>, AsyncRequest.Result> colorFunctor;
            var width  = cam.pixelWidth;
            var height = cam.pixelHeight;
            var flipY  = ShouldFlipY(cam);

            colorFunctor = r =>
            {
                using (s_WriteFrame.Auto())
                {
                    var dataColorBuffer = (byte[])r.data.colorBuffer;
                    if (flipY)
                    {
                        FlipImageY(dataColorBuffer, height);
                    }

                    byte[] encodedData;
                    using (s_EncodeAndSave.Auto())
                    {
                        encodedData = ImageConversion.EncodeArrayToPNG(dataColorBuffer, GraphicsFormat.R8G8B8A8_UNorm, (uint)width, (uint)height);
                    }

                    return(!FileProducer.Write(captureFilename, encodedData) ? AsyncRequest.Result.Error : AsyncRequest.Result.Completed);
                }
            };

            CaptureCamera.Capture(cam, colorFunctor);

            Profiler.EndSample();
        }