From 6f08fb25b40e8470f66975e3e5b53c0ce1802126 Mon Sep 17 00:00:00 2001 From: stephon Date: Wed, 22 Sep 2021 07:23:11 +0000 Subject: [PATCH] Add recognition service of paddleserving --- deploy/paddleserving/README.md | 8 +- deploy/paddleserving/README_CN.md | 6 +- deploy/paddleserving/imgs/results_recog.png | Bin 0 -> 28742 bytes .../paddleserving/imgs/start_server_recog.png | Bin 0 -> 126242 bytes deploy/paddleserving/recognition/README.md | 176 ++++++++++++++++++ deploy/paddleserving/recognition/README_CN.md | 172 +++++++++++++++++ deploy/paddleserving/recognition/__init__.py | 0 deploy/paddleserving/recognition/config.yml | 33 ++++ .../recognition/daoxiangcunjinzhubing_6.jpg | Bin 0 -> 45098 bytes .../recognition/pipeline_http_client.py | 21 +++ .../recognition/pipeline_rpc_client.py | 34 ++++ .../recognition/recognition_web_service.py | 79 ++++++++ 12 files changed, 522 insertions(+), 7 deletions(-) create mode 100644 deploy/paddleserving/imgs/results_recog.png create mode 100644 deploy/paddleserving/imgs/start_server_recog.png create mode 100644 deploy/paddleserving/recognition/README.md create mode 100644 deploy/paddleserving/recognition/README_CN.md create mode 100644 deploy/paddleserving/recognition/__init__.py create mode 100644 deploy/paddleserving/recognition/config.yml create mode 100644 deploy/paddleserving/recognition/daoxiangcunjinzhubing_6.jpg create mode 100644 deploy/paddleserving/recognition/pipeline_http_client.py create mode 100644 deploy/paddleserving/recognition/pipeline_rpc_client.py create mode 100644 deploy/paddleserving/recognition/recognition_web_service.py diff --git a/deploy/paddleserving/README.md b/deploy/paddleserving/README.md index 75eb3e35..bb34b129 100644 --- a/deploy/paddleserving/README.md +++ b/deploy/paddleserving/README.md @@ -4,9 +4,9 @@ PaddleClas provides two service deployment methods: - Based on **PaddleHub Serving**: Code path is "`./deploy/hubserving`". Please refer to the [tutorial](../../deploy/hubserving/readme_en.md) -- Based on **PaddleServing**: Code path is "`./deploy/paddleserving`". Please follow this tutorial. +- Based on **PaddleServing**: Code path is "`./deploy/paddleserving`". if you prefer retrieval_based image reocognition service, please refer to [tutorial](./recognition/README.md),if you'd like image classification service, Please follow this tutorial. -# Service deployment based on PaddleServing +# Image Classification Service deployment based on PaddleServing This document will introduce how to use the [PaddleServing](https://github.com/PaddlePaddle/Serving/blob/develop/README.md) to deploy the ResNet50_vd model as a pipeline online service. @@ -131,7 +131,7 @@ fetch_var { config.yml # configuration file of starting the service pipeline_http_client.py # script to send pipeline prediction request by http pipeline_rpc_client.py # script to send pipeline prediction request by rpc - resnet50_web_service.py # start the script of the pipeline server + classification_web_service.py # start the script of the pipeline server ``` 2. Run the following command to start the service. @@ -147,7 +147,7 @@ fetch_var { python3 pipeline_http_client.py ``` After successfully running, the predicted result of the model will be printed in the cmd window. An example of the result is: - ![](./imgs/results.png) + ![](./imgs/results.png) Adjust the number of concurrency in config.yml to get the largest QPS. diff --git a/deploy/paddleserving/README_CN.md b/deploy/paddleserving/README_CN.md index 3394ae5b..02ee2093 100644 --- a/deploy/paddleserving/README_CN.md +++ b/deploy/paddleserving/README_CN.md @@ -4,9 +4,9 @@ PaddleClas提供2种服务部署方式: - 基于PaddleHub Serving的部署:代码路径为"`./deploy/hubserving`",使用方法参考[文档](../../deploy/hubserving/readme.md); -- 基于PaddleServing的部署:代码路径为"`./deploy/paddleserving`",按照本教程使用。 +- 基于PaddleServing的部署:代码路径为"`./deploy/paddleserving`", 基于检索方式的图像识别服务参考[文档](./recognition/README_CN.md), 图像分类服务按照本教程使用。 -# 基于PaddleServing的服务部署 +# 基于PaddleServing的图像分类服务部署 本文档以经典的ResNet50_vd模型为例,介绍如何使用[PaddleServing](https://github.com/PaddlePaddle/Serving/blob/develop/README_CN.md)工具部署PaddleClas 动态图模型的pipeline在线服务。 @@ -127,7 +127,7 @@ fetch_var { config.yml # 启动服务的配置文件 pipeline_http_client.py # http方式发送pipeline预测请求的脚本 pipeline_rpc_client.py # rpc方式发送pipeline预测请求的脚本 - resnet50_web_service.py # 启动pipeline服务端的脚本 + classification_web_service.py # 启动pipeline服务端的脚本 ``` 2. 启动服务可运行如下命令: diff --git a/deploy/paddleserving/imgs/results_recog.png b/deploy/paddleserving/imgs/results_recog.png new file mode 100644 index 0000000000000000000000000000000000000000..37393d5d64e84de469d78dcc9fad88aa771f57f8 GIT binary patch literal 28742 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 u@vN~u$^CNJe{tgQ!B_{uy`~V>V#|!4w0TmN9 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%0ATp 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 literal 0 HcmV?d00001 diff --git a/deploy/paddleserving/recognition/README.md b/deploy/paddleserving/recognition/README.md new file mode 100644 index 00000000..0ece4fbd --- /dev/null +++ b/deploy/paddleserving/recognition/README.md @@ -0,0 +1,176 @@ +# Product Recognition Service deployment based on PaddleServing + +(English|[简体中文](./README_CN.md)) + +This document will introduce how to use the [PaddleServing](https://github.com/PaddlePaddle/Serving/blob/develop/README.md) to deploy the product recognition model based on retrieval method as a pipeline online service. + +Some Key Features of Paddle Serving: +- Integrate with Paddle training pipeline seamlessly, most paddle models can be deployed with one line command. +- Industrial serving features supported, such as models management, online loading, online A/B testing etc. +- Highly concurrent and efficient communication between clients and servers supported. + +The introduction and tutorial of Paddle Serving service deployment framework reference [document](https://github.com/PaddlePaddle/Serving/blob/develop/README.md). + +## Contents +- [Environmental preparation](#environmental-preparation) +- [Model conversion](#model-conversion) +- [Paddle Serving pipeline deployment](#paddle-serving-pipeline-deployment) +- [FAQ](#faq) + + +## Environmental preparation + +PaddleClas operating environment and PaddleServing operating environment are needed. + +1. Please prepare PaddleClas operating environment reference [link](../../docs/zh_CN/tutorials/install.md). + Download the corresponding paddle whl package according to the environment, it is recommended to install version 2.1.0. + +2. The steps of PaddleServing operating environment prepare are as follows: + + Install serving which used to start the service + ``` + pip3 install paddle-serving-server==0.6.1 # for CPU + pip3 install paddle-serving-server-gpu==0.6.1 # for GPU + # Other GPU environments need to confirm the environment and then choose to execute the following commands + pip3 install paddle-serving-server-gpu==0.6.1.post101 # GPU with CUDA10.1 + TensorRT6 + pip3 install paddle-serving-server-gpu==0.6.1.post11 # GPU with CUDA11 + TensorRT7 + ``` + +3. Install the client to send requests to the service + In [download link](https://github.com/PaddlePaddle/Serving/blob/develop/doc/LATEST_PACKAGES.md) find the client installation package corresponding to the python version. + The python3.7 version is recommended here: + + ``` + wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.0.0-cp37-none-any.whl + pip3 install paddle_serving_client-0.0.0-cp37-none-any.whl + ``` + +4. Install serving-app + ``` + pip3 install paddle-serving-app==0.6.1 + ``` + + **note:** If you want to install the latest version of PaddleServing, refer to [link](https://github.com/PaddlePaddle/Serving/blob/develop/doc/LATEST_PACKAGES.md). + + + +## Model conversion +When using PaddleServing for service deployment, you need to convert the saved inference model into a serving model that is easy to deploy. +The following assumes that the current working directory is the PaddleClas root directory + +Firstly, download the inference model of ResNet50_vd +``` +cd deploy +# Download and unzip the ResNet50_vd model +wget -P models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar +cd models +tar -xf product_ResNet50_vd_aliproduct_v1.0_infer.tar +``` + +Then, you can use installed paddle_serving_client tool to convert inference model to mobile model. +``` +# Product recognition model conversion +python3 -m paddle_serving_client.convert --dirname ./product_ResNet50_vd_aliproduct_v1.0_infer/ \ + --model_filename inference.pdmodel \ + --params_filename inference.pdiparams \ + --serving_server ./product_ResNet50_vd_aliproduct_v1.0_serving/ \ + --serving_client ./product_ResNet50_vd_aliproduct_v1.0_client/ +``` + +After the ResNet50_vd inference model is converted, there will be additional folders of `product_ResNet50_vd_aliproduct_v1.0_serving` and `product_ResNet50_vd_aliproduct_v1.0_client` in the current folder, with the following format: +``` +|- product_ResNet50_vd_aliproduct_v1.0_serving/ + |- __model__ + |- __params__ + |- serving_server_conf.prototxt + |- serving_server_conf.stream.prototxt + +|- product_ResNet50_vd_aliproduct_v1.0_client + |- serving_client_conf.prototxt + |- serving_client_conf.stream.prototxt +``` + +Once you have the model file for deployment, you need to change the alias name in `serving_server_conf.prototxt`: change `alias_name` in `fetch_var` to `features`, +The modified serving_server_conf.prototxt file is as follows: +``` +feed_var { + name: "x" + alias_name: "x" + is_lod_tensor: false + feed_type: 1 + shape: 3 + shape: 224 + shape: 224 +} +fetch_var { + name: "save_infer_model/scale_0.tmp_1" + alias_name: "features" + is_lod_tensor: true + fetch_type: 1 + shape: -1 +} +``` + +Next,download and unpack the built index of product gallery +``` +cd ../ +wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/recognition_demo_data_v1.1.tar && tar -xf recognition_demo_data_v1.1.tar +``` + + + +## Paddle Serving pipeline deployment + +1. Download the PaddleClas code, if you have already downloaded it, you can skip this step. + ``` + git clone https://github.com/PaddlePaddle/PaddleClas + + # Enter the working directory + cd PaddleClas/deploy/paddleserving/recognition + ``` + + The paddleserving directory contains the code to start the pipeline service and send prediction requests, including: + ``` + __init__.py + config.yml # configuration file of starting the service + pipeline_http_client.py # script to send pipeline prediction request by http + pipeline_rpc_client.py # script to send pipeline prediction request by rpc + recognition_web_service.py # start the script of the pipeline server + ``` + +2. Run the following command to start the service. + ``` + # Start the service and save the running log in log.txt + python3 recognition_web_service.py &>log.txt & + ``` + After the service is successfully started, a log similar to the following will be printed in log.txt + ![](../imgs/start_server_recog.png) + +3. Send service request + ``` + python3 pipeline_http_client.py + ``` + After successfully running, the predicted result of the model will be printed in the cmd window. An example of the result is: + ![](../imgs/results_recog.png) + + Adjust the number of concurrency in config.yml to get the largest QPS. + + ``` + op: + concurrency: 8 + ... + ``` + + Multiple service requests can be sent at the same time if necessary. + + The predicted performance data will be automatically written into the `PipelineServingLogs/pipeline.tracer` file. + + +## FAQ +**Q1**: No result return after sending the request. + +**A1**: Do not set the proxy when starting the service and sending the request. You can close the proxy before starting the service and before sending the request. The command to close the proxy is: +``` +unset https_proxy +unset http_proxy +``` diff --git a/deploy/paddleserving/recognition/README_CN.md b/deploy/paddleserving/recognition/README_CN.md new file mode 100644 index 00000000..58efd6ba --- /dev/null +++ b/deploy/paddleserving/recognition/README_CN.md @@ -0,0 +1,172 @@ +# 基于PaddleServing的商品识别服务部署 + +([English](./README.md)|简体中文) + +本文以商品识别为例,介绍如何使用[PaddleServing](https://github.com/PaddlePaddle/Serving/blob/develop/README_CN.md)工具部署PaddleClas动态图模型的pipeline在线服务。 + +相比较于hubserving部署,PaddleServing具备以下优点: +- 支持客户端和服务端之间高并发和高效通信 +- 支持 工业级的服务能力 例如模型管理,在线加载,在线A/B测试等 +- 支持 多种编程语言 开发客户端,例如C++, Python和Java + +更多有关PaddleServing服务化部署框架介绍和使用教程参考[文档](https://github.com/PaddlePaddle/Serving/blob/develop/README_CN.md)。 + +## 目录 +- [环境准备](#环境准备) +- [模型转换](#模型转换) +- [Paddle Serving pipeline部署](#部署) +- [FAQ](#FAQ) + + +## 环境准备 + +需要准备PaddleClas的运行环境和PaddleServing的运行环境。 + +- 准备PaddleClas的[运行环境](../../docs/zh_CN/tutorials/install.md), 根据环境下载对应的paddle whl包,推荐安装2.1.0版本 + +- 准备PaddleServing的运行环境,步骤如下 + +1. 安装serving,用于启动服务 + ``` + pip3 install paddle-serving-server==0.6.1 # for CPU + pip3 install paddle-serving-server-gpu==0.6.1 # for GPU + # 其他GPU环境需要确认环境再选择执行如下命令 + pip3 install paddle-serving-server-gpu==0.6.1.post101 # GPU with CUDA10.1 + TensorRT6 + pip3 install paddle-serving-server-gpu==0.6.1.post11 # GPU with CUDA11 + TensorRT7 + ``` + +2. 安装client,用于向服务发送请求 + 在[下载链接](https://github.com/PaddlePaddle/Serving/blob/develop/doc/LATEST_PACKAGES.md)中找到对应python版本的client安装包,这里推荐python3.7版本: + + ``` + wget https://paddle-serving.bj.bcebos.com/test-dev/whl/paddle_serving_client-0.0.0-cp37-none-any.whl + pip3 install paddle_serving_client-0.0.0-cp37-none-any.whl + ``` + +3. 安装serving-app + ``` + pip3 install paddle-serving-app==0.6.1 + ``` + **Note:** 如果要安装最新版本的PaddleServing参考[链接](https://github.com/PaddlePaddle/Serving/blob/develop/doc/LATEST_PACKAGES.md)。 + + +## 模型转换 + +使用PaddleServing做服务化部署时,需要将保存的inference模型转换为serving易于部署的模型。 +以下内容假定当前工作目录为PaddleClas根目录。 + +首先,下载商品识别的inference模型 +``` +cd deploy + +# 下载并解压商品识别模型 +wget -P models/ https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/models/inference/product_ResNet50_vd_aliproduct_v1.0_infer.tar +cd models +tar -xf product_ResNet50_vd_aliproduct_v1.0_infer.tar +``` + +接下来,用安装的paddle_serving_client把下载的inference模型转换成易于server部署的模型格式。 + +``` +# 转换商品识别模型 +python3 -m paddle_serving_client.convert --dirname ./product_ResNet50_vd_aliproduct_v1.0_infer/ \ + --model_filename inference.pdmodel \ + --params_filename inference.pdiparams \ + --serving_server ./product_ResNet50_vd_aliproduct_v1.0_serving/ \ + --serving_client ./product_ResNet50_vd_aliproduct_v1.0_client/ +``` +商品识别推理模型转换完成后,会在当前文件夹多出`product_ResNet50_vd_aliproduct_v1.0_serving` 和`product_ResNet50_vd_aliproduct_v1.0_client`的文件夹,具备如下格式: +``` +|- product_ResNet50_vd_aliproduct_v1.0_serving/ + |- __model__ + |- __params__ + |- serving_server_conf.prototxt + |- serving_server_conf.stream.prototxt + +|- product_ResNet50_vd_aliproduct_v1.0_client + |- serving_client_conf.prototxt + |- serving_client_conf.stream.prototxt + +``` +得到模型文件之后,需要修改serving_server_conf.prototxt中的alias名字: 将`fetch_var`中的`alias_name`改为`features`, +修改后的serving_server_conf.prototxt内容如下: +``` +feed_var { + name: "x" + alias_name: "x" + is_lod_tensor: false + feed_type: 1 + shape: 3 + shape: 224 + shape: 224 +} +fetch_var { + name: "save_infer_model/scale_0.tmp_1" + alias_name: "features" + is_lod_tensor: true + fetch_type: 1 + shape: -1 +} +``` + +接下来,下载并解压已经构建后的商品库index +``` +cd ../ +wget https://paddle-imagenet-models-name.bj.bcebos.com/dygraph/rec/data/recognition_demo_data_v1.1.tar && tar -xf recognition_demo_data_v1.1.tar +``` + + + +## Paddle Serving pipeline部署 + +1. 下载PaddleClas代码,若已下载可跳过此步骤 + ``` + git clone https://github.com/PaddlePaddle/PaddleClas + + # 进入到工作目录 + cd PaddleClas/deploy/paddleserving/recognition + ``` + paddleserving目录包含启动pipeline服务和发送预测请求的代码,包括: + ``` + __init__.py + config.yml # 启动服务的配置文件 + pipeline_http_client.py # http方式发送pipeline预测请求的脚本 + pipeline_rpc_client.py # rpc方式发送pipeline预测请求的脚本 + recognition_web_service.py # 启动pipeline服务端的脚本 + ``` + +2. 启动服务可运行如下命令: + ``` + # 启动服务,运行日志保存在log.txt + python3 recognition_web_service.py &>log.txt & + ``` + 成功启动服务后,log.txt中会打印类似如下日志 + ![](../imgs/start_server_recog.png) + +3. 发送服务请求: + ``` + python3 pipeline_http_client.py + ``` + 成功运行后,模型预测的结果会打印在cmd窗口中,结果示例为: + ![](../imgs/results_recog.png) + + 调整 config.yml 中的并发个数可以获得最大的QPS + ``` + op: + #并发数,is_thread_op=True时,为线程并发;否则为进程并发 + concurrency: 8 + ... + ``` + 有需要的话可以同时发送多个服务请求 + + 预测性能数据会被自动写入 `PipelineServingLogs/pipeline.tracer` 文件中。 + + +## FAQ +**Q1**: 发送请求后没有结果返回或者提示输出解码报错 + +**A1**: 启动服务和发送请求时不要设置代理,可以在启动服务前和发送请求前关闭代理,关闭代理的命令是: +``` +unset https_proxy +unset http_proxy +``` diff --git a/deploy/paddleserving/recognition/__init__.py b/deploy/paddleserving/recognition/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/deploy/paddleserving/recognition/config.yml b/deploy/paddleserving/recognition/config.yml new file mode 100644 index 00000000..9ccd0cfc --- /dev/null +++ b/deploy/paddleserving/recognition/config.yml @@ -0,0 +1,33 @@ +#worker_num, 最大并发数。当build_dag_each_worker=True时, 框架会创建worker_num个进程,每个进程内构建grpcSever和DAG +##当build_dag_each_worker=False时,框架会设置主线程grpc线程池的max_workers=worker_num +worker_num: 1 + +#http端口, rpc_port和http_port不允许同时为空。当rpc_port可用且http_port为空时,不自动生成http_port +http_port: 18081 +rpc_port: 9994 + +dag: + #op资源类型, True, 为线程模型;False,为进程模型 + is_thread_op: False +op: + recog: + #并发数,is_thread_op=True时,为线程并发;否则为进程并发 + concurrency: 1 + + #当op配置没有server_endpoints时,从local_service_conf读取本地服务配置 + local_service_conf: + + #uci模型路径 + model_config: ../../models/product_ResNet50_vd_aliproduct_v1.0_serving + + #计算硬件类型: 空缺时由devices决定(CPU/GPU),0=cpu, 1=gpu, 2=tensorRT, 3=arm cpu, 4=kunlun xpu + device_type: 1 + + #计算硬件ID,当devices为""或不写时为CPU预测;当devices为"0", "0,1,2"时为GPU预测,表示使用的GPU卡 + devices: "0" # "0,1" + + #client类型,包括brpc, grpc和local_predictor.local_predictor不启动Serving服务,进程内预测 + client_type: local_predictor + + #Fetch结果列表,以client_config中fetch_var的alias_name为准 + fetch_list: ["features"] \ No newline at end of file diff --git a/deploy/paddleserving/recognition/daoxiangcunjinzhubing_6.jpg b/deploy/paddleserving/recognition/daoxiangcunjinzhubing_6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fc64a9531db0829d42b51e888361fa697afd080f GIT binary patch literal 45098 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%0AFwsN&t+ni`;vRcQT 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 literal 0 HcmV?d00001 diff --git a/deploy/paddleserving/recognition/pipeline_http_client.py b/deploy/paddleserving/recognition/pipeline_http_client.py new file mode 100644 index 00000000..8a9ffd53 --- /dev/null +++ b/deploy/paddleserving/recognition/pipeline_http_client.py @@ -0,0 +1,21 @@ +import requests +import json +import base64 +import os + +imgpath = "daoxiangcunjinzhubing_6.jpg" + +def cv2_to_base64(image): + return base64.b64encode(image).decode('utf8') + +if __name__ == "__main__": + url = "http://127.0.0.1:18081/recog_service/prediction" + + with open(os.path.join(".", imgpath), 'rb') as file: + image_data1 = file.read() + image = cv2_to_base64(image_data1) + data = {"key": ["image"], "value": [image]} + + for i in range(5): + r = requests.post(url=url, data=json.dumps(data)) + print(r.json()) diff --git a/deploy/paddleserving/recognition/pipeline_rpc_client.py b/deploy/paddleserving/recognition/pipeline_rpc_client.py new file mode 100644 index 00000000..fa43cf43 --- /dev/null +++ b/deploy/paddleserving/recognition/pipeline_rpc_client.py @@ -0,0 +1,34 @@ +# Copyright (c) 2020 PaddlePaddle Authors. 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. +try: + from paddle_serving_server_gpu.pipeline import PipelineClient +except ImportError: + from paddle_serving_server.pipeline import PipelineClient +import base64 + +client = PipelineClient() +client.connect(['127.0.0.1:9994']) +imgpath = "daoxiangcunjinzhubing_6.jpg" + +def cv2_to_base64(image): + return base64.b64encode(image).decode('utf8') + +if __name__ == "__main__": + with open(imgpath, 'rb') as file: + image_data = file.read() + image = cv2_to_base64(image_data) + + for i in range(1): + ret = client.predict(feed_dict={"image": image}, fetch=["label", "dist"]) + print(ret) diff --git a/deploy/paddleserving/recognition/recognition_web_service.py b/deploy/paddleserving/recognition/recognition_web_service.py new file mode 100644 index 00000000..f8beddfb --- /dev/null +++ b/deploy/paddleserving/recognition/recognition_web_service.py @@ -0,0 +1,79 @@ +# Copyright (c) 2020 PaddlePaddle Authors. 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 sys +from paddle_serving_app.reader import Sequential, URL2Image, Resize, CenterCrop, RGB2BGR, Transpose, Div, Normalize, Base64ToImage +try: + from paddle_serving_server_gpu.web_service import WebService, Op +except ImportError: + from paddle_serving_server.web_service import WebService, Op +import logging +import numpy as np +import base64, cv2 +import os +import faiss +import pickle + +class RecogOp(Op): + def init_op(self): + self.seq = Sequential([ + Resize(256), CenterCrop(224), RGB2BGR(), Transpose((2, 0, 1)), + Div(255), Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], + True) + ]) + + #load index; and return top1 + index_dir = "../../recognition_demo_data_v1.1/gallery_product/index" + assert os.path.exists(os.path.join( + index_dir, "vector.index")), "vector.index not found ..." + assert os.path.exists(os.path.join( + index_dir, "id_map.pkl")), "id_map.pkl not found ... " + + self.Searcher = faiss.read_index( + os.path.join(index_dir, "vector.index")) + + with open(os.path.join(index_dir, "id_map.pkl"), "rb") as fd: + self.id_map = pickle.load(fd) + + def preprocess(self, input_dicts, data_id, log_id): + (_, input_dict), = input_dicts.items() + batch_size = len(input_dict.keys()) + imgs = [] + for key in input_dict.keys(): + data = base64.b64decode(input_dict[key].encode('utf8')) + data = np.fromstring(data, np.uint8) + im = cv2.imdecode(data, cv2.IMREAD_COLOR) + img = self.seq(im) + imgs.append(img[np.newaxis, :].copy()) + input_imgs = np.concatenate(imgs, axis=0) + return {"x": input_imgs}, False, None, "" + + def postprocess(self, input_dicts, fetch_dict, log_id): + score_list = fetch_dict["features"] + + return_top_k = 1 + scores, docs = self.Searcher.search(score_list, return_top_k) + + result = {} + result["label"] = self.id_map[docs[0][0]].split()[1] + result["dist"] = str(scores[0][0]) + return result, None, "" + +class ProductRecognitionService(WebService): + def get_pipeline_response(self, read_op): + image_op = RecogOp(name="recog", input_ops=[read_op]) + return image_op + +uci_service = ProductRecognitionService(name="recog_service") +uci_service.prepare_pipeline_config("config.yml") +uci_service.run_service() -- GitLab