File size: 918 Bytes
c02cb32
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from __future__ import annotations

from pathlib import Path
from typing import Any

import numpy as np
from PIL import Image, ImageOps


def load_pil_image(image: str | Path | Image.Image, mode: str = "RGB") -> Image.Image:
    if isinstance(image, Image.Image):
        img = image.copy()
    else:
        img = Image.open(image)
    img = ImageOps.exif_transpose(img)
    return img.convert(mode)


def resize_image(image: Image.Image, size: int | tuple[int, int]) -> Image.Image:
    if isinstance(size, int):
        size = (size, size)
    return image.resize(size, Image.Resampling.BILINEAR)


def pil_to_uint8_array(image: Image.Image) -> np.ndarray:
    arr = np.asarray(image)
    if arr.dtype != np.uint8:
        arr = np.clip(arr, 0, 255).astype(np.uint8)
    return arr


def image_size_from_config(config: dict[str, Any]) -> int:
    return int(config.get("preprocessing", {}).get("image_size", 224))