From de29a208b48084948863605f286e579263062d6a Mon Sep 17 00:00:00 2001 From: Jens Ahrensfeld Date: Fri, 28 Nov 2025 20:06:16 +0100 Subject: [PATCH] added device id as CLI argument --- ar_tag_pose/board_pose.py | 5 +++-- ar_tag_pose/board_pose_aruco.py | 14 +++++++++++--- ar_tag_pose/board_pose_charuco.py | 14 +++++++++++--- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/ar_tag_pose/board_pose.py b/ar_tag_pose/board_pose.py index 50254e4..b4cfa29 100644 --- a/ar_tag_pose/board_pose.py +++ b/ar_tag_pose/board_pose.py @@ -18,7 +18,8 @@ class BoardPose(abc.ABC): obj_points_list = [] img_points_list = [] - def __init__(self): + def __init__(self, device_id: int): + self.device_id = device_id Path.mkdir(Path(RESULTS_FOLDER), exist_ok=True) @staticmethod @@ -76,7 +77,7 @@ class BoardPose(abc.ABC): def process(self): # Open camera - cap = cv.VideoCapture(0) + cap = cv.VideoCapture(self.device_id) BoardPose.cap_init(cap) if not cap.isOpened(): diff --git a/ar_tag_pose/board_pose_aruco.py b/ar_tag_pose/board_pose_aruco.py index edc7507..dee2fb0 100644 --- a/ar_tag_pose/board_pose_aruco.py +++ b/ar_tag_pose/board_pose_aruco.py @@ -1,5 +1,6 @@ import cv2 as cv import numpy as np +import argparse from ar_tag_pose.board_pose import BoardPose from ar_tag_pose.aruco_types import ARUCO_DICT @@ -14,8 +15,8 @@ def factory(dict_type: int, board_size: cv.typing.Size, marker_length: float=100 return detector, board, name class BoardPoseAruco(BoardPose): - def __init__(self, dict_type: int, board_size: tuple[int, int]): - BoardPose.__init__(self) + def __init__(self, device_id: int, dict_type: int, board_size: tuple[int, int]): + BoardPose.__init__(self, device_id) self.board_size = board_size self.detector, self.board, self.name = factory(dict_type, board_size) @@ -84,7 +85,14 @@ class BoardPoseAruco(BoardPose): return pose, r_vec, t_vec def main(): - pose = BoardPoseAruco(10, (5, 5)) + # construct the argument parser and parse the arguments + ap = argparse.ArgumentParser() + ap.add_argument("-i", "--device_id", type=int, + default=0, + help="Camera device index ") + args = vars(ap.parse_args()) + + pose = BoardPoseAruco(args["device_id"], 10, (5, 5)) pose.board_image_generate(margin_length=10) pose.calibrate_load() pose.process() diff --git a/ar_tag_pose/board_pose_charuco.py b/ar_tag_pose/board_pose_charuco.py index 95c1e17..ea391b6 100644 --- a/ar_tag_pose/board_pose_charuco.py +++ b/ar_tag_pose/board_pose_charuco.py @@ -1,5 +1,6 @@ import cv2 as cv import numpy as np +import argparse from ar_tag_pose.board_pose import BoardPose from ar_tag_pose.aruco_types import ARUCO_DICT @@ -14,8 +15,8 @@ def factory(dict_type: int, board_size: cv.typing.Size, square_length: float = 5 return detector, board, name class BoardPoseCharuco(BoardPose): - def __init__(self, dict_type: int, board_size: tuple[int, int]): - BoardPose.__init__(self) + def __init__(self, device_id: int, dict_type: int, board_size: tuple[int, int]): + BoardPose.__init__(self, device_id) self.board_size = board_size self.detector, self.board, self.name = factory(dict_type, board_size) @@ -82,7 +83,14 @@ class BoardPoseCharuco(BoardPose): return pose, r_vec, t_vec def main(): - pose = BoardPoseCharuco(10, (6, 7)) + # construct the argument parser and parse the arguments + ap = argparse.ArgumentParser() + ap.add_argument("-i", "--device_id", type=int, + default=0, + help="Camera device index ") + args = vars(ap.parse_args()) + + pose = BoardPoseCharuco(args["device_id"], 10, (6, 7)) pose.board_image_generate() pose.calibrate_load() pose.process()