Spaces:
Running
on
Zero
Running
on
Zero
# coding=utf-8 | |
# Copyright 2021 The HuggingFace Inc. team. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
import base64 | |
import logging | |
import os | |
from io import BytesIO | |
from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Tuple, Union | |
import PIL | |
import numpy as np | |
import requests | |
from packaging import version | |
def _is_numpy(x): | |
return isinstance(x, np.ndarray) | |
def is_numpy_array(x): | |
""" | |
Tests if `x` is a numpy array or not. | |
""" | |
return _is_numpy(x) | |
def is_pil_image(img): | |
return isinstance(img, PIL.Image.Image) | |
def is_valid_image(img): | |
return is_pil_image(img) or is_numpy_array(img) | |
def valid_images(imgs): | |
# If we have an list of images, make sure every image is valid | |
if isinstance(imgs, (list, tuple)): | |
for img in imgs: | |
if not valid_images(img): | |
return False | |
# If not a list of tuple, we have been given a single image or batched tensor of images | |
elif not is_valid_image(imgs): | |
return False | |
return True | |
def is_batched(img): | |
if isinstance(img, (list, tuple)): | |
return is_valid_image(img[0]) | |
return False | |
def is_scaled_image(image: np.ndarray) -> bool: | |
""" | |
Checks to see whether the pixel values have already been rescaled to [0, 1]. | |
""" | |
if image.dtype == np.uint8: | |
return False | |
# It's possible the image has pixel values in [0, 255] but is of floating type | |
return np.min(image) >= 0 and np.max(image) <= 1 | |
def make_batched_images(images): | |
""" | |
Accepts images in list or nested list format, and makes a list of images for preprocessing. | |
Args: | |
images (`Union[List[List[ImageInput]], List[ImageInput], ImageInput]`): | |
The input image. | |
Returns: | |
list: A list of images. | |
""" | |
if ( | |
isinstance(images, (list, tuple)) | |
and isinstance(images[0], (list, tuple)) | |
and is_valid_image(images[0][0]) | |
): | |
return [img for img_list in images for img in img_list] | |
elif isinstance(images, (list, tuple)) and is_valid_image(images[0]): | |
return images | |
elif is_valid_image(images): | |
return [images] | |
raise ValueError(f"Could not make batched video from {images}") | |