private void Start()
        {
            CalibrationDataHelper.Initialize();
            var chessboardImageFileNames = CalibrationDataHelper.GetChessboardImageFileNames();

            foreach (var fileName in chessboardImageFileNames)
            {
                var texture = CalibrationDataHelper.LoadChessboardImage(fileName);
                if (texture == null ||
                    !ProcessChessboardImage(texture))
                {
                    Debug.LogWarning($"Failed to process/locate chessboard image: {fileName}");
                }
                else
                {
                    CalibrationDataHelper.SaveChessboardDetectedImage(texture, fileName);
                }
            }

            if (chessboardHeatmap)
            {
                CalibrationDataHelper.SaveImage(chessboardHeatmap, "ChessboardHeatmap");
            }

            if (chessboardCorners)
            {
                CalibrationDataHelper.SaveImage(chessboardCorners, "ChessboardCorners");
            }
        }
        public void TakePhoto()
        {
            if (CompositorWrapper.IsInitialized)
            {
                var dslrTexture = CompositorWrapper.Instance.GetVideoCameraTexture();
                var fileName    = CalibrationDataHelper.GetUniqueFileName();
                CalibrationDataHelper.SaveChessboardImage(dslrTexture, fileName);

                if (!ProcessChessboardImage(dslrTexture))
                {
                    Debug.LogWarning($"Failed to process/locate chessboard in dataset: {fileName}");
                }
                else
                {
                    processedImageCount++;
                    CalibrationDataHelper.SaveChessboardDetectedImage(dslrTexture, fileName);
                    CalibrationDataHelper.SaveImage(chessboardHeatmap, "ChessboardHeatmap");
                    CalibrationDataHelper.SaveImage(chessboardCorners, "ChessboardCorners");
                }
            }
            else
            {
                Debug.LogWarning("CompositorWrapper isn't initialized, failed to take photo.");
            }
        }
        private void Update()
        {
            if (feedImage != null &&
                feedImage.texture == null)
            {
                feedImage.texture = CompositorWrapper.Instance.GetVideoCameraFeed();
            }

            if (cornersImage)
            {
                cornersImage.texture = chessboardCorners;
            }

            if (heatmapImage)
            {
                heatmapImage.texture = chessboardHeatmap;
            }

            if (Input.GetKeyDown(KeyCode.Space))
            {
                var dslrTexture = CompositorWrapper.Instance.GetVideoCameraTexture();
                var fileName    = CalibrationDataHelper.GetUniqueFileName();
                CalibrationDataHelper.SaveChessboardImage(dslrTexture, fileName);

                if (!ProcessChessboardImage(dslrTexture))
                {
                    Debug.LogWarning($"Failed to process/locate chessboard in dataset: {fileName}");
                }
                else
                {
                    CalibrationDataHelper.SaveChessboardDetectedImage(dslrTexture, fileName);
                    CalibrationDataHelper.SaveImage(chessboardHeatmap, "ChessboardHeatmap");
                    CalibrationDataHelper.SaveImage(chessboardCorners, "ChessboardCorners");
                }
            }

            if (Input.GetKeyDown(KeyCode.Return))
            {
                Debug.Log("Starting Camera Intrinsics calculation.");
                intrinsics = CalibrationAPI.Instance.CalculateChessboardIntrinsics(chessSquareSize);
                Debug.Log($"Chessboard intrinsics reprojection error: {intrinsics.ToString()}");
                var file = CalibrationDataHelper.SaveCameraIntrinsics(intrinsics);
                Debug.Log($"Camera Intrinsics saved to file: {file}");
            }
        }