| import base64 | |
| from io import BytesIO | |
| from typing import Union | |
| import cv2 | |
| import numpy as np | |
| from PIL import Image, UnidentifiedImageError | |
| from inference_sdk.http.errors import EncodingError | |
| def numpy_array_to_base64_jpeg( | |
| image: np.ndarray, | |
| ) -> Union[str, bytes]: | |
| _, img_encoded = cv2.imencode(".jpg", image) | |
| image_bytes = np.array(img_encoded).tobytes() | |
| return encode_base_64(payload=image_bytes) | |
| def pillow_image_to_base64_jpeg(image: Image.Image) -> str: | |
| with BytesIO() as buffer: | |
| image.save(buffer, format="JPEG") | |
| return encode_base_64(payload=buffer.getvalue()) | |
| def encode_base_64(payload: bytes) -> str: | |
| return base64.b64encode(payload).decode("utf-8") | |
| def bytes_to_opencv_image( | |
| payload: bytes, array_type: np.number = np.uint8 | |
| ) -> np.ndarray: | |
| bytes_array = np.frombuffer(payload, dtype=array_type) | |
| decoding_result = cv2.imdecode(bytes_array, cv2.IMREAD_UNCHANGED) | |
| if decoding_result is None: | |
| raise EncodingError("Could not encode bytes to OpenCV image.") | |
| return decoding_result | |
| def bytes_to_pillow_image(payload: bytes) -> Image.Image: | |
| buffer = BytesIO(payload) | |
| try: | |
| return Image.open(buffer) | |
| except UnidentifiedImageError as error: | |
| raise EncodingError("Could not encode bytes to PIL image.") from error | |