Files
FastDeploy/tutorials/vision_processor/python/preprocess.py
guxukai ab38c9110f [CVCUDA]add op Python API: Cast, HWC2CHW, Normalize, PadToSize, Resize, StridePad (#1589)
* add Cast, HWC2CHW, Normalize, PadToSize, StridePad

* add comments

* fix comments

* fix manager.cc
2023-03-14 19:16:07 +08:00

103 lines
2.8 KiB
Python

import fastdeploy as fd
import cv2
from fastdeploy.vision.common.manager import PyProcessorManager
from fastdeploy.vision.common.processors import *
def parse_arguments():
import argparse
parser = argparse.ArgumentParser()
parser.add_argument(
"--use_cvcuda",
required=False,
type=bool,
help="Use CV-CUDA in preprocess")
return parser.parse_args()
# define CustomProcessor
class CustomProcessor(PyProcessorManager):
def __init__(self) -> None:
super().__init__()
# create op
self.resize_short_op = ResizeByShort(
target_size=100, interp=1, use_scale=True, max_hw=[500, 500])
self.normalize_permute_op = NormalizeAndPermute(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225],
is_scale=True,
min=[],
max=[],
swap_rb=False)
self.centercrop_op = CenterCrop(width=50, height=50)
self.pad_op = Pad(top=5,
bottom=5,
left=5,
right=5,
value=[225, 225, 225])
self.cast_op = Cast(dtype="float")
self.hwc2chw_op = HWC2CHW()
self.normalize_op = Normalize(
mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225],
is_scale=True,
min=[],
max=[],
swap_rb=False)
self.pad_to_size_op = PadToSize(
height=160, width=160, value=[225, 225, 225])
self.resize_op = Resize(
width=50,
height=50,
scale_w=-1.0,
scale_h=-1.0,
interp=1,
use_scale=False)
self.stride_pad_op = StridePad(stride=3, value=[225, 225, 225])
def apply(self, image_batch):
outputs = []
self.resize_short_op(image_batch)
self.centercrop_op(image_batch)
self.pad_op(image_batch)
self.pad_to_size_op(image_batch)
self.normalize_permute_op(image_batch)
for i in range(len(image_batch.mats)):
outputs.append(image_batch.mats[i])
return outputs
if __name__ == "__main__":
# read jpg
im1 = cv2.imread('ILSVRC2012_val_00000010.jpeg')
im2 = cv2.imread('ILSVRC2012_val_00000010.jpeg')
mat1 = fd.C.vision.FDMat()
mat1.from_numpy(im1)
mat2 = fd.C.vision.FDMat()
mat2.from_numpy(im2)
images = [mat1, mat2]
args = parse_arguments()
# creae processor
preprocessor = CustomProcessor()
# use CV-CUDA
if args.use_cvcuda:
preprocessor.use_cuda(True, -1)
# show input
for i in range(len(images)):
images[i].print_info('images' + str(i) + ': ')
# run the Processer with CVCUDA
outputs = preprocessor(images)
# show output
for i in range(len(outputs)):
outputs[i].print_info('outputs' + str(i) + ': ')