add camera name to params
This commit is contained in:
@@ -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
@@ -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"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user