diff --git a/tools/webcam/camera.py b/tools/webcam/camera.py index 45f9379038..7926766c6f 100644 --- a/tools/webcam/camera.py +++ b/tools/webcam/camera.py @@ -11,7 +11,14 @@ class Camera: self.stream_type = stream_type self.cur_frame_id = 0 + print(f"Opening {cam_type_state} at {camera_id}") + self.cap = cv.VideoCapture(camera_id) + + self.cap.set(cv.CAP_PROP_FRAME_WIDTH, 1280.0) + self.cap.set(cv.CAP_PROP_FRAME_HEIGHT, 720.0) + self.cap.set(cv.CAP_PROP_FPS, 25.0) + self.W = self.cap.get(cv.CAP_PROP_FRAME_WIDTH) self.H = self.cap.get(cv.CAP_PROP_FRAME_HEIGHT) @@ -25,6 +32,8 @@ class Camera: ret, frame = self.cap.read() if not ret: break + # Rotate the frame 180 degrees (flip both axes) + frame = cv.flip(frame, -1) yuv = Camera.bgr2nv12(frame) yield yuv.data.tobytes() self.cap.release() diff --git a/tools/webcam/camerad.py b/tools/webcam/camerad.py index cb096dc00b..f1e70d948a 100755 --- a/tools/webcam/camerad.py +++ b/tools/webcam/camerad.py @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import threading import os +import platform from collections import namedtuple from msgq.visionipc import VisionIpcServer, VisionStreamType @@ -30,8 +31,7 @@ class Camerad: self.cameras = [] for c in CAMERAS: - cam_device = f"/dev/video{c.cam_id}" - print(f"opening {c.msg_name} at {cam_device}") + cam_device = f"/dev/video{c.cam_id}" if platform.system() != "Darwin" else c.cam_id cam = Camera(c.msg_name, c.stream_type, cam_device) self.cameras.append(cam) self.vipc_server.create_buffers(c.stream_type, 20, cam.W, cam.H)