provide filename for video output

This commit is contained in:
2025-12-01 17:50:49 +01:00
parent 6daf33b362
commit 540f230845
+14 -5
View File
@@ -24,8 +24,9 @@ def cap_init(cap: cv.VideoCapture):
class Detector(abc.ABC):
def __init__(self, source: str, detector: list[BoardDetector]):
def __init__(self, source: str, detector: list[BoardDetector], out_file: str|None = None):
self.detector = detector
self.out_file = out_file
self.device_id = None
self.src_video = None
self.src_images = None
@@ -152,7 +153,8 @@ class Detector(abc.ABC):
img_scaled = cv.resize(img, dsize=None, fx=0.5, fy=0.5)
cv.imshow('img', img_scaled)
out = out_writer(out, img_scaled)
if self.out_file is not None:
out = out_writer(out, img_scaled, filename=self.out_file)
if frame_go:
frame_num += 1
@@ -162,11 +164,11 @@ class Detector(abc.ABC):
cv.destroyAllWindows()
def out_writer(writer: cv.VideoWriter|None, frame: np.ndarray|None) -> cv.VideoWriter:
def out_writer(writer: cv.VideoWriter|None, frame: np.ndarray|None, filename: str = None) -> cv.VideoWriter:
if writer is None:
fourcc = cv.VideoWriter.fourcc(*"mp4v")
frame_size = (frame.shape[1], frame.shape[0])
writer = cv.VideoWriter(filename=f"{RESULTS_FOLDER}/out.mp4", fourcc=fourcc, fps=30.0, frameSize=frame_size)
writer = cv.VideoWriter(filename=f"{RESULTS_FOLDER}/{filename}", fourcc=fourcc, fps=30.0, frameSize=frame_size)
if writer is not None:
if frame is not None:
@@ -208,6 +210,9 @@ def main():
ap.add_argument("-p", "--name", type=str,
default='default',
help="Name of project")
ap.add_argument("-o", "--output",
action='store_true',
help="Enable video output")
args = vars(ap.parse_args())
msg_size = 3
@@ -224,7 +229,11 @@ def main():
det = BoardDetectorCharuco(f"{args["name"]}-{n}", args["dict_type"], board_id, (args["board_width"], args["board_height"]))
board_detector.append(det)
detector = Detector(args["source"], board_detector)
out_file = None
if args["output"]:
out_file = args["name"]
detector = Detector(args["source"], board_detector, out_file=out_file)
detector.board_image_generate(margin_length=args["margin_length"])
detector.calibrate_load()
detector.process()