Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
PaddleHub
提交
18b96865
P
PaddleHub
项目概览
PaddlePaddle
/
PaddleHub
大约 1 年 前同步成功
通知
282
Star
12117
Fork
2091
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
200
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
PaddleHub
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
200
Issue
200
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
18b96865
编写于
6月 06, 2020
作者:
走神的阿圆
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Modify docs for hub-serving
上级
1a9db789
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
58 addition
and
1006 deletion
+58
-1006
demo/serving/README.md
demo/serving/README.md
+3
-29
demo/serving/module_serving/GAN_stgan_celeba/README.md
demo/serving/module_serving/GAN_stgan_celeba/README.md
+0
-84
demo/serving/module_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py
...ule_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py
+0
-26
demo/serving/module_serving/README.md
demo/serving/module_serving/README.md
+2
-26
demo/serving/module_serving/classification_vgg11_imagenet/README.md
...ng/module_serving/classification_vgg11_imagenet/README.md
+0
-76
demo/serving/module_serving/classification_vgg11_imagenet/vgg11_imagenet_serving_demo.py
...ssification_vgg11_imagenet/vgg11_imagenet_serving_demo.py
+0
-18
demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py
...le_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py
+0
-19
demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py
...g/module_serving/lexical_analysis_lac/lac_serving_demo.py
+10
-5
demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py
...erving/lexical_analysis_lac/lac_with_dict_serving_demo.py
+0
-16
demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/README.md
...ng/object_detection_pyramidbox_lite_server_mask/README.md
+8
-32
demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_file_serving_demo.py
...ver_mask/pyramidbox_lite_server_mask_file_serving_demo.py
+0
-28
demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_serving_demo.py
...e_server_mask/pyramidbox_lite_server_mask_serving_demo.py
+16
-17
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/README.md
...ving/object_detection_yolov3_darknet53_coco2017/README.md
+0
-135
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/cat.jpg
...object_detection_yolov3_darknet53_coco2017/output/cat.jpg
+0
-0
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/dog.jpg
...object_detection_yolov3_darknet53_coco2017/output/dog.jpg
+0
-0
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/yolov3_darknet53_coco2017_serving_demo.py
...knet53_coco2017/yolov3_darknet53_coco2017_serving_demo.py
+0
-26
demo/serving/module_serving/semantic_model_simnet_bow/README.md
...erving/module_serving/semantic_model_simnet_bow/README.md
+0
-80
demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py
...ving/semantic_model_simnet_bow/simnet_bow_serving_demo.py
+0
-17
demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/README.md
...tic_segmentation_deeplabv3p_xception65_humanseg/README.md
+0
-91
demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py
...5_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py
+0
-26
demo/serving/module_serving/sentiment_analysis_senta_lstm/README.md
...ng/module_serving/sentiment_analysis_senta_lstm/README.md
+0
-78
demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py
.../sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py
+0
-14
demo/serving/module_serving/text_censorship_porn_detection_lstm/README.md
...ule_serving/text_censorship_porn_detection_lstm/README.md
+0
-79
demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py
...p_porn_detection_lstm/porn_detection_lstm_serving_demo.py
+0
-14
docs/tutorial/serving.md
docs/tutorial/serving.md
+19
-70
未找到文件。
demo/serving/README.md
浏览文件 @
18b96865
...
...
@@ -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完成人脸口罩检测,检测人脸位置以及戴口枣的置信度
。
\ No newline at end of file
demo/serving/module_serving/GAN_stgan_celeba/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署图像生成服务-以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
```
我们用来测试的样例图片为:
<p
align=
"center"
>
<img
src=
"../../../../docs/imgs/man.png"
width=
"30%"
/>
</p>
根据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
]))
```
查看指定输出文件夹,就能看到生成图像了,如图:
<p
align=
"center"
>
<img
src=
"./stgan_output/Bald_man.png"
width=
"30%"
/>
</p>
这样我们就完成了对图像生成服务化的部署和测试。
完整的测试代码见
[
stgan_celeba_serving_demo.py
](
stgan_celeba_serving_demo.py
)
。
demo/serving/module_serving/GAN_stgan_celeba/stgan_celeba_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/README.md
浏览文件 @
18b96865
...
...
@@ -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
)
。
demo/serving/module_serving/classification_vgg11_imagenet/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署图像分类服务-以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
```
我们用来测试的样例图片为:
<p
align=
"center"
>
<img
src=
"../../../../docs/imgs/cat.jpg"
width=
"45%"
/>
</p>
<p
align=
"center"
>
<img
src=
"../../../../docs/imgs/flower.jpg"
width=
"45%"
/>
</p>
准备的数据格式为:
```
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
)
。
demo/serving/module_serving/classification_vgg11_imagenet/vgg11_imagenet_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/lexical_analysis_lac/lac_2.1.0_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/lexical_analysis_lac/lac_serving_demo.py
浏览文件 @
18b96865
...
...
@@ -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
))
demo/serving/module_serving/lexical_analysis_lac/lac_with_dict_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/README.md
浏览文件 @
18b96865
...
...
@@ -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,5 @@ 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_file_serving_demo.py
](
pyramidbox_lite_server_mask_serving_demo.py
)
。
完整的测试代码见
[
pyramidbox_lite_server_mask_serving_demo.py
](
pyramidbox_lite_server_mask_serving_demo.py
)
。
demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_file_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/object_detection_pyramidbox_lite_server_mask/pyramidbox_lite_server_mask_serving_demo.py
浏览文件 @
18b96865
# 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"
])
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署图像分类服务-以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
```
我们用来测试的样例图片为:
<p
align=
"center"
>
<img
src=
"../../../../docs/imgs/cat.jpg"
width=
"65%"
/>
</p>
<p
align=
"center"
>
<img
src=
"../../../../docs/imgs/dog.jpg"
width=
"65%"
/>
</p>
准备的数据格式为:
```
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
]))
```
查看指定输出文件夹,就能看到生成图像了,如图:
<p
align=
"center"
>
<img
src=
"./output/cat.jpg"
width=
"65%"
/>
</p>
<p
align=
"center"
>
<img
src=
"./output/dog.jpg"
width=
"65%"
/>
</p>
这样我们就完成了对目标检测服务化的部署和测试。
完整的测试代码见
[
yolov3_darknet53_coco2017_serving_demo.py
](
yolov3_darknet53_coco2017_serving_demo.py
)
。
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/cat.jpg
已删除
100644 → 0
浏览文件 @
1a9db789
125.2 KB
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/output/dog.jpg
已删除
100644 → 0
浏览文件 @
1a9db789
58.9 KB
demo/serving/module_serving/object_detection_yolov3_darknet53_coco2017/yolov3_darknet53_coco2017_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# coding: utf8
import
requests
import
json
import
base64
import
os
if
__name__
==
"__main__"
:
# 指定要检测的图片并生成列表[("image", img_1), ("image", img_2), ... ]
file_list
=
[
"../../../../docs/imgs/cat.jpg"
,
"../../../../docs/imgs/dog.jpg"
]
files
=
[(
"image"
,
(
open
(
item
,
"rb"
)))
for
item
in
file_list
]
# 指定检测方法为yolov3_coco2017并发送post请求
url
=
"http://127.0.0.1:8866/predict/image/yolov3_darknet53_coco2017"
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
[
"path"
]),
"wb"
)
as
fp
:
fp
.
write
(
base64
.
b64decode
(
item
[
"base64"
].
split
(
','
)[
-
1
]))
item
.
pop
(
"base64"
)
print
(
json
.
dumps
(
results
,
indent
=
4
,
ensure_ascii
=
False
))
demo/serving/module_serving/semantic_model_simnet_bow/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署语义模型服务-以simnet_bow为例
## 简介
`simnet_bow`
是一个计算短文本相似度的模型,可以根据用户输入的两个文本,计算出相似度得分。关于
`simnet_bow`
的具体信息请参见
[
simnet_bow
](
https://paddlepaddle.org.cn/hubdetail?name=simnet_bow&en_category=SemanticModel
)
。
使用PaddleHub Serving可以部署一个在线语义模型服务,可以将此接口用于在线文本相似度分析、智能问答检索等应用。
这里就带领大家使用PaddleHub Serving,通过简单几步部署一个语义模型在线服务。
## Step1:启动PaddleHub Serving
启动命令如下:
```
shell
$
hub serving start
-m
simnet_bow
```
启动时会显示加载模型过程,启动成功后显示:
```
shell
Loading lac successful.
```
这样就完成了一个语义模型服务化API的部署,默认端口号为8866。
## Step2:测试语义模型在线API
在服务部署好之后,我们可以进行测试,用来测试的文本对分别为
`[这道题太难了:这道题是上一年的考题], [这道题太难了:这道题不简单], [这道题太难了:这道题很有意思]`
。
首先指定编码格式及引入需要的包:
```
python
>>>
# 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
)
。
demo/serving/module_serving/semantic_model_simnet_bow/simnet_bow_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署图像分割服务-以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
```
我们用来测试的样例图片为:
<p
align=
"center"
>
<img
src=
"../img/girl.jpg"
width=
"65%"
/>
</p>
准备的数据格式为:
```
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
]))
```
查看指定输出文件夹,就能看到生成图像了,如图:
<p
align=
"center"
>
<img
src=
"./output/girl.png"
width=
"65%"
/>
</p>
这样我们就完成了对图像分割模型deeplabv3p_xception65_humanseg服务化的部署和测试。
完整的测试代码见
[
deeplabv3p_xception65_humanseg_serving_demo.py
](
deeplabv3p_xception65_humanseg_serving_demo.py
)
。
demo/serving/module_serving/semantic_segmentation_deeplabv3p_xception65_humanseg/deeplabv3p_xception65_humanseg_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/sentiment_analysis_senta_lstm/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署情感分析服务-以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
)
。
demo/serving/module_serving/sentiment_analysis_senta_lstm/senta_lstm_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
demo/serving/module_serving/text_censorship_porn_detection_lstm/README.md
已删除
100644 → 0
浏览文件 @
1a9db789
# 部署文本审核服务-以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
)
。
demo/serving/module_serving/text_censorship_porn_detection_lstm/porn_detection_lstm_serving_demo.py
已删除
100644 → 0
浏览文件 @
1a9db789
# 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
))
docs/tutorial/serving.md
浏览文件 @
18b96865
...
...
@@ -82,9 +82,9 @@ $ hub serving start --config config.json
在使用PaddleHub Serving部署服务端的模型预测服务后,就可以在客户端访问预测接口以获取结果了,接口url格式为:
http://127.0.0.1:8866/predict/
<CATEGORY
\
>
/\
<MODULE>
`http://127.0.0.1:8866/predict/<MODULE>`
其中,
\<
CATEGORY>为text或image,与模型种类对应,
\<
MODULE>
为模型名。
其中,
`<MODULE>`
为模型名。
通过发送一个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
)
。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录