コード例 #1
0
        static GameObject SetupCamera(IdLabelConfig config, KeypointTemplate template, Action <int, List <KeypointLabeler.KeypointEntry> > computeListener, RenderTexture renderTexture = null)
        {
            var cameraObject = new GameObject();

            cameraObject.SetActive(false);
            var camera = cameraObject.AddComponent <Camera>();

            camera.orthographic  = false;
            camera.fieldOfView   = 60;
            camera.nearClipPlane = 0.3f;
            camera.farClipPlane  = 1000;

            camera.transform.position = new Vector3(0, 0, -10);

            if (renderTexture)
            {
                camera.targetTexture = renderTexture;
            }

            var perceptionCamera = cameraObject.AddComponent <PerceptionCamera>();

            perceptionCamera.captureRgbImages = false;
            var keyPointLabeler = new KeypointLabeler(config, template);

            if (computeListener != null)
            {
                keyPointLabeler.KeypointsComputed += computeListener;
            }

            perceptionCamera.AddLabeler(keyPointLabeler);

            return(cameraObject);
        }
コード例 #2
0
        static GameObject SetupCamera(IdLabelConfig config, Action <int, List <BoundingBox3DLabeler.BoxData> > computeListener)
        {
            var cameraObject = new GameObject();

            cameraObject.SetActive(false);
            var camera = cameraObject.AddComponent <Camera>();

            camera.orthographic  = false;
            camera.fieldOfView   = 60;
            camera.nearClipPlane = 0.3f;
            camera.farClipPlane  = 1000;

            var perceptionCamera = cameraObject.AddComponent <PerceptionCamera>();

            perceptionCamera.captureRgbImages = false;
            var bboxLabeler = new BoundingBox3DLabeler(config);

            if (computeListener != null)
            {
                bboxLabeler.BoundingBoxComputed += computeListener;
            }

            perceptionCamera.AddLabeler(bboxLabeler);

            return(cameraObject);
        }
コード例 #3
0
        public IEnumerator TryGet_ReturnsFalse_ForNonMatchingLabel_WithOtherMatches()
        {
            var label = "label";
            //only way to guarantee registration order is to run frames.
            //We want to ensure labeledPlane is registered before labeledPlane2 so that the cache does not early out
            var labeledPlane = TestHelper.CreateLabeledPlane(label: "foo");

            AddTestObjectForCleanup(labeledPlane);
            yield return(null);

            var labeledPlane2 = TestHelper.CreateLabeledPlane(label: label);

            AddTestObjectForCleanup(labeledPlane2);
            var config = new IdLabelConfig();

            config.Init(new[]
            {
                new IdLabelEntry()
                {
                    id    = 1,
                    label = label
                },
            });
            using (var cache = new LabelEntryMatchCache(config))
            {
                //allow label to be registered
                yield return(null);

                Assert.IsFalse(cache.TryGetLabelEntryFromInstanceId(labeledPlane.GetComponent <Labeling>().instanceId, out var labelEntry, out var index));
                Assert.AreEqual(-1, index);
                Assert.AreEqual(default(IdLabelEntry), labelEntry);
            }
        }
コード例 #4
0
        public IEnumerator TryGet_ReturnsTrue_ForMatchingLabel()
        {
            var label        = "label";
            var labeledPlane = TestHelper.CreateLabeledPlane(label: label);

            AddTestObjectForCleanup(labeledPlane);
            var config = new IdLabelConfig();

            config.Init(new[]
            {
                new IdLabelEntry()
                {
                    id    = 1,
                    label = label
                },
            });
            using (var cache = new LabelEntryMatchCache(config))
            {
                //allow label to be registered
                yield return(null);

                Assert.IsTrue(cache.TryGetLabelEntryFromInstanceId(labeledPlane.GetComponent <Labeling>().instanceId, out var labelEntry, out var index));
                Assert.AreEqual(0, index);
                Assert.AreEqual(config.labelEntries[0], labelEntry);
            }
        }
コード例 #5
0
        public void TryGet_ReturnsFalse_ForInvalidInstanceId()
        {
            var config = new IdLabelConfig();

            using (var cache = new LabelEntryMatchCache(config))
            {
                Assert.IsFalse(cache.TryGetLabelEntryFromInstanceId(100, out var labelEntry, out var index));
                Assert.AreEqual(-1, index);
                Assert.AreEqual(default(IdLabelEntry), labelEntry);
            }
        }
コード例 #6
0
 protected override void OnAwake()
 {
     m_ForegroundObjectPlacementMetricDefinition = DatasetCapture.RegisterMetricDefinition("Per Frame Foreground Object Placement Info", $"Reports the world position, scale, rotation, and label id of objects carrying a {nameof(ForegroundObjectMetricReporterTag)} component.", new Guid(k_LayerOneForegroundObjectPlacementInfoMetricGuid));
     m_LabelingComponentsCache = new Dictionary <GameObject, Labeling>();
     if (labelConfigForObjectPlacementMetrics == null)
     {
         var perceptionCamera = Object.FindObjectOfType <PerceptionCamera>();
         if (perceptionCamera && perceptionCamera.labelers.Count > 0 && perceptionCamera.labelers[0] is BoundingBox2DLabeler boundingBox2DLabeler)
         {
             labelConfigForObjectPlacementMetrics = boundingBox2DLabeler.idLabelConfig;
         }
     }
 }
コード例 #7
0
 public PlacementStatics(int maxFrames, int maxForegroundObjectsPerFrame, float scalingMin, float scalingSize, float occludingHueMaxOffset, float backgroundObjectInForegroundChance, GameObject[] foreground, GameObject[] backgroundPrefabs, Texture2D[] backgroundImages, NativeArray <Quaternion> inPlaneRot, NativeArray <Quaternion> outPlaneRot, NativeArray <float> scaleFactors, IdLabelConfig idLabelConfig)
 {
     MaxFrames             = maxFrames;
     ForegroundPrefabs     = foreground;
     BackgroundPrefabs     = backgroundPrefabs;
     InPlaneRotations      = inPlaneRot;
     OutOfPlaneRotations   = outPlaneRot;
     ScaleFactors          = scaleFactors;
     IdLabelConfig         = idLabelConfig;
     ScalingMin            = scalingMin;
     ScalingSize           = scalingSize;
     OccludingHueMaxOffset = occludingHueMaxOffset;
     BackgroundObjectInForegroundChance = backgroundObjectInForegroundChance;
     MaxForegroundObjectsPerFrame       = maxForegroundObjectsPerFrame;
     BackgroundImages = backgroundImages;
 }
コード例 #8
0
        public IEnumerator TryGet_ReturnsFalse_ForNonMatchingLabel()
        {
            var label        = "label";
            var labeledPlane = TestHelper.CreateLabeledPlane(label: label);

            AddTestObjectForCleanup(labeledPlane);
            var config = new IdLabelConfig();

            using (var cache = new LabelEntryMatchCache(config))
            {
                //allow label to be registered
                yield return(null);

                Assert.IsFalse(cache.TryGetLabelEntryFromInstanceId(labeledPlane.GetComponent <Labeling>().instanceId, out var labelEntry, out var index));
                Assert.AreEqual(-1, index);
                Assert.AreEqual(default(IdLabelEntry), labelEntry);
            }
        }
コード例 #9
0
        private GameObject SetupCameraBoundingBox2D(Action <BoundingBox2DLabeler.BoundingBoxesCalculatedEventArgs> onBoundingBoxesCalculated, IdLabelConfig idLabelConfig)
        {
            var cameraObject = SetupCamera(camera =>
            {
                camera.showVisualizations = false;
                var boundingBox2DLabeler  = new BoundingBox2DLabeler(idLabelConfig);
                boundingBox2DLabeler.boundingBoxesCalculated += onBoundingBoxesCalculated;
                camera.AddLabeler(boundingBox2DLabeler);
            });

            return(cameraObject);
        }