Ejemplo n.º 1
0
            // MonoBehaviour methods

            /// <summary>
            /// Initializes the trackers list.
            /// </summary>
            protected override void Awake()
            {
                base.Awake();

                // Initialize the trackers
                MarkerTracker      = new ArucoMarkerTracker();
                additionalTrackers = new Dictionary <System.Type, ArucoObjectTracker>()
                {
                    { typeof(ArucoGridBoard), new ArucoGridBoardTracker() },
                    { typeof(ArucoCharucoBoard), new ArucoCharucoBoardTracker() },
                    { typeof(ArucoDiamond), new ArucoDiamondTracker() }
                };

                // Initialize the tracking thread
                trackingMutex  = new Mutex();
                trackingThread = new Thread(() =>
                {
                    try
                    {
                        while (true)
                        {
                            Track();
                        }
                    }
                    catch (System.Exception e)
                    {
                        trackingMutex.WaitOne();
                        trackingException = e;
                        trackingMutex.ReleaseMutex();
                    }
                });
            }
Ejemplo n.º 2
0
            public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;

                Std.VectorVectorPoint2f diamondCorners = null;
                Std.VectorVec4i         diamondIds     = null;

                if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0)
                {
                    if (cameraParameters == null)
                    {
                        Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary],
                                                   DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds);
                    }
                    else
                    {
                        Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary],
                                                   DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds, cameraParameters.CameraMatrices[cameraId],
                                                   cameraParameters.DistCoeffs[cameraId]);
                    }
                }

                DiamondCorners[cameraId][dictionary]   = diamondCorners;
                DiamondIds[cameraId][dictionary]       = diamondIds;
                DetectedDiamonds[cameraId][dictionary] = (diamondIds != null) ? (int)diamondIds.Size() : 0;
            }
Ejemplo n.º 3
0
            // ArucoObjectTracker methods

            public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;

                if (arucoTracker.RefineDetectedMarkers && arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0)
                {
                    foreach (var arucoBoard in arucoTracker.GetArucoObjects <ArucoGridBoard>(dictionary))
                    {
                        Aruco.RefineDetectedMarkers(image, arucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary],
                                                    markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]);
                        markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size();
                    }
                }
            }
Ejemplo n.º 4
0
            // ArucoObjectTracker methods

            public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)
            {
                ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;

                foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects <ArucoCharucoBoard>(dictionary))
                {
                    if (arucoTracker.RefineDetectedMarkers)
                    {
                        Aruco.RefineDetectedMarkers(image, arucoCharucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary],
                                                    markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]);
                        markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size();
                    }

                    Std.VectorPoint2f charucoCorners = null;
                    Std.VectorInt     charucoIds     = null;

                    if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0)
                    {
                        if (cameraParameters == null)
                        {
                            Aruco.InterpolateCornersCharuco(markerTracker.MarkerCorners[cameraId][dictionary],
                                                            markerTracker.MarkerIds[cameraId][dictionary], arucoTracker.ArucoCamera.Images[cameraId],
                                                            (Aruco.CharucoBoard)arucoCharucoBoard.Board, out charucoCorners, out charucoIds);
                        }
                        else
                        {
                            Aruco.InterpolateCornersCharuco(markerTracker.MarkerCorners[cameraId][dictionary],
                                                            markerTracker.MarkerIds[cameraId][dictionary], arucoTracker.ArucoCamera.Images[cameraId],
                                                            (Aruco.CharucoBoard)arucoCharucoBoard.Board, out charucoCorners, out charucoIds, cameraParameters.CameraMatrices[cameraId],
                                                            cameraParameters.DistCoeffs[cameraId]);
                        }
                    }

                    arucoCharucoBoard.DetectedCorners = charucoCorners;
                    arucoCharucoBoard.DetectedIds     = charucoIds;
                }
            }
Ejemplo n.º 5
0
            // MonoBehaviour methods

            /// <summary>
            /// Initializes the trackers list and the tracking thread and susbcribe to events from ArucoObjectController for every ArUco object added or removed.
            /// </summary>
            protected override void Awake()
            {
                base.Awake();

                // Initialize the trackers
                MarkerTracker      = new ArucoMarkerTracker();
                additionalTrackers = new Dictionary <System.Type, ArucoObjectTracker>()
                {
                    { typeof(ArucoGridBoard), new ArucoGridBoardTracker() },
                    { typeof(ArucoCharucoBoard), new ArucoCharucoBoardTracker() },
                    { typeof(ArucoDiamond), new ArucoDiamondTracker() }
                };

                // Initialize the tracking thread
                trackingMutex  = new Mutex();
                trackingThread = new Thread(() =>
                {
                    try
                    {
                        while (IsConfigured && IsStarted)
                        {
                            trackingMutex.WaitOne();
                            Track();
                            trackingMutex.ReleaseMutex();
                        }
                    }
                    catch (System.Exception e)
                    {
                        trackingException = e;
                        trackingMutex.ReleaseMutex();
                    }
                });

                // Susbcribe to events from ArucoObjectController
                ArucoObjectAdded   += ArucoObjectsController_ArucoObjectAdded;
                ArucoObjectRemoved += ArucoObjectsController_ArucoObjectRemoved;
            }