import fastdeploy as fd from fastdeploy.serving.server import SimpleServer import os import logging logging.getLogger().setLevel(logging.INFO) # Configurations det_model_dir = "ch_PP-OCRv3_det_infer" cls_model_dir = "ch_ppocr_mobile_v2.0_cls_infer" rec_model_dir = "ch_PP-OCRv3_rec_infer" rec_label_file = "ppocr_keys_v1.txt" device = "cpu" # backend: ['paddle', 'trt'], you can also use other backends, but need to modify # the runtime option below backend = "paddle" # Prepare models # Detection model det_model_file = os.path.join(det_model_dir, "inference.pdmodel") det_params_file = os.path.join(det_model_dir, "inference.pdiparams") # Classification model cls_model_file = os.path.join(cls_model_dir, "inference.pdmodel") cls_params_file = os.path.join(cls_model_dir, "inference.pdiparams") # Recognition model rec_model_file = os.path.join(rec_model_dir, "inference.pdmodel") rec_params_file = os.path.join(rec_model_dir, "inference.pdiparams") # Setup runtime option to select hardware, backend, etc. option = fd.RuntimeOption() if device.lower() == "gpu": option.use_gpu() if backend == "trt": option.use_trt_backend() else: option.use_paddle_infer_backend() det_option = option det_option.set_trt_input_shape("x", [1, 3, 64, 64], [1, 3, 640, 640], [1, 3, 960, 960]) # det_option.set_trt_cache_file("det_trt_cache.trt") print(det_model_file, det_params_file) det_model = fd.vision.ocr.DBDetector( det_model_file, det_params_file, runtime_option=det_option ) cls_batch_size = 1 rec_batch_size = 6 cls_option = option cls_option.set_trt_input_shape( "x", [1, 3, 48, 10], [cls_batch_size, 3, 48, 320], [cls_batch_size, 3, 48, 1024] ) # cls_option.set_trt_cache_file("cls_trt_cache.trt") cls_model = fd.vision.ocr.Classifier( cls_model_file, cls_params_file, runtime_option=cls_option ) rec_option = option rec_option.set_trt_input_shape( "x", [1, 3, 48, 10], [rec_batch_size, 3, 48, 320], [rec_batch_size, 3, 48, 2304] ) # rec_option.set_trt_cache_file("rec_trt_cache.trt") rec_model = fd.vision.ocr.Recognizer( rec_model_file, rec_params_file, rec_label_file, runtime_option=rec_option ) # Create PPOCRv3 pipeline ppocr_v3 = fd.vision.ocr.PPOCRv3( det_model=det_model, cls_model=cls_model, rec_model=rec_model ) ppocr_v3.cls_batch_size = cls_batch_size ppocr_v3.rec_batch_size = rec_batch_size # Create server, setup REST API app = SimpleServer() app.register( task_name="fd/ppocrv3", model_handler=fd.serving.handler.VisionModelHandler, predictor=ppocr_v3, )