mirror of
https://github.com/sunnypilot/sunnypilot.git
synced 2026-02-18 16:33:57 +08:00
webcam: back to opencv (#35522)
* Revert "webcam: remove other cv2 usage (#33236)" This reverts commit0cade54015. * Revert "remove cv2 usage (#33101)" This reverts commit144e9e271c. * Revert "remove opencv-python-headless (#33082)" This reverts commit488e08507a. * update uv.lock * keep av bgr2nv12 * rename
This commit is contained in:
@@ -107,6 +107,7 @@ dev = [
|
||||
"dbus-next",
|
||||
"dictdiffer",
|
||||
"matplotlib",
|
||||
"opencv-python-headless",
|
||||
"parameterized >=0.8, <0.9",
|
||||
"pyautogui",
|
||||
"pygame",
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import av
|
||||
import cv2 as cv
|
||||
|
||||
class Camera:
|
||||
def __init__(self, cam_type_state, stream_type, camera_id):
|
||||
@@ -10,11 +11,9 @@ class Camera:
|
||||
self.stream_type = stream_type
|
||||
self.cur_frame_id = 0
|
||||
|
||||
self.container = av.open(camera_id)
|
||||
assert self.container.streams.video, f"Can't open video stream for camera {camera_id}"
|
||||
self.video_stream = self.container.streams.video[0]
|
||||
self.W = self.video_stream.codec_context.width
|
||||
self.H = self.video_stream.codec_context.height
|
||||
self.cap = cv.VideoCapture(camera_id)
|
||||
self.W = self.cap.get(cv.CAP_PROP_FRAME_WIDTH)
|
||||
self.H = self.cap.get(cv.CAP_PROP_FRAME_HEIGHT)
|
||||
|
||||
@classmethod
|
||||
def bgr2nv12(self, bgr):
|
||||
@@ -22,8 +21,10 @@ class Camera:
|
||||
return frame.reformat(format='nv12').to_ndarray()
|
||||
|
||||
def read_frames(self):
|
||||
for frame in self.container.decode(self.video_stream):
|
||||
img = frame.to_rgb().to_ndarray()[:,:, ::-1] # convert to bgr24
|
||||
yuv = Camera.bgr2nv12(img)
|
||||
while True:
|
||||
ret, frame = self.cap.read()
|
||||
if not ret:
|
||||
break
|
||||
yuv = Camera.bgr2nv12(frame)
|
||||
yield yuv.data.tobytes()
|
||||
self.container.close()
|
||||
self.cap.release()
|
||||
|
||||
2
uv.lock
generated
2
uv.lock
generated
@@ -1280,6 +1280,7 @@ dev = [
|
||||
{ name = "dbus-next" },
|
||||
{ name = "dictdiffer" },
|
||||
{ name = "matplotlib" },
|
||||
{ name = "opencv-python-headless" },
|
||||
{ name = "parameterized" },
|
||||
{ name = "pyautogui" },
|
||||
{ name = "pygame" },
|
||||
@@ -1349,6 +1350,7 @@ requires-dist = [
|
||||
{ name = "natsort", marker = "extra == 'docs'" },
|
||||
{ name = "numpy", specifier = ">=2.0,<2.2" },
|
||||
{ name = "onnx", specifier = ">=1.14.0" },
|
||||
{ name = "opencv-python-headless", marker = "extra == 'dev'" },
|
||||
{ name = "parameterized", marker = "extra == 'dev'", specifier = ">=0.8,<0.9" },
|
||||
{ name = "pre-commit-hooks", marker = "extra == 'testing'" },
|
||||
{ name = "psutil" },
|
||||
|
||||
Reference in New Issue
Block a user