Spaces:
Runtime error
Runtime error
# Copyright (C) 2021-2024, Mindee. | |
# This program is licensed under the Apache License 2.0. | |
# See LICENSE or go to <https://opensource.org/licenses/Apache-2.0> for full license details. | |
from pathlib import Path | |
from typing import Optional, Tuple | |
import cv2 | |
import numpy as np | |
from doctr.utils.common_types import AbstractFile | |
__all__ = ["read_img_as_numpy"] | |
def read_img_as_numpy( | |
file: AbstractFile, | |
output_size: Optional[Tuple[int, int]] = None, | |
rgb_output: bool = True, | |
) -> np.ndarray: | |
"""Read an image file into numpy format | |
>>> from doctr.io import read_img_as_numpy | |
>>> page = read_img_as_numpy("path/to/your/doc.jpg") | |
Args: | |
---- | |
file: the path to the image file | |
output_size: the expected output size of each page in format H x W | |
rgb_output: whether the output ndarray channel order should be RGB instead of BGR. | |
Returns: | |
------- | |
the page decoded as numpy ndarray of shape H x W x 3 | |
""" | |
if isinstance(file, (str, Path)): | |
if not Path(file).is_file(): | |
raise FileNotFoundError(f"unable to access {file}") | |
img = cv2.imread(str(file), cv2.IMREAD_COLOR) | |
elif isinstance(file, bytes): | |
_file: np.ndarray = np.frombuffer(file, np.uint8) | |
img = cv2.imdecode(_file, cv2.IMREAD_COLOR) | |
else: | |
raise TypeError("unsupported object type for argument 'file'") | |
# Validity check | |
if img is None: | |
raise ValueError("unable to read file.") | |
# Resizing | |
if isinstance(output_size, tuple): | |
img = cv2.resize(img, output_size[::-1], interpolation=cv2.INTER_LINEAR) | |
# Switch the channel order | |
if rgb_output: | |
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) | |
return img | |