# Copyright 2021 Zilliz. All rights reserved. # # 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 logging import cv2 import requests import numpy as np from typing import List, Tuple from towhee import register from towhee.operator import PyOperator, OperatorFlag from towhee._types import Image log = logging.getLogger() @register(output_schema=['img'], flag=OperatorFlag.STATELESS | OperatorFlag.REUSEABLE) class ImageCropCV2(PyOperator): def __init__(self, clamp = False): self.clamp = clamp @staticmethod def _clamp(x, minimum, maximum): return max(minimum, min(x, maximum)) def __call__(self, img: np.ndarray, bboxes: List[Tuple]): h, w, _ = img.shape res = [] for box in bboxes: x1, y1, x2, y2 = box x1 = ImageCropCV2._clamp(x1, 0, w) x2 = ImageCropCV2._clamp(x2, 0, w) y1 = ImageCropCV2._clamp(y1, 0, h) y2 = ImageCropCV2._clamp(y2, 0, h) res.append(img[y1:y2,x1:x2,:]) return res