diff --git a/packages/core/pitop/core/ImageFunctions.py b/packages/core/pitop/core/ImageFunctions.py index 737f260f5..f9888cbd2 100644 --- a/packages/core/pitop/core/ImageFunctions.py +++ b/packages/core/pitop/core/ImageFunctions.py @@ -13,7 +13,10 @@ def image_format_check(format): def convert(image, format="PIL"): - cv2 = import_opencv() + try: + cv2 = import_opencv() + except ModuleNotFoundError: + cv2 = None image_format_check(format) format = format.lower() @@ -30,13 +33,21 @@ def convert(image, format="PIL"): # Convert PIL to OpenCV cv_image = asarray(image) if image.mode == "RGB": - cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGB2BGR) + if cv2: + cv_image = cv2.cvtColor(cv_image, cv2.COLOR_RGB2BGR) + else: + cv_image = cv_image[..., ::-1].copy() + return cv_image elif isinstance(image, ndarray) and format == "pil": # Convert OpenCV to PIL if len(image.shape) > 2 and image.shape[2] == 3: # If incoming image has 3 channels, convert from BGR to RGB - image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + if cv2: + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + else: + image = image[..., ::-1].copy() + return Image.fromarray(image) diff --git a/packages/core/setup.py b/packages/core/setup.py index fb5156fe6..8d4dc170e 100644 --- a/packages/core/setup.py +++ b/packages/core/setup.py @@ -44,9 +44,12 @@ f"pitop.common=={__version__}", "Pillow>=8.1.2,<9.0", "numpy>1.19.5,<2.0.0", - "opencv-python>=4.5.1,<4.6.0", ] +__extra_requires__ = { + "computer_vision": ["opencv-python>=4.5.1,<4.6.0"], +} + def main(): import io @@ -71,6 +74,7 @@ def main(): include_package_data=True, platforms=__platforms__, install_requires=__requires__, + extras_require=__extra_requires__, ) diff --git a/packages/pitop/setup.py b/packages/pitop/setup.py index 18a337b29..fd9ba344e 100644 --- a/packages/pitop/setup.py +++ b/packages/pitop/setup.py @@ -41,7 +41,7 @@ ] __extra_requires__ = { - "computer_vision": ["opencv"], + "computer_vision": ["opencv-python>=4.5.1,<4.6.0"], "doc": ["sphinx"], }