From 0b14d33654b081de48a8eb9be4f172c614ad9cac Mon Sep 17 00:00:00 2001 From: ShenYuhan Date: Mon, 8 Jun 2020 17:29:44 +0800 Subject: [PATCH] Modify serving docs (#674) * Modify docs for hub-serving --- demo/serving/README.md | 32 +---- .../module_serving/GAN_stgan_celeba/README.md | 84 ----------- .../stgan_celeba_serving_demo.py | 26 ---- demo/serving/module_serving/README.md | 28 +--- .../classification_vgg11_imagenet/README.md | 76 ---------- .../vgg11_imagenet_serving_demo.py | 18 --- .../lac_2.1.0_serving_demo.py | 19 --- .../lexical_analysis_lac/lac_serving_demo.py | 15 +- .../lac_with_dict_serving_demo.py | 16 --- .../README.md | 41 ++---- ...dbox_lite_server_mask_file_serving_demo.py | 28 ---- ...yramidbox_lite_server_mask_serving_demo.py | 33 +++-- .../README.md | 135 ------------------ .../output/cat.jpg | Bin 128218 -> 0 bytes .../output/dog.jpg | Bin 60314 -> 0 bytes .../yolov3_darknet53_coco2017_serving_demo.py | 26 ---- .../semantic_model_simnet_bow/README.md | 80 ----------- .../simnet_bow_serving_demo.py | 17 --- .../README.md | 91 ------------ ...labv3p_xception65_humanseg_serving_demo.py | 26 ---- .../sentiment_analysis_senta_lstm/README.md | 78 ---------- .../senta_lstm_serving_demo.py | 14 -- .../README.md | 79 ---------- .../porn_detection_lstm_serving_demo.py | 14 -- docs/tutorial/serving.md | 89 +++--------- 25 files changed, 58 insertions(+), 1007 deletions(-) delete mode 100644 demo/serving/module_serving/GAN_stgan_celeba/README.md delete mode 100644 demo/serving/module_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py delete mode 100644 demo/serving/module_serving/classification_vgg11_imagenet/README.md delete mode 100644 demo/serving/module_serving/classification_vgg11_imagenet/vgg11_imagenet_serving_demo.py delete mode 100644 demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py delete mode 100644 demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py delete mode 100644 demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_file_serving_demo.py delete mode 100644 demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/README.md delete mode 100644 demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/cat.jpg delete mode 100644 demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/dog.jpg delete mode 100644 demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/yolov3_darknet53_coco2017_serving_demo.py delete mode 100644 demo/serving/module_serving/semantic_model_simnet_bow/README.md delete mode 100644 demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py delete mode 100644 demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/README.md delete mode 100644 demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py delete mode 100644 demo/serving/module_serving/sentiment_analysis_senta_lstm/README.md delete mode 100644 demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py delete mode 100644 demo/serving/module_serving/text_censorship_porn_detection_lstm/README.md delete mode 100644 demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py diff --git a/demo/serving/README.md b/demo/serving/README.md index 1095366e..5073ec0e 100644 --- a/demo/serving/README.md +++ b/demo/serving/README.md @@ -19,38 +19,12 @@ PaddleHub Serving主要包括利用Bert Service实现embedding服务化,以及 关于预训练模型一键服务部署的具体信息请参见[PaddleHub Serving](../../docs/tutorial/serving.md) -预训练模型一键服务部署包括以下示例: - -* [图像分类-基于vgg11_imagent](module_serving/classification_vgg11_imagenet) - -  该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。 - -* [图像生成-基于stgan_celeba](module_serving/GAN_stgan_celeba) - -  该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。 - -* [文本审核-基于porn_detection_lstm](module_serving/text_censorship_porn_detection_lstm) - -  该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。 +预训练模型一键服务部署包括以下示例: * [中文词法分析-基于lac](module_serving/lexical_analysis_lac)   该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。 -* [目标检测-基于yolov3_darknet53_coco2017](module_serving/object_detection_yolov3_darknet53_coco2017) - -  该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。 - -* [中文语义分析-基于simnet_bow](module_serving/semantic_model_simnet_bow) - -  该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。 - -* [图像分割-基于deeplabv3p_xception65_humanseg](module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg) - -  该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。 - -* [中文情感分析-基于simnet_bow](module_serving/semantic_model_simnet_bow) - -  该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。 +* [人脸检测-基于pyramidbox_lite_server_mask](module_serving/object_detection_pyramidbox_lite_server_mask) -关于Paddle Serving预训练模型一键服务部署功能的具体信息请参见[Module Serving](module_serving)。 +  该示例展示了利用pyramidbox_lite_server_mask完成人脸口罩检测,检测人脸位置以及戴口枣的置信度。 diff --git a/demo/serving/module_serving/GAN_stgan_celeba/README.md b/demo/serving/module_serving/GAN_stgan_celeba/README.md deleted file mode 100644 index efa6c498..00000000 --- a/demo/serving/module_serving/GAN_stgan_celeba/README.md +++ /dev/null @@ -1,84 +0,0 @@ -# 部署图像生成服务-以stgan_celeba为例 -## 简介 -图像生成是指根据预先设置的标签,生成对应图像的过程。stgan_celeba通过在GAN中加入encoder-decoder,可实现人脸属性的转换。关于stgan_celeba的具体信息请参见[stgan_celeba](https://paddlepaddle.org.cn/hubdetail?name=stgan_celeba&en_category=GANs)。 - -使用PaddleHub Serving可以轻松部署一个在线图像生成服务API,可将此API接入自己的web网站,也可接入应用程序,如美图类应用,实现传照片修饰脸的功能。 - -下面就带领大家使用PaddleHub Serving,通过简单几步部署一个图像生成服务。 - -## Step1:启动PaddleHub Serving -启动命令如下: -```shell -$ hub serving start -m stgan_celeba -``` -启动时会显示加载模型过程,启动成功后显示: -```shell -Loading stgan_celeba successful. -``` -这样就完成了一个图像生成服务化API的部署,默认端口号为8866。 - -## Step2:测试图像生成在线API -首先指定编码格式及引入需要的包: -```python -# coding: utf8 -import requests -import json -import base64 -import os -``` -我们用来测试的样例图片为: - -

- -

- -根据stgan_celeba所需信息,准备的数据包括图像文件和生成图像风格,格式为: -```python -files = [("image", file_a), ("image", file_b)] -data = {"info": ["info_a_1, info_a_2", "info_b_1, info_b_2"], "style": ["style_a", "style_b"]} -``` - -**NOTE:** 文件列表每个元素第一个参数为"image"。 - -info为图像描述,根据示例图像信息,info应为"Male,Black_Hair,Eyeglasses,No_Beard",即"男性,黑发,戴眼镜,没有胡子"。 - -image为要生成的图像风格,我们选取"Bald"(秃顶的)作为生成图像的风格。 - -```python ->>> # 指定要使用的图片文件并生成列表[("image", img_1), ("image", img_2), ... ] ->>> file_list = ["../img/man.png"] ->>> files = [("image", (open(item, "rb"))) for item in file_list] ->>> # 为每张图片对应指定info和style ->>> data = {"info": ["Male,Black_Hair,Eyeglasses,No_Beard"], "style": ["Bald"]} -``` - -## Step3:获取并验证结果 -然后就可以发送请求到图像生成服务API,并得到结果,代码如下: - -```python ->>> url = "http://127.0.0.1:8866/predict/image/stgan_celeba" ->>> r = requests.post(url=url, data=data, files=files) -``` -stgan_celeba返回的结果包括生成图像的base64编码格式,经过转换可以得到生成图像。 - -我们建立一个指定的文件夹用于存放结果图片: -```python ->>> if not os.path.exists("stgan_output"): - os.mkdir("stgan_output") -``` -然后将图片进行保存,代码如下: -```python ->>> for item in results: -... with open(output_path, "wb") as fp: -... fp.write(base64.b64decode(item["base64"].split(',')[-1])) -``` -查看指定输出文件夹,就能看到生成图像了,如图: - -

- -

- - -这样我们就完成了对图像生成服务化的部署和测试。 - -完整的测试代码见[stgan_celeba_serving_demo.py](stgan_celeba_serving_demo.py)。 diff --git a/demo/serving/module_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py b/demo/serving/module_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py deleted file mode 100644 index 4e202815..00000000 --- a/demo/serving/module_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py +++ /dev/null @@ -1,26 +0,0 @@ -# coding: utf8 -import requests -import json -import base64 -import os - -if __name__ == "__main__": - # 指定要使用的图片文件并生成列表[("image", img_1), ("image", img_2), ... ] - file_list = ["../../../../docs/imgs/man.png"] - files = [("image", (open(item, "rb"))) for item in file_list] - # 为每张图片对应指定info和style - data = {"info": ["Male,Black_Hair"], "style": ["Bald"]} - # 指定图片生成方法为stgan_celeba并发送post请求 - url = "http://127.0.0.1:8866/predict/image/stgan_celeba" - r = requests.post(url=url, data=data, files=files) - - # 保存生成的图片到output文件夹,打印模型输出结果 - if not os.path.exists("stgan_output"): - os.mkdir("stgan_output") - results = eval(r.json()["results"]) - for item in results: - output_path = os.path.join("stgan_output", item["path"].split("/")[-1]) - with open(output_path, "wb") as fp: - fp.write(base64.b64decode(item["base64"].split(',')[-1])) - item.pop("base64") - print(json.dumps(results, indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/README.md b/demo/serving/module_serving/README.md index 66ebb05b..5c07d21c 100644 --- a/demo/serving/module_serving/README.md +++ b/demo/serving/module_serving/README.md @@ -14,37 +14,13 @@ PaddleHub Serving是基于PaddleHub的一键模型服务部署工具,能够通 获取PaddleHub Serving的一键服务部署场景示例,可参见下列demo: -* [图像分类-基于vgg11_imagent](../module_serving/classification_vgg11_imagenet) - -  该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。 - -* [图像生成-基于stgan_celeba](../module_serving/GAN_stgan_celeba) - -  该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。 - -* [文本审核-基于porn_detection_lstm](../module_serving/text_censorship_porn_detection_lstm) - -  该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。 - * [中文词法分析-基于lac](../module_serving/lexical_analysis_lac)   该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。 -* [目标检测-基于yolov3_darknet53_coco2017](../module_serving/object_detection_yolov3_darknet53_coco2017) - -  该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。 - -* [中文语义分析-基于simnet_bow](../module_serving/semantic_model_simnet_bow) - -  该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。 - -* [图像分割-基于deeplabv3p_xception65_humanseg](../module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg) - -  该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。 - -* [中文情感分析-基于senta_lstm](../module_serving/sentiment_analysis_senta_lstm) +* [人脸检测-基于pyramidbox_lite_server_mask](../module_serving/object_detection_pyramidbox_lite_server_mask) -  该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。 +  该示例展示了利用pyramidbox_lite_server_mask完成人脸口罩检测,检测人脸位置以及戴口枣的置信度。 ## Bert Service 除了预训练模型一键服务部署功能之外,PaddleHub Serving还具有`Bert Service`功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见[Bert Service](../../../docs/tutorial/bert_service.md)。 diff --git a/demo/serving/module_serving/classification_vgg11_imagenet/README.md b/demo/serving/module_serving/classification_vgg11_imagenet/README.md deleted file mode 100644 index e82efb98..00000000 --- a/demo/serving/module_serving/classification_vgg11_imagenet/README.md +++ /dev/null @@ -1,76 +0,0 @@ -# 部署图像分类服务-以vgg11_imagenent为例 -## 简介 -图像分类是指通过模型,预测给定的图片所属类别,vgg11_imagenent就是一种有效的图像分类模型。关于vgg11_imagenent的具体信息请参见[vgg11_imagenent](https://paddlepaddle.org.cn/hubdetail?name=vgg11_imagenet&en_category=ImageClassification)。 - -使用PaddleHub Serving可以部署一个在线图片分类服务,既可以对用户暴露直接预测接口,也可以利用此接口实现一个web网站,甚至可以集成到移动端应用程序中实现拍照识别功能。 - -这里就带领大家使用PaddleHub Serving,通过简单几步部署一个图像分类服务。 - -## Step1:启动PaddleHub Serving -启动命令如下: -```shell -$ hub serving start -m vgg11_imagenet -``` -启动时会显示加载模型过程,启动成功后显示: -```shell -Loading vgg11_imagenet successful. -``` -这样就完成了一个图像分类服务化API的部署,默认端口号为8866。 - -## Step2:测试图像分类在线API -首先引入需要的包: -```python ->>> import requests ->>> import json -``` - -我们用来测试的样例图片为: - -

- -

- -

- -

- -准备的数据格式为: -```python -files = [("image", file_1), ("image", file_2)] -``` -**NOTE:** 每个元素第一个参数为"image"。 - -代码如下: -```python ->>> file_list = ["../img/cat.jpg", "../img/flower.jpg"] ->>> files = [("image", (open(item, "rb"))) for item in file_list] -``` - -## Step3:获取并验证结果 -然后就可以发送请求到图像分类服务API,并得到结果了,代码如下: -```python ->>> # 指定检测方法为vgg11_imagenet并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/image/vgg11_imagenet" ->>> r = requests.post(url=url, files=files) -``` -vgg11_imagenent返回的结果为图像分类结果及其对应的概率,我们尝试打印接口返回结果: -```python ->>> results = eval(r.json()["results"]) ->>> print(json.dumps(results, indent=4, ensure_ascii=False)) -[ - [ - { - "Egyptian cat": 0.540287435054779 - } - ], - [ - { - "daisy": 0.9976677298545837 - } - ] -] -``` - -这样我们就完成了对图像分类预测服务化部署和测试。 - -完整的测试代码见[vgg11_imagenent_serving_demo.py](vgg11_imagenet_serving_demo.py)。 diff --git a/demo/serving/module_serving/classification_vgg11_imagenet/vgg11_imagenet_serving_demo.py b/demo/serving/module_serving/classification_vgg11_imagenet/vgg11_imagenet_serving_demo.py deleted file mode 100644 index 091f9517..00000000 --- a/demo/serving/module_serving/classification_vgg11_imagenet/vgg11_imagenet_serving_demo.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定要预测的图片并生成列表[("image", img_1), ("image", img_2), ... ] - file_list = [ - "../../../../docs/imgs/cat.jpg", "../../../../docs/imgs/flower.jpg" - ] - files = [("image", (open(item, "rb"))) for item in file_list] - # 指定预测方法为vgg11_imagenet并发送post请求 - url = "http://127.0.0.1:8866/predict/image/vgg11_imagenet" - r = requests.post(url=url, files=files) - - results = eval(r.json()["results"]) - - # 打印预测结果 - print(json.dumps(results, indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py b/demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py deleted file mode 100644 index 05e40f8a..00000000 --- a/demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py +++ /dev/null @@ -1,19 +0,0 @@ -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text = ["今天是个好日子", "天气预报说今天要下雨"] - # 以key的方式指定text传入预测方法的时的参数,此例中为"data" - # 对应本地部署,则为lac.analysis_lexical(data=text, batch_size=1) - data = {"texts": text, "batch_size": 1} - # 指定预测方法为lac并发送post请求,content-type类型应指定json方式 - url = "http://127.0.0.1:8866/predict/lac" - # 指定post请求的headers为application/json方式 - headers = {"Content-Type": "application/json"} - - r = requests.post(url=url, headers=headers, data=json.dumps(data)) - - # 打印预测结果 - print(json.dumps(r.json(), indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py b/demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py index 58d696bc..05e40f8a 100644 --- a/demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py +++ b/demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py @@ -4,11 +4,16 @@ import json if __name__ == "__main__": # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text_list = ["今天是个好日子", "天气预报说今天要下雨"] - text = {"text": text_list} - # 指定预测方法为lac并发送post请求 - url = "http://127.0.0.1:8866/predict/text/lac" - r = requests.post(url=url, data=text) + text = ["今天是个好日子", "天气预报说今天要下雨"] + # 以key的方式指定text传入预测方法的时的参数,此例中为"data" + # 对应本地部署,则为lac.analysis_lexical(data=text, batch_size=1) + data = {"texts": text, "batch_size": 1} + # 指定预测方法为lac并发送post请求,content-type类型应指定json方式 + url = "http://127.0.0.1:8866/predict/lac" + # 指定post请求的headers为application/json方式 + headers = {"Content-Type": "application/json"} + + r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 打印预测结果 print(json.dumps(r.json(), indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py b/demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py deleted file mode 100644 index 94446388..00000000 --- a/demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py +++ /dev/null @@ -1,16 +0,0 @@ -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text_list = ["今天是个好日子", "天气预报说今天要下雨"] - text = {"text": text_list} - # 指定自定义词典{"user_dict": dict.txt} - file = {"user_dict": open("dict.txt", "rb")} - # 指定预测方法为lac并发送post请求 - url = "http://127.0.0.1:8866/predict/text/lac" - r = requests.post(url=url, files=file, data=text) - - # 打印预测结果 - print(json.dumps(r.json(), indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/README.md b/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/README.md index f5c552b2..1e7e1c1b 100644 --- a/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/README.md +++ b/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/README.md @@ -29,7 +29,7 @@ Loading pyramidbox_lite_server_mask successful. >>> import requests >>> import json >>> import base64 ->>> import os +>>> import cv2 ``` 我们用来测试的样例图片为: @@ -47,23 +47,18 @@ Loading pyramidbox_lite_server_mask successful. 准备的数据格式为: ```python -files = [("image", file_1), ("image", file_2)] -``` -**NOTE:** 文件列表每个元素第一个参数为"image"。 - -代码如下: -```python ->>> # 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ] ->>> file_list = ["../../../../docs/imgs/family_mask.jpg", "../../../../docs/imgs/girl_mask.jpg"] ->>> files = [("image", (open(item, "rb"))) for item in file_list] +>>> img1 = cv2_to_base64(cv2.imread("../../../../docs/imgs/family_mask.jpg")) +>>> img2 = cv2_to_base64(cv2.imread("../../../../docs/imgs/woman_mask.jpg")) +>>> data = {'images': [img1, img2]} ``` ## Step3:获取并验证结果 通过发送请求到目标检测服务API,就可得到结果,代码如下: ```python >>> # 指定检测方法为pyramidbox_lite_server_mask并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/image/pyramidbox_lite_server_mask" ->>> r = requests.post(url=url, files=files, data={"visual_result": "True"}) +>>> headers = {"Content-type": "application/json"} +>>> url = "http://127.0.0.1:8866/predict/pyramidbox_lite_server_mask" +>>> r = requests.post(url=url, headers=headers, data=json.dumps(data)) ``` 我们可以打印接口返回结果: ```python @@ -165,24 +160,4 @@ pyramidbox_lite_server_mask返回的结果还包括标注检测框的图像的ba 这样我们就完成了对目标检测服务化的部署和测试。 -完整的测试代码见[pyramidbox_lite_server_mask_file_serving_demo.py](pyramidbox_lite_server_mask_file_serving_demo.py)。 - -## 进一步提升模型服务性能 -`pyramidbox_lite_server_mask`还支持直接传入opencv mat表示的图片,不产生结果文件,而是直接输出检测的人脸位置和戴口罩概率,响应时间平均提升20%以上,可用于对响应时间和性能要求更高的场景。 - -使用直接传输数据的模式,仅需要修改上文Step2中的POST方法参数,具体如下: - -```python ->>> with open(file="../../../../docs/imgs/family_mask.jpg", mode="rb") as fp: -... base64_data = base64.b64encode(fp.read()) ->>> base64_data = str(base64_data, encoding="utf8") ->>> data = {"b64s": [base64_data]} ->>> data = {"data": json.dumps(data)} -``` -进行HTTP请求时只需将data参数传入即可,具体如下: -```python ->>> r = requests.post(url=url, data=data) -``` -对结果的处理与上文一致,但需注意此种方法仅输出识别结果,不产生结果文件,因此不能获得生成图片。 - -完整的测试代码见[pyramidbox_lite_server_mask_serving_demo.py](pyramidbox_lite_server_mask_serving_demo.py)。 +完整的测试代码见[pyramidbox_lite_server_mask_file_serving_demo.py](pyramidbox_lite_server_mask_serving_demo.py)。 diff --git a/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_file_serving_demo.py b/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_file_serving_demo.py deleted file mode 100644 index 0096d2a8..00000000 --- a/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_file_serving_demo.py +++ /dev/null @@ -1,28 +0,0 @@ -# coding: utf8 -import requests -import json -import base64 -import os - -if __name__ == "__main__": - file_list = [ - "../../../../docs/imgs/family_mask.jpg", - "../../../../docs/imgs/woman_mask.jpg" - ] - files = [("image", (open(item, "rb"))) for item in file_list] - - # 指定检测方法为pyramidbox_lite_server_mask并发送post请求 - url = "http://127.0.0.1:8866/predict/image/pyramidbox_lite_server_mask" - r = requests.post(url=url, files=files, data={"visual_result": "True"}) - - # 创建图片保存文件夹 - if not os.path.exists("output"): - os.mkdir("output") - - results = eval(r.json()["results"]) - for item in results: - with open(os.path.join("output", item["path"]), "wb") as fp: - fp.write(base64.b64decode(item["base64"].split(',')[-1])) - item.pop("base64") - - print(json.dumps(results, indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_serving_demo.py b/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_serving_demo.py index 4ee6f916..955233ec 100644 --- a/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_serving_demo.py +++ b/demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_serving_demo.py @@ -1,26 +1,25 @@ # coding: utf8 import requests import json +import cv2 import base64 -if __name__ == "__main__": - # 获取第一张图片文件的base64编码 - with open(file="../../../../docs/imgs/family_mask.jpg", mode="rb") as fp: - base64_data1 = base64.b64encode(fp.read()) - base64_data1 = str(base64_data1, encoding="utf8") - # 获取第二张图片文件的base64编码 - with open(file="../../../../docs/imgs/woman_mask.jpg", mode="rb") as fp: - base64_data2 = base64.b64encode(fp.read()) - base64_data2 = str(base64_data2, encoding="utf8") - data = {"b64s": [base64_data1, base64_data2]} - data = {"data": json.dumps(data)} +def cv2_to_base64(image): + data = cv2.imencode('.jpg', image)[1] + return base64.b64encode(data.tostring()).decode('utf8') - # 指定检测方法为pyramidbox_lite_server_mask并发送post请求 - url = "http://127.0.0.1:8866/predict/image/pyramidbox_lite_server_mask" - r = requests.post(url=url, data=data) - # 得到并打印检测结果 - results = eval(r.json()["results"]) +if __name__ == '__main__': + # 获取图片的base64编码格式 + img1 = cv2_to_base64(cv2.imread("../../../../docs/imgs/family_mask.jpg")) + img2 = cv2_to_base64(cv2.imread("../../../../docs/imgs/woman_mask.jpg")) + data = {'images': [img1, img2]} + # 指定content-type + headers = {"Content-type": "application/json"} + # 发送HTTP请求 + url = "http://127.0.0.1:8866/predict/pyramidbox_lite_server_mask" + r = requests.post(url=url, headers=headers, data=json.dumps(data)) - print(json.dumps(results, indent=4, ensure_ascii=False)) + # 打印预测结果 + print(r.json()["results"]) diff --git a/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/README.md b/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/README.md deleted file mode 100644 index 7893fa7b..00000000 --- a/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# 部署图像分类服务-以yolov3_darknet53_coco2017为例 -## 简介 -目标检测作为深度学习常见任务,在各种场景下都有所使用。使用`yolov3_darknet53_coco2017`模型可以进行目标检测任务,关于`yolov3_darknet53_coco2017`的具体信息请参见[yolov3_darknet53_coco2017](https://paddlepaddle.org.cn/hubdetail?name=yolov3_darknet53_coco2017&en_category=ObjectDetection)。 - -使用PaddleHub Serving可以轻松部署一个在线目标检测服务API,可将此API接入自己的web网站进行在线目标检测,也可接入移动端应用程序,实现识图、圈人等功能。 - -下面就带领大家使用PaddleHub Serving,通过简单几步部署一个目标检测服务。 - -## Step1:启动PaddleHub Serving -启动命令如下: -```shell -$ hub serving start -m yolov3_darknet53_coco2017 -``` -启动时会显示加载模型过程,启动成功后显示: -```shell -Loading yolov3_darknet53_coco2017 successful. -``` -这样就完成了一个图像生成服务化API的部署,默认端口号为8866。 - -## Step2:测试图像生成在线API -首先引入需要的包: -```python ->>> import requests ->>> import json ->>> import base64 ->>> import os -``` -我们用来测试的样例图片为: - -

- - - -

- -

- - - -

- -准备的数据格式为: -```python -files = [("image", file_1), ("image", file_2)] -``` -**NOTE:** 文件列表每个元素第一个参数为"image"。 - -代码如下: -```python ->>> # 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ] ->>> file_list = ["../img/cat.jpg", "../img/dog.jpg"] ->>> files = [("image", (open(item, "rb"))) for item in file_list] -``` - -## Step3:获取并验证结果 -然后就可以发送请求到目标检测服务API,并得到结果,代码如下: -```python ->>> # 指定检测方法为yolov3_darknet53_coco2017并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/image/yolov3_darknet53_coco2017" ->>> r = requests.post(url=url, files=files) -``` -我们可以打印接口返回结果: -```python ->>> results = eval(r.json()["results"]) ->>> print(json.dumps(results, indent=4, ensure_ascii=False)) -[ - { - "path": "cat.jpg", - "data": [ - { - "left": 319.489, - "right": 1422.8364, - "top": 208.94229, - "bottom": 993.8552, - "label": "cat", - "confidence": 0.9174191 - } - ] - }, - { - "path": "dog.jpg", - "data": [ - { - "left": 200.6918, - "right": 748.96204, - "top": 122.74927, - "bottom": 566.2066, - "label": "dog", - "confidence": 0.83619183 - }, - { - "left": 506.8462, - "right": 623.2322, - "top": 378.0084, - "bottom": 416.116, - "label": "tie", - "confidence": 0.5082839 - } - ] - } -] -``` -根据结果可以看出准确识别了请求的图片。 - -yolov3_darknet53_coco2017返回的结果还包括标注检测框的图像的base64编码格式,经过转换可以得到生成图像。 -我们创建一个保存结果图片的文件夹: -```python ->>> if not os.path.exists("output"): ->>> os.mkdir("output") -``` -然后将图片数据进行解码并保存,代码如下: -```python ->>> results = eval(r.json()["results"]) ->>> for item in results: -... with open(output_path, "wb") as fp: -... fp.write(base64.b64decode(item["base64"].split(',')[-1])) -``` -查看指定输出文件夹,就能看到生成图像了,如图: - -

- - - -

- -

- - - -

- - -这样我们就完成了对目标检测服务化的部署和测试。 - -完整的测试代码见[yolov3_darknet53_coco2017_serving_demo.py](yolov3_darknet53_coco2017_serving_demo.py)。 diff --git a/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/cat.jpg b/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/cat.jpg deleted file mode 100644 index d71260a8c364349bc0f07ef9938220eef893d857..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 128218 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

5`otF?<->!a#2Qnnyk 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�F_)T4*%uP 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 diff --git a/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/dog.jpg b/demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/dog.jpg deleted file mode 100644 index b29ca3439b1e1f462ebf2a97ba732a7826ac834f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 60314 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

cz%lCz6CiR@uT z^>AqbKR9pN&!|wTOfxnN-bA#q*>Cndo|kUkKs6Cja0u^qu}=e8$}OBUQAVO!VgI4; z!YK7w38}e5c{}5=R#qDvK)OJ_~Z z9yy~Ec41bOAYSg4)J%1_x`1;Tz#8VWzMHOR#b-g+5PszY)xF{fm4G2o#yv{d>v0!m zt{|*!QN!`Z)yFJH3V0Oc@?f$eXUwW$Qo%EOM3ykQ2{wUf;7CL%NcD3Nbr{SNsb zLKDrj>V13F|IcLdr6@|uN|fh~nP^!&Nb?q~CaOAMsJI=Y-~=iL!E3mPF1QZE;X*)4 zhxpuT8jR-6-yX$ns4Eb9vMw}xN9>ci>`D8uaQr!DTdOhG$~of)QG-EuFHZ6zD}KC0 zhCh;l=3-%KZrHNCG_7gn;?Zc_>aKd9cawA~YEZ8|$}3QR>hTe-C-4)&ixp*s6&)Ab zy`8ai4wIM}ps_0=*6Nd*!d}<7H(_P7QS(zwwf(A54j!06iNX^>HU_k7UbGFqR!K%R z;zSyxX^BLPiS!|g(Dp7hW8TkAw1>~pwOXaYCPC1TXE{UGPo8I?GEXa+^|dx`C86N+ z;7H(7$F)CV?y{>xn>Jnf&|oNClPkfJ=b|QDw9yu+Q6htbUYAFLQH;=dL3dNEwYgkn z`2is_o6Bbi2OyLbr<<(*IS9o5fkg*0XVzHrk+8pVp1?Nr>w;uu>Qs`CWO49o#J2{}jSbwQ=kQ ziTWV$%Dn0TezmXhX&>Qb*e?yJ^@;8~)!Qn)8BVy*v!T7j$cncB-j_7nx+t*5V?BB295zIqjmsw7|`c@HcC+qXz>= z&7IZK#v#RYD;&wXnc_hFxMK4&Ic4o9mRa9OzC}mlWH<0Mh}*Dh0dw)8Arr@eU2%>B zC!TLeueJmerqGf5)*2z_uwh)cxvXyMi9Aq;s_eOMKbn}aU(5z8^mWuI3}S&eD%AM^ zPkpB`3Yy-6T4~`Hx$g9xC97z)nAOhv&FLJhf;|+L6NhsHq*)D_#CRg7I#qwOmN>|_ z_kTPuqyGPyXAT*%Ae+3F%a#lHl`M;1c-B@r8Q3R)UC(JgL3(MRn##s{a3k44<>+mh zCE#zuKx*!QJd~?hwxpsysI_T~4L3zDGDv2)a0KA$1iygQd0>c@*^gQW1?u zmIe(NObv7h{VNY~UvjAal(y$N4&RN z^p2A&5%_-~(&f;Wf;|?`PwZy}>@pJLI^fzJ7isvisW#=f_Zz1$#r-_p3|CS%p9nDRWLJlofh|}$8j-?cgPHOcXY{*VfTR~CZ zWOhv(gWP!MbLlwZaY(P;H11)$+waPlgwM~QU}rK&1GBmm*L+1tgDll2>`?+dC76pG zn&oca_mK`i5#0m}cCu-r*L4g-q`Cns({SP`-yOpL)?P&kr))sk#8ZIbb}P3z*!AHK zsKL*mS>O14>WQYA6U5ttO!cq@bc*r$_!zaE zoJ2llC9>p5soYwtUrf}NvraP&iU^gTZdAaxQ?0Hv#~8Q#42s_&o8MvSjc$WdT_D+h zO-~Wq+W0QU$ggCP+M$?1Iw*0rb<|InpnyN_70XfpF^8eNAvE7__ykYMt(PNiA|F?hIoCkY<3J>=g_kFP
ps@7MnS8U!a=hqrTtXOK-6zMGf1VoH$dEBTbk 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 R)FzTEp|V$5HSK>> # coding: utf8 ->>> import requests ->>> import json -``` -准备的数据格式为: -```python -{"text_1": [text_a1, text_a2, ... ], "text_2": [text_b1, text_b2, ... ]} -``` -**NOTE:** 字典的key分别为"text_1"和"text_2",与`simnet_bow`模型使用的输入数据一致。 - -根据文本和数据格式,代码如下: -```python ->>> # 指定用于用于匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ] ->>> # "text_2": [text_b1, text_b2, ... ]} ->>> text = { ->>> "text_1": ["这道题太难了", "这道题太难了", "这道题太难了"], ->>> "text_2": ["这道题是上一年的考题", "这道题不简单", "这道题很有意思"] ->>> } -``` - -## Step3:获取并验证结果 -接下来发送请求到语义模型API,并得到结果,代码如下: -```python ->>> # 指定匹配方法为simnet_bow并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/text/simnet_bow" ->>> r = requests.post(url=url, data=text) -``` -`simnet_bow`模型返回的结果为每对文本对比后的相似度,我们尝试打印接口返回结果: -```python -# 打印预测结果 ->>> print(json.dumps(r.json(), indent=4, ensure_ascii=False)) -{ - "msg": "", - "results": [ - { - "similarity": 0.8445, - "text_1": "这道题太难了", - "text_2": "这道题是上一年的考题" - }, - { - "similarity": 0.9275, - "text_1": "这道题太难了", - "text_2": "这道题不简单" - }, - { - "similarity": 0.9083, - "text_1": "这道题太难了", - "text_2": "这道题很有意思" - } - ], - "status": "0" -} -``` -这样我们就完成了对语义模型simnet_bow的预测服务化部署和测试。 - -完整的测试代码见[simnet_bow_serving_demo.py](simnet_bow_serving_demo.py)。 diff --git a/demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py b/demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py deleted file mode 100644 index 73d38e81..00000000 --- a/demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py +++ /dev/null @@ -1,17 +0,0 @@ -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定用于匹配的文本并生成字典{"text_1": [text_a1, text_a2, ... ] - # "text_2": [text_b1, text_b2, ... ]} - text = { - "text_1": ["这道题太难了", "这道题太难了", "这道题太难了"], - "text_2": ["这道题是上一年的考题", "这道题不简单", "这道题很有意思"] - } - # 指定匹配方法为simnet_bow并发送post请求 - url = "http://127.0.0.1:8866/predict/text/simnet_bow" - r = requests.post(url=url, data=text) - - # 打印匹配结果 - print(json.dumps(r.json(), indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/README.md b/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/README.md deleted file mode 100644 index 1b5a2aab..00000000 --- a/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/README.md +++ /dev/null @@ -1,91 +0,0 @@ -# 部署图像分割服务-以deeplabv3p_xception65_humanseg为例 -## 简介 -图像分割是深度学习的常见任务。使用`deeplabv3p_xception65_humanseg`模型可以进行人像分割任务,关于`deeplabv3p_xception65_humanseg`的具体信息请参见[deeplabv3p_xception65_humanseg](https://paddlepaddle.org.cn/hubdetail?name=deeplabv3p_xception65_humanseg&en_category=ImageSegmentation)。 - -使用PaddleHub Serving可以轻松部署一个在线图像分割服务API,可将此API接入自己的web网站进行在线图像分割,也可接入移动端应用程序,实现拍照分割等功能。 - -下面就带领大家使用PaddleHub Serving,通过简单几步部署一个目标检测服务。 - -## Step1:启动PaddleHub Serving -启动命令如下 -```shell -$ hub serving start -m deeplabv3p_xception65_humanseg -``` -启动时会显示加载模型过程,启动成功后显示: -```shell -Loading deeplabv3p_xception65_humanseg successful. -``` -这样就完成了一个图像分割服务化API的部署,默认端口号为8866。 - -## Step2:测试图像分割在线API -首先指定编码格式及引入需要的包: -```python ->>> # coding: utf8 ->>> import requests ->>> import json ->>> import base64 ->>> import os -``` -我们用来测试的样例图片为: - -

- - - -

- -准备的数据格式为: -```python -files = [("image", file_1), ("image", file_2)] -``` -**NOTE:** 文件列表每个元素第一个参数为"image"。 - -代码如下 -```python ->>> # 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ] ->>> file_list = ["../../../../docs/imgs/girl.jpg"] ->>> files = [("image", (open(item, "rb"))) for item in file_list] -``` - -## Step3:获取并验证结果 -然后就可以发送请求到图像分割服务API,并得到结果,代码如下: -```python ->>> # 指定检测方法为deeplabv3p_xception65_humanseg并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/image/deeplabv3p_xception65_humanseg" ->>> r = requests.post(url=url, files=files) -``` -我们可以打印接口返回结果: -```python ->>> results = eval(r.json()["results"]) ->>> print(json.dumps(results, indent=4, ensure_ascii=False)) -[ - { - "origin": "girl.jpg", - "processed": "humanseg_output/girl.png" - } -] -``` -deeplabv3p_xception65_humanseg返回的结果还包括人像分割后的图像的base64编码格式,经过转换可以得到生成图像。 -我们建立一个文件夹用于存放结果图片: -```python ->>> if not os.path.exists("output"): ->>> os.mkdir("output") -``` -然后将图片数据解码并保存,代码如下: -```python ->>> results = eval(r.json()["results"]) ->>> for item in results: -... with open(output_path, "wb") as fp: -... fp.write(base64.b64decode(item["base64"].split(',')[-1])) -``` -查看指定输出文件夹,就能看到生成图像了,如图: - -

- - - -

- -这样我们就完成了对图像分割模型deeplabv3p_xception65_humanseg服务化的部署和测试。 - -完整的测试代码见[deeplabv3p_xception65_humanseg_serving_demo.py](deeplabv3p_xception65_humanseg_serving_demo.py)。 diff --git a/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py b/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py deleted file mode 100644 index 77b80754..00000000 --- a/demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py +++ /dev/null @@ -1,26 +0,0 @@ -# coding: utf8 -import requests -import json -import base64 -import os - -if __name__ == "__main__": - # 指定要使用的图片文件并生成列表[("image", img_1), ("image", img_2), ... ] - file_list = ["../../../../docs/imgs/girl.jpg"] - files = [("image", (open(item, "rb"))) for item in file_list] - # 指定图片分割方法为deeplabv3p_xception65_humanseg并发送post请求 - url = "http://127.0.0.1:8866/predict/image/deeplabv3p_xception65_humanseg" - r = requests.post(url=url, files=files) - - # 保存分割后的图片到output文件夹,打印模型输出结果 - if not os.path.exists("output"): - os.mkdir("output") - - results = eval(r.json()["results"]) - for item in results: - with open( - os.path.join("output", item["processed"].split("/")[-1]), - "wb") as fp: - fp.write(base64.b64decode(item["base64"].split(',')[-1])) - item.pop("base64") - print(json.dumps(results, indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/sentiment_analysis_senta_lstm/README.md b/demo/serving/module_serving/sentiment_analysis_senta_lstm/README.md deleted file mode 100644 index 62c9c5c2..00000000 --- a/demo/serving/module_serving/sentiment_analysis_senta_lstm/README.md +++ /dev/null @@ -1,78 +0,0 @@ -# 部署情感分析服务-以senta_lstm为例 -## 简介 -情感分析针对带有主观描述的中文文本,可自动判断该文本的情感极性类别并给出相应的置信度。利用`senta_lstm`模型可以完成中文情感分析任务,关于`senta_lstm`的具体信息请参见[senta_lstm] -(https://paddlepaddle.org.cn/hubdetail?name=senta_lstm&en_category=SentimentAnalysis)。 - -使用PaddleHub Serving可以部署一个在线情感分析服务,可以将此接口用于分析评论、智能客服等应用。 - -这里就带领大家使用PaddleHub Serving,通过简单几步部署一个情感分析在线服务。 - -## Step1:启动PaddleHub Serving -启动命令如下 -```shell -$ hub serving start -m senta_lstm -``` -启动时会显示加载模型过程,启动成功后显示 -```shell -Loading senta_lstm successful. -``` -这样就完成了一个词法分析服务化API的部署,默认端口号为8866。 - -## Step2:测试词法分析在线API -在服务部署好之后,我们可以进行测试。 - -首先指定编码格式及引入需要的包: -```python ->>> # coding: utf8 ->>> import requests ->>> import json -``` - -用来测试的文本为`我不爱吃甜食`和`我喜欢躺在床上看电影`,准备的数据格式为: -```python -{"text": [text_1, text_2, ...]} -``` -**NOTE:** 字典的key为"text"。 - -根据文本和数据格式,代码如下: -```python ->>> # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} ->>> text_list = ["我不爱吃甜食", "我喜欢躺在床上看电影"] ->>> text = {"text": text_list} -``` - -## Step3:获取并验证结果 -接下来发送请求到词法分析API,并得到结果,代码如下: -```python -# 指定预测方法为senta_lstm并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/text/senta_lstm" ->>> r = requests.post(url=url, data=text) -``` -我们尝试打印接口返回结果: -```python -# 打印预测结果 ->>> print(json.dumps(r.json(), indent=4, ensure_ascii=False)) -{ - "msg": "", - "results": [ - { - "negative_probs": 0.7079, - "positive_probs": 0.2921, - "sentiment_key": "negative", - "sentiment_label": 0, - "text": "我不爱吃甜食" - }, - { - "negative_probs": 0.0149, - "positive_probs": 0.9851, - "sentiment_key": "positive", - "sentiment_label": 1, - "text": "我喜欢躺在床上看电影" - } - ], - "status": "0" -} -``` -这样我们就完成了对词法分析的预测服务化部署和测试。 - -完整的测试代码见[senta_lstm_serving_demo.py](senta_lstm_serving_demo.py)。 diff --git a/demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py b/demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py deleted file mode 100644 index 9ff7f49c..00000000 --- a/demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py +++ /dev/null @@ -1,14 +0,0 @@ -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text_list = ["我不爱吃甜食", "我喜欢躺在床上看电影"] - text = {"text": text_list} - # 指定预测方法为senta_lstm并发送post请求 - url = "http://127.0.0.1:8866/predict/text/senta_lstm" - r = requests.post(url=url, data=text) - - # 打印预测结果 - print(json.dumps(r.json(), indent=4, ensure_ascii=False)) diff --git a/demo/serving/module_serving/text_censorship_porn_detection_lstm/README.md b/demo/serving/module_serving/text_censorship_porn_detection_lstm/README.md deleted file mode 100644 index ea0a3135..00000000 --- a/demo/serving/module_serving/text_censorship_porn_detection_lstm/README.md +++ /dev/null @@ -1,79 +0,0 @@ -# 部署文本审核服务-以porn_detection_lstm为例 -## 简介 -在网站建设等场景中经常需要对敏感信息进行鉴定和过滤,采用文本审核模型`porn_detection_lstm`可自动判别文本是否涉黄并给出相应的置信度,关于`porn_detection_lstm`的具体信息请参见[porn_detection_lstm](https://paddlepaddle.org -.cn/hubdetail?name=porn_detection_lstm&en_category=TextCensorship) - -使用PaddleHub Serving可以部署一个在线文本审核服务,可以将此接口用于防止低俗交友、色情文本等应用。 - -这里就带领大家使用PaddleHub Serving,通过简单几步部署一个文本审核在线服务。 - -## Step1:启动PaddleHub Serving -启动命令如下: -```shell -$ hub serving start -m porn_detection_lstm -``` -启动时会显示加载模型过程,启动成功后显示: -```shell -Loading porn_detection_lstm successful. -``` -这样就完成了一个文本审核服务化API的部署,默认端口号为8866。 - -## Step2:测试文本审核在线API -在服务部署好之后,我们可以进行测试。 - -首先指定编码格式及引入需要的包: -```python ->>> # coding: utf8 ->>> import requests ->>> import json -``` - -用来测试的文本为`黄片下载`和`中国黄页`,准备的数据格式为: -```python -{"text": [text_1, text_2, ...]} -``` -**NOTE:** 字典的key为"text"。 - -根据文本和数据格式,代码如下: -```python ->>> # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} ->>> text_list = ["黄片下载", "中国黄页"] ->>> text = {"text": text_list} -``` -## Step3:获取并验证结果 -接下来发送请求到文本审核API,并得到结果,代码如下: -```python -# 指定预测方法为lac并发送post请求 ->>> url = "http://127.0.0.1:8866/predict/text/porn_detection_lstm" ->>> r = requests.post(url=url, data=text) -``` -`porn_detection_lstm`模型返回的结果为每个文本鉴定后的结果,我们尝试打印接口返回结果: -```python -# 打印预测结果 ->>> print(json.dumps(r.json(), indent=4, ensure_ascii=False)) -{ - "msg": "", - "results": [ - { - "not_porn_probs": 0.0121, - "porn_detection_key": "porn", - "porn_detection_label": 1, - "porn_probs": 0.9879, - "text": "黄片下载" - }, - { - "not_porn_probs": 0.9954, - "porn_detection_key": "not_porn", - "porn_detection_label": 0, - "porn_probs": 0.0046, - "text": "中国黄页" - } - ], - "status": "0" -} -``` -可以看出正确得到了两个文本的预测结果。 - -这样我们就完成了对文本审核模型的预测服务化部署和测试。 - -完整的测试代码见[porn_detection_lstm_serving_demo.py](porn_detection_lstm_serving_demo.py)。 diff --git a/demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py b/demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py deleted file mode 100644 index 627f3d9b..00000000 --- a/demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py +++ /dev/null @@ -1,14 +0,0 @@ -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text_list = ["黄片下载", "中国黄页"] - text = {"text": text_list} - # 指定预测方法为lac并发送post请求 - url = "http://127.0.0.1:8866/predict/text/porn_detection_lstm" - r = requests.post(url=url, data=text) - - # 打印预测结果 - print(json.dumps(r.json(), indent=4, ensure_ascii=False)) diff --git a/docs/tutorial/serving.md b/docs/tutorial/serving.md index cbaf2b7f..80af3ae1 100644 --- a/docs/tutorial/serving.md +++ b/docs/tutorial/serving.md @@ -82,9 +82,9 @@ $ hub serving start --config config.json 在使用PaddleHub Serving部署服务端的模型预测服务后,就可以在客户端访问预测接口以获取结果了,接口url格式为: -http://127.0.0.1:8866/predict//\ +`http://127.0.0.1:8866/predict/` -其中,\为text或image,与模型种类对应,\为模型名。 +其中,``为模型名。 通过发送一个POST请求,即可获取预测结果,下面我们将展示一个具体的demo,以说明使用PaddleHub Serving部署和使用流程。 @@ -163,12 +163,17 @@ import requests import json if __name__ == "__main__": - # 指定用于用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text_list = ["今天是个好日子", "天气预报说今天要下雨"] - text = {"text": text_list} - # 指定预测方法为lac并发送post请求 - url = "http://127.0.0.1:8866/predict/text/lac" - r = requests.post(url=url, data=text) + # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} + text = ["今天是个好日子", "天气预报说今天要下雨"] + # 以key的方式指定text传入预测方法的时的参数,此例中为"data" + # 对应本地部署,则为lac.analysis_lexical(data=text, batch_size=1) + data = {"texts": text, "batch_size": 1} + # 指定预测方法为lac并发送post请求,content-type类型应指定json方式 + url = "http://127.0.0.1:8866/predict/lac" + # 指定post请求的headers为application/json方式 + headers = {"Content-Type": "application/json"} + + r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 打印预测结果 print(json.dumps(r.json(), indent=4, ensure_ascii=False)) @@ -178,6 +183,7 @@ if __name__ == "__main__": ```python { + "msg": "", "results": [ { "tag": [ @@ -195,8 +201,10 @@ if __name__ == "__main__": "天气预报", "说", "今天", "要", "下雨" ] } - ] + ], + "status": "0" } + ``` ### Step3:停止serving服务 @@ -219,72 +227,13 @@ $ PaddleHub Serving will stop. ## Demo——其他模型的一键部署服务 -获取其他PaddleHub Serving的一键服务部署场景示例,可参见下列demo - -* [图像分类-基于vgg11_imagent](../../demo/serving/module_serving/classification_vgg11_imagenet) - -  该示例展示了利用vgg11_imagent完成图像分类服务化部署和在线预测,获取图像分类结果。 - -* [图像生成-基于stgan_celeba](../../demo/serving/module_serving/GAN_stgan_celeba) - -  该示例展示了利用stgan_celeba生成图像服务化部署和在线预测,获取指定风格的生成图像。 - -* [文本审核-基于porn_detection_lstm](../../demo/serving/module_serving/text_censorship_porn_detection_lstm) - -  该示例展示了利用porn_detection_lstm完成中文文本黄色敏感信息鉴定的服务化部署和在线预测,获取文本是否敏感及其置信度。 - * [中文词法分析-基于lac](../../demo/serving/module_serving/lexical_analysis_lac)   该示例展示了利用lac完成中文文本分词服务化部署和在线预测,获取文本的分词结果,并可通过用户自定义词典干预分词结果。 -* [目标检测-基于yolov3_darknet53_coco2017](../../demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017) - -  该示例展示了利用yolov3_darknet53_coco2017完成目标检测服务化部署和在线预测,获取检测结果和覆盖识别框的图片。 - -* [中文语义分析-基于simnet_bow](../../demo/serving/module_serving/semantic_model_simnet_bow) - -  该示例展示了利用simnet_bow完成中文文本相似度检测服务化部署和在线预测,获取文本的相似程度。 - -* [图像分割-基于deeplabv3p_xception65_humanseg](../../demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg) - -  该示例展示了利用deeplabv3p_xception65_humanseg完成图像分割服务化部署和在线预测,获取识别结果和分割后的图像。 - -* [中文情感分析-基于senta_lstm](../../demo/serving/module_serving/sentiment_analysis_senta_lstm) - -  该示例展示了利用senta_lstm完成中文文本情感分析服务化部署和在线预测,获取文本的情感分析结果。 - -## 客户端请求新版模型的方式 -对某些新版模型,客户端请求方式有所变化,更接近本地预测的请求方式,以降低学习成本。 -以lac(2.1.0)为例,使用上述方法进行请求将提示: -```python -{ - "Warnning": "This usage is out of date, please use 'application/json' as content-type to post to /predict/lac. See 'https://github.com/PaddlePaddle/PaddleHub/blob/release/v1.6/docs/tutorial/serving.md' for more details." -} -``` -对于lac(2.1.0),请求的方式如下: -```python -# coding: utf8 -import requests -import json - -if __name__ == "__main__": - # 指定用于预测的文本并生成字典{"text": [text_1, text_2, ... ]} - text = ["今天是个好日子", "天气预报说今天要下雨"] - # 以key的方式指定text传入预测方法的时的参数,此例中为"data" - # 对应本地部署,则为lac.analysis_lexical(texts=[text1, text2]) - data = {"texts": text, "batch_size": 2} - # 指定预测方法为lac并发送post请求 - url = "http://127.0.0.1:8866/predict/lac" - # 指定post请求的headers为application/json方式 - headers = {"Content-Type": "application/json"} - - r = requests.post(url=url, headers=headers, data=json.dumps(data)) - - # 打印预测结果 - print(json.dumps(r.json(), indent=4, ensure_ascii=False)) -``` +* [人脸检测-基于pyramidbox_lite_server_mask](../../demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask) -此Demo的具体信息和代码请参见[LAC Serving_2.1.0](../../demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py)。 +  该示例展示了利用pyramidbox_lite_server_mask完成人脸口罩检测,检测人脸位置以及戴口枣的置信度。 ## Bert Service 除了预训练模型一键服务部署功能之外,PaddleHub Serving还具有`Bert Service`功能,支持ernie_tiny、bert等模型快速部署,对外提供可靠的在线embedding服务,具体信息请参见[Bert Service](./bert_service.md)。 -- GitLab