| 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 |
|
|