From 1b878c9155d7ff9783929d55035c942dd8bb7933 Mon Sep 17 00:00:00 2001 From: aka <47563398+todateman@users.noreply.github.com> Date: Tue, 15 Jul 2025 18:33:02 +0900 Subject: [PATCH] fix(record): Improve OpenCV backend handling for Windows systems (#1495) * fix(record): Improve OpenCV backend handling for Windows systems * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Resolved ruff's E402 error (import statements not at the beginning of the file): - Moved all import statements to the beginning of the file - Defined _fix_opencv_backend() as a function - Adjusted the timing of the fix call - Code structure conforming to ruff * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix(record): Correct OpenCV backend for Windows systems * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix(opencv): Set OpenCV environment variable for Windows systems * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix(opencv): Refactor MSMF hardware transform environment variable setting for Windows * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- src/lerobot/cameras/opencv/camera_opencv.py | 4 ++++ src/lerobot/cameras/utils.py | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/lerobot/cameras/opencv/camera_opencv.py b/src/lerobot/cameras/opencv/camera_opencv.py index fd99922a..1d7a1645 100644 --- a/src/lerobot/cameras/opencv/camera_opencv.py +++ b/src/lerobot/cameras/opencv/camera_opencv.py @@ -18,12 +18,16 @@ Provides the OpenCVCamera class for capturing frames from cameras using OpenCV. import logging import math +import os import platform import time from pathlib import Path from threading import Event, Lock, Thread from typing import Any, Dict, List +# Fix MSMF hardware transform compatibility for Windows before importing cv2 +if platform.system() == "Windows" and "OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS" not in os.environ: + os.environ["OPENCV_VIDEOIO_MSMF_ENABLE_HW_TRANSFORMS"] = "0" import cv2 import numpy as np diff --git a/src/lerobot/cameras/utils.py b/src/lerobot/cameras/utils.py index f8bbd6e7..1eb69840 100644 --- a/src/lerobot/cameras/utils.py +++ b/src/lerobot/cameras/utils.py @@ -60,6 +60,8 @@ def get_cv2_backend() -> int: import cv2 if platform.system() == "Windows": - return cv2.CAP_AVFOUNDATION - else: + return cv2.CAP_MSMF # Use MSMF for Windows instead of AVFOUNDATION + # elif platform.system() == "Darwin": # macOS + # return cv2.CAP_AVFOUNDATION + else: # Linux and others return cv2.CAP_ANY