Open ztc125521 opened 3 years ago
可以自己写一个hub module将两个模型封装在一个函数里,同时这个module实现serving功能,就能通过调用新写的模型的serving来实现两个功能。比如说之前封装了四个module的另一个例子:
import base64
import cv2
import numpy as np
import paddlehub as hub
from paddlehub.module.module import moduleinfo, serving, Module
def cv2_to_base64(image):
data = cv2.imencode('.jpg', image)[1]
return base64.b64encode(data.tostring()).decode('utf8')
def base64_to_cv2(b64str):
data = base64.b64decode(b64str.encode('utf8'))
data = np.fromstring(data, np.uint8)
data = cv2.imdecode(data, cv2.IMREAD_COLOR)
return data
@moduleinfo(name="animegan",
type="CV/image_editing",
author="paddlepaddle",
author_email="",
summary="animegan is a style transfer model .",
version="1.0.0")
class AnimeGanModel(Module):
def _initialize(self, use_gpu=True):
self.use_gpu = use_gpu
self.hayao_60 = hub.Module(name='animegan_v1_hayao_60', use_gpu=self.use_gpu)
self.hayao_64 = hub.Module(name='animegan_v2_hayao_64', use_gpu=self.use_gpu)
self.shinkai_33 = hub.Module(name='animegan_v2_shinkai_33', use_gpu=self.use_gpu)
self.paprika_74 = hub.Module(name='animegan_v2_paprika_74', use_gpu=self.use_gpu)
def style_transfer(self, input):
hayao_60 = self.hayao_60.style_transfer(images=input)[0]
hayao_64 = self.hayao_64.style_transfer(images=input)[0]
shikai_33 = self.shinkai_33.style_transfer(images=input)[0]
paprica_74 = self.paprika_74.style_transfer(images=input)[0]
result = [hayao_60, hayao_64, shikai_33, paprica_74]
return result
@serving
def serving_method(self, images):
"""
Run as a service.
"""
images_decode = [base64_to_cv2(image) for image in images]
results = self.style_transfer(images_decode)
data = {}
data['hayao_60'] = cv2_to_base64(results[0])
data['hayao_64'] = cv2_to_base64(results[1])
data['shikai_33'] = cv2_to_base64(results[2])
data['paprica_74'] = cv2_to_base64(results[3])
return data
目前有一个检测模型和一个识别模型,如何把两个模型级联起来然后通过paddle hub的sever服务部署