public IEnumerator EnableSemanticSegmentation_GeneratesCorrectDataset([Values(true, false)] bool enabled)
        {
            SemanticSegmentationLabeler semanticSegmentationLabeler = null;

            SetupCamera(pc =>
            {
                semanticSegmentationLabeler = new SemanticSegmentationLabeler(CreateSemanticSegmentationLabelConfig());
                pc.AddLabeler(semanticSegmentationLabeler);
            }, enabled);

            string expectedImageFilename = $"segmentation_{Time.frameCount}.png";

            this.AddTestObjectForCleanup(TestHelper.CreateLabeledPlane());
            yield return(null);

            DatasetCapture.ResetSimulation();

            if (enabled)
            {
                var capturesPath = Path.Combine(DatasetCapture.OutputDirectory, "captures_000.json");
                var capturesJson = File.ReadAllText(capturesPath);
                var imagePath    = $"{semanticSegmentationLabeler.semanticSegmentationDirectory}/{expectedImageFilename}";
                StringAssert.Contains(imagePath, capturesJson);
            }
            else
            {
                DirectoryAssert.DoesNotExist(DatasetCapture.OutputDirectory);
            }
        }
コード例 #2
0
        public IEnumerator SemanticSegmentationPass_WithTextureOverride_RendersToOverride([Values(true, false)] bool showVisualizations)
        {
            var expectedPixelValue    = new Color32(0, 0, 255, 255);
            var targetTextureOverride = new RenderTexture(2, 2, 1, RenderTextureFormat.R8);

            var cameraObject = SetupCamera(out var perceptionCamera, showVisualizations);
            var labelConfig  = ScriptableObject.CreateInstance <SemanticSegmentationLabelConfig>();

            labelConfig.Init(new List <SemanticSegmentationLabelEntry>()
            {
                new SemanticSegmentationLabelEntry()
                {
                    label = "label",
                    color = expectedPixelValue
                }
            });
            var semanticSegmentationLabeler = new SemanticSegmentationLabeler(labelConfig, targetTextureOverride);

            perceptionCamera.AddLabeler(semanticSegmentationLabeler);
            cameraObject.SetActive(true);
            AddTestObjectForCleanup(cameraObject);
            AddTestObjectForCleanup(TestHelper.CreateLabeledPlane());

            yield return(null);

            TestHelper.ReadRenderTextureRawData <Color32>(targetTextureOverride, data =>
            {
                CollectionAssert.AreEqual(Enumerable.Repeat(expectedPixelValue, targetTextureOverride.width * targetTextureOverride.height), data);
            });
        }
コード例 #3
0
        GameObject SetupCameraSemanticSegmentation(string name)
        {
            var object1 = new GameObject(name);

            object1.SetActive(false);
            var camera            = object1.AddComponent <Camera>();
            var perceptionCamera1 = object1.AddComponent <PerceptionCamera>();

            perceptionCamera1.showVisualizations = true;

#if HDRP_PRESENT
            var hdAdditionalCameraData = object1.AddComponent <HDAdditionalCameraData>();
#endif

            var labelConfig = ScriptableObject.CreateInstance <SemanticSegmentationLabelConfig>();

            labelConfig.Init(new List <SemanticSegmentationLabelEntry>()
            {
                new SemanticSegmentationLabelEntry()
                {
                    label = "label",
                    color = new Color32(10, 20, 30, System.Byte.MaxValue)
                }
            });

            var semanticSegmentationLabeler = new SemanticSegmentationLabeler(labelConfig);

            perceptionCamera1.AddLabeler(semanticSegmentationLabeler);
            return(object1);
        }
コード例 #4
0
        GameObject SetupCameraSemanticSegmentation(Action <SemanticSegmentationLabeler.ImageReadbackEventArgs> onSegmentationImageReceived, bool showVisualizations)
        {
            var cameraObject = SetupCamera(out var perceptionCamera, showVisualizations);
            var labelConfig  = ScriptableObject.CreateInstance <SemanticSegmentationLabelConfig>();

            labelConfig.Init(new List <SemanticSegmentationLabelEntry>()
            {
                new SemanticSegmentationLabelEntry()
                {
                    label = "label",
                    color = k_SemanticPixelValue
                }
            });
            var semanticSegmentationLabeler = new SemanticSegmentationLabeler(labelConfig);

            semanticSegmentationLabeler.imageReadback += onSegmentationImageReceived;
            perceptionCamera.AddLabeler(semanticSegmentationLabeler);
            cameraObject.SetActive(true);
            return(cameraObject);
        }
コード例 #5
0
        public IEnumerator SemanticSegmentationPass_WithTextureOverride_RendersToOverride()
        {
            int timesSegmentationImageReceived = 0;
            var expectedPixelValue             = new Color32(0, 0, 255, 255);
            var targetTextureOverride          = new RenderTexture(2, 2, 1, RenderTextureFormat.R8);

            var cameraObject = SetupCamera(out var perceptionCamera);
            var labelConfig  = ScriptableObject.CreateInstance <SemanticSegmentationLabelConfig>();

            labelConfig.Init(new List <SemanticSegmentationLabelEntry>()
            {
                new SemanticSegmentationLabelEntry()
                {
                    label = "label",
                    color = expectedPixelValue
                }
            });
            var semanticSegmentationLabeler = new SemanticSegmentationLabeler(labelConfig, targetTextureOverride);

            perceptionCamera.AddLabeler(semanticSegmentationLabeler);
            cameraObject.SetActive(true);
            AddTestObjectForCleanup(cameraObject);
            AddTestObjectForCleanup(TestHelper.CreateLabeledPlane());

            yield return(null);

            //NativeArray<Color32> readbackArray = new NativeArray<Color32>(targetTextureOverride.width * targetTextureOverride.height, Allocator.Temp);
            var request = AsyncGPUReadback.Request(targetTextureOverride, callback: r =>
            {
                CollectionAssert.AreEqual(Enumerable.Repeat(expectedPixelValue, targetTextureOverride.width * targetTextureOverride.height), r.GetData <Color32>());
            });

            AsyncGPUReadback.WaitAllRequests();
            //request.WaitForCompletion();
            Assert.IsTrue(request.done);
            Assert.IsFalse(request.hasError);
        }