forked from tangger/lerobot
Enhance OpenCVCamera with FOURCC for MJPEG support and validation (#1558)
* Enhance OpenCVCamera with FOURCC support and validation - Added FOURCC configuration option to OpenCVCamera and OpenCVCameraConfig for specifying video format. - Implemented _validate_fourcc method to validate and set the camera's FOURCC code. - Updated _configure_capture_settings to apply FOURCC settings before FPS and resolution. - Enhanced camera detection to include default FOURCC code in camera info. - Updated documentation to reflect new FOURCC parameter and its implications on performance. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Add tests for FOURCC configuration in OpenCVCamera - Implemented tests to validate FOURCC configuration and its application in OpenCVCamera. - Added checks for valid FOURCC codes and ensured that invalid codes raise appropriate errors. - Included a test for camera connection functionality using specified FOURCC settings. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix circular import in __init__.py - change to relative import * Update src/lerobot/cameras/opencv/configuration_opencv.py Co-authored-by: Steven Palma <imstevenpmwork@ieee.org> Signed-off-by: hls <56255627+forgetwhatuwant@users.noreply.github.com> * Update src/lerobot/cameras/opencv/configuration_opencv.py Co-authored-by: Steven Palma <imstevenpmwork@ieee.org> Signed-off-by: hls <56255627+forgetwhatuwant@users.noreply.github.com> * fix(camera_opencv): ensure MSMF hardware transform compatibility on Windows before importing OpenCV * This change reverts the import from a relative import (.) back to the absolute import (lerobot.) as it was previously * opencv/config: satisfy Ruff SIM102 by merging nested if for fourcc validation * style(opencv/config): apply ruff-format changes --------- Signed-off-by: hls <56255627+forgetwhatuwant@users.noreply.github.com> Signed-off-by: Steven Palma <imstevenpmwork@ieee.org> Co-authored-by: forgetwhatuwant <forgetwhatuwant@gmail.com> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Steven Palma <imstevenpmwork@ieee.org>
This commit is contained in:
@@ -155,6 +155,46 @@ def test_async_read_before_connect():
|
||||
_ = camera.async_read()
|
||||
|
||||
|
||||
def test_fourcc_configuration():
|
||||
"""Test FourCC configuration validation and application."""
|
||||
|
||||
# Test MJPG specifically (main use case)
|
||||
config = OpenCVCameraConfig(index_or_path=DEFAULT_PNG_FILE_PATH, fourcc="MJPG")
|
||||
camera = OpenCVCamera(config)
|
||||
assert camera.config.fourcc == "MJPG"
|
||||
|
||||
# Test a few other common formats
|
||||
valid_fourcc_codes = ["YUYV", "YUY2", "RGB3"]
|
||||
|
||||
for fourcc in valid_fourcc_codes:
|
||||
config = OpenCVCameraConfig(index_or_path=DEFAULT_PNG_FILE_PATH, fourcc=fourcc)
|
||||
camera = OpenCVCamera(config)
|
||||
assert camera.config.fourcc == fourcc
|
||||
|
||||
# Test invalid FOURCC codes
|
||||
invalid_fourcc_codes = ["ABC", "ABCDE", ""]
|
||||
|
||||
for fourcc in invalid_fourcc_codes:
|
||||
with pytest.raises(ValueError):
|
||||
OpenCVCameraConfig(index_or_path=DEFAULT_PNG_FILE_PATH, fourcc=fourcc)
|
||||
|
||||
|
||||
def test_fourcc_with_camera():
|
||||
"""Test FourCC functionality with actual camera connection."""
|
||||
config = OpenCVCameraConfig(index_or_path=DEFAULT_PNG_FILE_PATH, fourcc="MJPG")
|
||||
camera = OpenCVCamera(config)
|
||||
|
||||
# Connect should work with MJPG specified
|
||||
camera.connect(warmup=False)
|
||||
assert camera.is_connected
|
||||
|
||||
# Read should work normally
|
||||
img = camera.read()
|
||||
assert isinstance(img, np.ndarray)
|
||||
|
||||
camera.disconnect()
|
||||
|
||||
|
||||
@pytest.mark.parametrize("index_or_path", TEST_IMAGE_PATHS, ids=TEST_IMAGE_SIZES)
|
||||
@pytest.mark.parametrize(
|
||||
"rotation",
|
||||
|
||||
Reference in New Issue
Block a user