stereo-charuco-pipeline 0.1.1__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/PKG-INFO +1 -1
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/pyproject.toml +1 -1
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/run_unified.py +4 -4
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/calibration_ui_advanced.py +37 -19
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/cli.py +8 -8
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/.gitignore +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/README.md +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/configs/default.yaml +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/requirements.txt +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/_test_config.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/_test_full_pipeline.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/_test_intrinsic.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/convert_to_mp4.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/probe_camera.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/record_and_split.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/record_raw.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/run_calibration_ui.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/run_calibration_ui_advanced.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/run_pipeline_ui.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/split_lr.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/__init__.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/auto_calibrate.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/calibration_ui.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/camera.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/config.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/configs/default.yaml +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/ffmpeg.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/paths.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/pipeline_ui.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/project_manager.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/smart_recorder.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/ui.py +0 -0
- {stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/viz_3d.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: stereo-charuco-pipeline
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: Stereo ChArUco 3D motion capture pipeline with auto-calibration
|
|
5
5
|
Project-URL: repository, https://github.com/pythoner0921/stereo-charuco-3d-pipeline
|
|
6
6
|
Requires-Python: <3.13,>=3.10
|
|
@@ -63,13 +63,13 @@ def main():
|
|
|
63
63
|
print(f" New: {context.is_new}")
|
|
64
64
|
print(f" Needs calibration: {context.needs_calibration}")
|
|
65
65
|
|
|
66
|
-
# ── Stage 2: Calibration UI (if needed)
|
|
66
|
+
# ── Stage 2: Advanced Calibration UI (if needed) ─────────
|
|
67
67
|
if context.needs_calibration:
|
|
68
|
-
print("\nOpening Calibration Recording UI...")
|
|
68
|
+
print("\nOpening Advanced Calibration Recording UI...")
|
|
69
69
|
|
|
70
|
-
from recorder.
|
|
70
|
+
from recorder.calibration_ui_advanced import CalibrationUIAdvanced
|
|
71
71
|
|
|
72
|
-
calib_app =
|
|
72
|
+
calib_app = CalibrationUIAdvanced(
|
|
73
73
|
config_path=config_path,
|
|
74
74
|
project_dir=context.project_dir,
|
|
75
75
|
on_complete=lambda: None, # Signal handled via destroy()
|
|
@@ -489,14 +489,24 @@ class OverlayRenderer:
|
|
|
489
489
|
|
|
490
490
|
class CalibrationUIAdvanced(tk.Tk):
|
|
491
491
|
|
|
492
|
-
def __init__(self, config_path: Optional[Path] = None
|
|
492
|
+
def __init__(self, config_path: Optional[Path] = None,
|
|
493
|
+
project_dir: Optional[Path] = None,
|
|
494
|
+
on_complete: Optional[Callable[[], None]] = None):
|
|
493
495
|
super().__init__()
|
|
494
|
-
self.title("Stereo Calibration - Advanced (Live Detection)")
|
|
495
|
-
self.geometry("1280x820")
|
|
496
|
-
self.configure(bg="#2b2b2b")
|
|
497
496
|
|
|
498
497
|
self._load_config(config_path)
|
|
499
498
|
|
|
499
|
+
# Dynamic project directory (overrides config-derived path)
|
|
500
|
+
self._project_dir: Optional[Path] = Path(project_dir) if project_dir else None
|
|
501
|
+
self._on_complete = on_complete
|
|
502
|
+
|
|
503
|
+
if self._project_dir:
|
|
504
|
+
self.title(f"Stereo Calibration - Advanced - {self._project_dir.name}")
|
|
505
|
+
else:
|
|
506
|
+
self.title("Stereo Calibration - Advanced (Live Detection)")
|
|
507
|
+
self.geometry("1280x820")
|
|
508
|
+
self.configure(bg="#2b2b2b")
|
|
509
|
+
|
|
500
510
|
# State
|
|
501
511
|
self._state = "idle" # idle | preview | recording | processing
|
|
502
512
|
self._cam: Optional[CameraRecorder] = None
|
|
@@ -740,14 +750,17 @@ class CalibrationUIAdvanced(tk.Tk):
|
|
|
740
750
|
|
|
741
751
|
# Session dir under raw_output/
|
|
742
752
|
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
out_base = Path(self.config.output_base)
|
|
746
|
-
if not out_base.is_absolute():
|
|
747
|
-
out_base = tool_root / out_base
|
|
748
|
-
project_root = out_base.parent
|
|
753
|
+
if self._project_dir:
|
|
754
|
+
project_root = self._project_dir
|
|
749
755
|
else:
|
|
750
|
-
|
|
756
|
+
from .paths import tool_root as _tool_root; tool_root = _tool_root()
|
|
757
|
+
if self.config.output_base:
|
|
758
|
+
out_base = Path(self.config.output_base)
|
|
759
|
+
if not out_base.is_absolute():
|
|
760
|
+
out_base = tool_root / out_base
|
|
761
|
+
project_root = out_base.parent
|
|
762
|
+
else:
|
|
763
|
+
project_root = tool_root
|
|
751
764
|
raw_output_dir = project_root / "raw_output"
|
|
752
765
|
self._session_dir = raw_output_dir / f"calib_session_{ts}"
|
|
753
766
|
self._session_dir.mkdir(parents=True, exist_ok=True)
|
|
@@ -809,14 +822,17 @@ class CalibrationUIAdvanced(tk.Tk):
|
|
|
809
822
|
# ── post-process ────────────────────────────────────────────────
|
|
810
823
|
def _post_process(self):
|
|
811
824
|
try:
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
out_base = Path(self.config.output_base)
|
|
815
|
-
if not out_base.is_absolute():
|
|
816
|
-
out_base = tool_root / out_base
|
|
817
|
-
project_root = out_base.parent
|
|
825
|
+
if self._project_dir:
|
|
826
|
+
project_root = self._project_dir
|
|
818
827
|
else:
|
|
819
|
-
|
|
828
|
+
from .paths import tool_root as _tool_root; tool_root = _tool_root()
|
|
829
|
+
if self.config.output_base:
|
|
830
|
+
out_base = Path(self.config.output_base)
|
|
831
|
+
if not out_base.is_absolute():
|
|
832
|
+
out_base = tool_root / out_base
|
|
833
|
+
project_root = out_base.parent
|
|
834
|
+
else:
|
|
835
|
+
project_root = tool_root
|
|
820
836
|
|
|
821
837
|
# Output to both intrinsic and extrinsic
|
|
822
838
|
intrinsic_dir = project_root / "calibration" / "intrinsic"
|
|
@@ -1003,9 +1019,11 @@ def main():
|
|
|
1003
1019
|
import argparse
|
|
1004
1020
|
ap = argparse.ArgumentParser(description="Advanced Stereo Calibration UI")
|
|
1005
1021
|
ap.add_argument("--config", type=str, default=None)
|
|
1022
|
+
ap.add_argument("--project-dir", type=str, default=None)
|
|
1006
1023
|
args = ap.parse_args()
|
|
1007
1024
|
path = Path(args.config) if args.config else None
|
|
1008
|
-
|
|
1025
|
+
proj = Path(args.project_dir) if args.project_dir else None
|
|
1026
|
+
app = CalibrationUIAdvanced(path, project_dir=proj)
|
|
1009
1027
|
app.mainloop()
|
|
1010
1028
|
|
|
1011
1029
|
|
|
@@ -47,12 +47,12 @@ def main():
|
|
|
47
47
|
print(f" New: {context.is_new}")
|
|
48
48
|
print(f" Needs calibration: {context.needs_calibration}")
|
|
49
49
|
|
|
50
|
-
# Stage 2: Calibration UI (if needed)
|
|
50
|
+
# Stage 2: Advanced Calibration UI (if needed)
|
|
51
51
|
if context.needs_calibration:
|
|
52
|
-
print("\nOpening Calibration Recording UI...")
|
|
53
|
-
from .
|
|
52
|
+
print("\nOpening Advanced Calibration Recording UI...")
|
|
53
|
+
from .calibration_ui_advanced import CalibrationUIAdvanced
|
|
54
54
|
|
|
55
|
-
calib_app =
|
|
55
|
+
calib_app = CalibrationUIAdvanced(
|
|
56
56
|
config_path=config_path,
|
|
57
57
|
project_dir=context.project_dir,
|
|
58
58
|
on_complete=lambda: None,
|
|
@@ -73,19 +73,19 @@ def main():
|
|
|
73
73
|
|
|
74
74
|
|
|
75
75
|
def calibrate_only():
|
|
76
|
-
"""Calibration UI standalone."""
|
|
76
|
+
"""Advanced Calibration UI standalone."""
|
|
77
77
|
logging.basicConfig(level=logging.INFO, format="%(levelname)s %(name)s: %(message)s")
|
|
78
78
|
|
|
79
|
-
parser = argparse.ArgumentParser(description="Stereo Calibration UI")
|
|
79
|
+
parser = argparse.ArgumentParser(description="Stereo Calibration UI (Advanced)")
|
|
80
80
|
parser.add_argument("--config", type=str, default=None)
|
|
81
81
|
parser.add_argument("--project-dir", type=str, default=None)
|
|
82
82
|
args = parser.parse_args()
|
|
83
83
|
|
|
84
84
|
config_path = _resolve_config(args.config)
|
|
85
85
|
|
|
86
|
-
from .
|
|
86
|
+
from .calibration_ui_advanced import CalibrationUIAdvanced
|
|
87
87
|
|
|
88
|
-
app =
|
|
88
|
+
app = CalibrationUIAdvanced(
|
|
89
89
|
config_path=config_path,
|
|
90
90
|
project_dir=Path(args.project_dir) if args.project_dir else None,
|
|
91
91
|
)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/_test_full_pipeline.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/scripts/run_calibration_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/auto_calibrate.py
RENAMED
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/calibration_ui.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/configs/default.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/project_manager.py
RENAMED
|
File without changes
|
{stereo_charuco_pipeline-0.1.1 → stereo_charuco_pipeline-0.2.0}/src/recorder/smart_recorder.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|