import importlib import logging import numpy as np from ray.rllib.utils.annotations import DeveloperAPI logger = logging.getLogger(__name__) @DeveloperAPI def is_package_installed(package_name): try: importlib.metadata.version(package_name) return True except importlib.metadata.PackageNotFoundError: return False try: import cv2 cv2.ocl.setUseOpenCL(False) logger.debug("CV2 found for image processing.") except ImportError as e: if is_package_installed("opencv-python"): raise ImportError( f"OpenCV is installed, but we failed to import it. This may be because " f"you need to install `opencv-python-headless` instead of " f"`opencv-python`. Error message: {e}", ) cv2 = None @DeveloperAPI def resize(img: np.ndarray, height: int, width: int) -> np.ndarray: if not cv2: raise ModuleNotFoundError( "`opencv` not installed! Do `pip install opencv-python`" ) return cv2.resize(img, (width, height), interpolation=cv2.INTER_AREA) @DeveloperAPI def rgb2gray(img: np.ndarray) -> np.ndarray: if not cv2: raise ModuleNotFoundError( "`opencv` not installed! Do `pip install opencv-python`" ) return cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) @DeveloperAPI def imread(img_file: str) -> np.ndarray: if not cv2: raise ModuleNotFoundError( "`opencv` not installed! Do `pip install opencv-python`" ) return cv2.imread(img_file).astype(np.float32)