add camera name to params

This commit is contained in:
2025-12-05 17:01:08 +01:00
parent 8f5a456325
commit 93c93b7bb9
2 changed files with 26 additions and 16 deletions
+24 -15
View File
@@ -10,6 +10,7 @@ from ar_tag_pose.utils import to_tf, to_euler, draw_text
from detector_board import BoardDetector from detector_board import BoardDetector
from detector_board_aruco import BoardDetectorAruco from detector_board_aruco import BoardDetectorAruco
from detector_board_charuco import BoardDetectorCharuco from detector_board_charuco import BoardDetectorCharuco
from cv2_enumerate_cameras import enumerate_cameras
RESULTS_FOLDER = "results" RESULTS_FOLDER = "results"
@@ -19,6 +20,7 @@ class Detector(abc.ABC):
self.detector = detector self.detector = detector
self.out_file = out_file self.out_file = out_file
self.rotation_order = rotation_order self.rotation_order = rotation_order
self.camera_name = "UnknownCamera"
self.device_id = None self.device_id = None
self.src_video = None self.src_video = None
self.src_images = None self.src_images = None
@@ -37,13 +39,30 @@ class Detector(abc.ABC):
self.src_images = f"{os.path.dirname(source)}/{name}_%0{len(numeric_part)}d.{suffix}" self.src_images = f"{os.path.dirname(source)}/{name}_%0{len(numeric_part)}d.{suffix}"
Path.mkdir(Path(RESULTS_FOLDER), exist_ok=True) Path.mkdir(Path(RESULTS_FOLDER), exist_ok=True)
self.camera_name = "YourCameraNameHere"
self.cap = None
if self.device_id is not None:
# Open camera
self.cap = cv.VideoCapture(self.device_id)
self.cap_init()
elif self.src_video is not None:
# Open video file
self.cap = cv.VideoCapture(self.src_video)
elif self.src_images is not None:
# Open image file sequence
self.cap = cv.VideoCapture(self.src_images, cv.CAP_IMAGES)
def params_save(self): def params_save(self):
with open(f"{RESULTS_FOLDER}/{self.params["name"]}.json", 'w') as fp: with open(f"{RESULTS_FOLDER}/{self.params["name"]}.json", 'w') as fp:
json.dump(self.params, fp, indent=4) json.dump(self.params, fp, indent=4)
def cap_init(self, cap: cv.VideoCapture): def cap_init(self):
backends = {'V4L2': cv.CAP_V4L}
cam_dict = enumerate_cameras(backends[self.cap.getBackendName()])
self.camera_name = cam_dict[self.device_id].name
print(self.camera_name)
camera_params_default = { camera_params_default = {
cv.CAP_PROP_FRAME_WIDTH: 1920 * 2, cv.CAP_PROP_FRAME_WIDTH: 1920 * 2,
cv.CAP_PROP_FRAME_HEIGHT: 1080 * 2, cv.CAP_PROP_FRAME_HEIGHT: 1080 * 2,
@@ -60,7 +79,7 @@ class Detector(abc.ABC):
key = item key = item
value = camera[key] value = camera[key]
print(f"{item}: {value}") print(f"{item}: {value}")
cap.set(key, value) self.cap.set(key, value)
self.params['camera'] = {self.camera_name: camera} self.params['camera'] = {self.camera_name: camera}
self.params_save() self.params_save()
@@ -98,6 +117,7 @@ class Detector(abc.ABC):
calib = {self.camera_name: {str(det): {'mtx': mtx.tolist(), 'dist': dist.tolist()}}} calib = {self.camera_name: {str(det): {'mtx': mtx.tolist(), 'dist': dist.tolist()}}}
det.calibration_set(mtx, dist, None, None) det.calibration_set(mtx, dist, None, None)
self.params['calib'] = calib self.params['calib'] = calib
self.params_save()
print(f"Loaded {filename} successfully!") print(f"Loaded {filename} successfully!")
except FileNotFoundError: except FileNotFoundError:
pass pass
@@ -105,18 +125,7 @@ class Detector(abc.ABC):
pass pass
def process(self): def process(self):
cap = None cap = self.cap
if self.device_id is not None:
# Open camera
cap = cv.VideoCapture(self.device_id)
self.cap_init(cap)
elif self.src_video is not None:
# Open video file
cap = cv.VideoCapture(self.src_video)
elif self.src_images is not None:
# Open image file sequence
cap = cv.VideoCapture(self.src_images, cv.CAP_IMAGES)
if cap is None or not cap.isOpened(): if cap is None or not cap.isOpened():
print("Cannot open media") print("Cannot open media")
exit() exit()
+2 -1
View File
@@ -15,7 +15,8 @@ dependencies = [
"opencv-python", "opencv-python",
"opencv-contrib-python", "opencv-contrib-python",
"scipy", "scipy",
"reedsolo" "reedsolo",
"cv2_enumerate_cameras"
] ]
readme = "README.md" readme = "README.md"