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