Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
Serving
提交
835186b8
S
Serving
项目概览
PaddlePaddle
/
Serving
大约 1 年 前同步成功
通知
186
Star
833
Fork
253
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
105
列表
看板
标记
里程碑
合并请求
10
Wiki
2
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Serving
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
105
Issue
105
列表
看板
标记
里程碑
合并请求
10
合并请求
10
Pages
分析
分析
仓库分析
DevOps
Wiki
2
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
835186b8
编写于
5月 17, 2020
作者:
D
dongdaxiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
update readme and image_rpc_client
上级
01666953
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
1110 addition
and
72 deletion
+1110
-72
python/examples/imagenet/README.md
python/examples/imagenet/README.md
+9
-8
python/examples/imagenet/README_CN.md
python/examples/imagenet/README_CN.md
+10
-9
python/examples/imagenet/image_http_client.py
python/examples/imagenet/image_http_client.py
+0
-48
python/examples/imagenet/image_rpc_client.py
python/examples/imagenet/image_rpc_client.py
+19
-7
python/examples/imagenet/imagenet.label
python/examples/imagenet/imagenet.label
+1000
-0
python/examples/imagenet/resnet50_web_service.py
python/examples/imagenet/resnet50_web_service.py
+72
-0
未找到文件。
python/examples/imagenet/README.md
浏览文件 @
835186b8
...
...
@@ -15,34 +15,35 @@ sh get_model.sh
pip install paddle_serving_app
```
### HTTP
Infer
### HTTP
Service
launch server side
```
python image_classification_service.py ResNet50_vd_model
workdir 9393
#cpu inference service
python image_classification_service.py ResNet50_vd_model
cpu 9696
#cpu inference service
```
```
python image_classification_service
_gpu.py ResNet50_vd_model workdir 9393
#gpu inference service
python image_classification_service
.py ResNet50_vd_model gpu 9696
#gpu inference service
```
client send inference request
```
python image_http_client.py
curl -H "Content-Type:application/json" -X POST -d '{"feed":[{"image": "https://paddle-serving.bj.bcebos.com/imagenet-example/daisy.jpg"}], "fetch": ["score"]}' http://127.0.0.1:9696/image/prediction
```
### RPC Infer
### RPC Service
launch server side
```
python -m paddle_serving_server.serve --model ResNet50_vd_model --port 9
393
#cpu inference service
python -m paddle_serving_server.serve --model ResNet50_vd_model --port 9
696
#cpu inference service
```
```
python -m paddle_serving_server_gpu.serve --model ResNet50_vd_model --port 9
393
--gpu_ids 0 #gpu inference service
python -m paddle_serving_server_gpu.serve --model ResNet50_vd_model --port 9
696
--gpu_ids 0 #gpu inference service
```
client send inference request
```
python image_rpc_client.py ResNet50_vd_client_config/serving_client_conf.prototxt
```
*the port of server side in this example is 9
393, the sample data used by client side is in the folder ./data. These parameter can be modified in practice*
*
the port of server side in this example is 9
696
python/examples/imagenet/README_CN.md
浏览文件 @
835186b8
...
...
@@ -15,34 +15,35 @@ sh get_model.sh
pip install paddle_serving_app
```
###
执行HTTP预测
服务
###
HTTP
服务
启动server端
```
python image_classification_service.py ResNet50_vd_model
workdir 9393
#cpu预测服务
python image_classification_service.py ResNet50_vd_model
cpu 9696
#cpu预测服务
```
```
python image_classification_service
_gpu.py ResNet50_vd_model workdir 9393
#gpu预测服务
python image_classification_service
.py ResNet50_vd_model gpu 9696
#gpu预测服务
```
client端进行预测
发送HTTP POST请求
```
python image_http_client.py
curl -H "Content-Type:application/json" -X POST -d '{"feed":[{"image": "https://paddle-serving.bj.bcebos.com/imagenet-example/daisy.jpg"}], "fetch": ["score"]}' http://127.0.0.1:9696/image/prediction
```
### 执行RPC预测服务
### RPC服务
启动server端
```
python -m paddle_serving_server.serve --model ResNet50_vd_model --port 9
393
#cpu预测服务
python -m paddle_serving_server.serve --model ResNet50_vd_model --port 9
696
#cpu预测服务
```
```
python -m paddle_serving_server_gpu.serve --model ResNet50_vd_model --port 9
393
--gpu_ids 0 #gpu预测服务
python -m paddle_serving_server_gpu.serve --model ResNet50_vd_model --port 9
696
--gpu_ids 0 #gpu预测服务
```
client端进行预测
```
python image_rpc_client.py ResNet50_vd_client_config/serving_client_conf.prototxt
```
*server端示例中服务端口为9
393端口,client端示例中数据来自./data文件夹,server端地址为本地9393端口,可根据实际情况更改脚本。*
*
server端示例中服务端口为9
696端口
python/examples/imagenet/image_http_client.py
已删除
100644 → 0
浏览文件 @
01666953
# 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
requests
import
base64
import
json
import
time
import
os
import
sys
py_version
=
sys
.
version_info
[
0
]
def
predict
(
image_path
,
server
):
if
py_version
==
2
:
image
=
base64
.
b64encode
(
open
(
image_path
).
read
())
else
:
image
=
base64
.
b64encode
(
open
(
image_path
,
"rb"
).
read
()).
decode
(
"utf-8"
)
req
=
json
.
dumps
({
"feed"
:
[{
"image"
:
image
}],
"fetch"
:
[
"score"
]})
r
=
requests
.
post
(
server
,
data
=
req
,
headers
=
{
"Content-Type"
:
"application/json"
})
try
:
print
(
r
.
json
()[
"result"
][
"score"
])
except
ValueError
:
print
(
r
.
text
)
return
r
if
__name__
==
"__main__"
:
server
=
"http://127.0.0.1:9393/image/prediction"
image_list
=
os
.
listdir
(
"./image_data/n01440764/"
)
start
=
time
.
time
()
for
img
in
image_list
:
image_file
=
"./image_data/n01440764/"
+
img
res
=
predict
(
image_file
,
server
)
end
=
time
.
time
()
print
(
end
-
start
)
python/examples/imagenet/image_rpc_client.py
浏览文件 @
835186b8
...
...
@@ -14,23 +14,35 @@
import
sys
from
paddle_serving_client
import
Client
from
paddle_serving_app.reader
import
Sequential
,
File2Image
,
Resize
,
CenterCrop
,
RGB2BGR
,
Transpose
,
Div
,
Normalize
from
paddle_serving_app.reader
import
Sequential
,
URL2Image
,
Resize
from
paddle_serving_app.reader
import
CenterCrop
,
RGB2BGR
,
Transpose
,
Div
,
Normalize
import
time
client
=
Client
()
client
.
load_client_config
(
sys
.
argv
[
1
])
client
.
connect
([
"127.0.0.1:9393"
])
client
.
connect
([
"127.0.0.1:9696"
])
label_dict
=
{}
label_idx
=
0
with
open
(
"imagenet.label"
)
as
fin
:
for
line
in
fin
:
label_dict
[
label_idx
]
=
line
.
strip
()
label_idx
+=
1
seq
=
Sequential
([
File
2Image
(),
Resize
(
256
),
CenterCrop
(
224
),
RGB2BGR
(),
Transpose
((
2
,
0
,
1
)),
Div
(
255
),
Normalize
([
0.485
,
0.456
,
0.406
],
[
0.229
,
0.224
,
0.225
])
URL
2Image
(),
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
)
])
print
(
seq
)
start
=
time
.
time
()
image_file
=
"daisy.jpg"
for
i
in
range
(
10
00
):
image_file
=
"
https://paddle-serving.bj.bcebos.com/imagenet-example/
daisy.jpg"
for
i
in
range
(
10
):
img
=
seq
(
image_file
)
fetch_map
=
client
.
predict
(
feed
=
{
"image"
:
img
},
fetch
=
[
"score"
])
prob
=
max
(
fetch_map
[
"score"
][
0
])
label
=
label_dict
[
fetch_map
[
"score"
][
0
].
tolist
().
index
(
prob
)].
strip
(
).
replace
(
","
,
""
)
print
(
"prediction: {}, probability: {}"
.
format
(
label
,
prob
))
end
=
time
.
time
()
print
(
end
-
start
)
python/examples/imagenet/imagenet.label
0 → 100644
浏览文件 @
835186b8
此差异已折叠。
点击以展开。
python/examples/imagenet/resnet50_web_service.py
0 → 100644
浏览文件 @
835186b8
# 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_client
import
Client
from
paddle_serving_app.reader
import
Sequential
,
URL2Image
,
Resize
,
CenterCrop
,
RGB2BGR
,
Transpose
,
Div
,
Normalize
if
len
(
sys
.
argv
)
!=
4
:
print
(
"python resnet50_web_service.py model device port"
)
sys
.
exit
(
-
1
)
device
=
sys
.
argv
[
2
]
if
device
==
"cpu"
:
from
paddle_serving_server.web_service
import
WebService
else
:
from
paddle_serving_server_gpu.web_service
import
WebService
class
ImageService
(
WebService
):
def
init_imagenet_setting
(
self
):
self
.
seq
=
Sequential
([
URL2Image
(),
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
)
])
self
.
label_dict
=
{}
label_idx
=
0
with
open
(
"imagenet.label"
)
as
fin
:
for
line
in
fin
:
self
.
label_dict
[
label_idx
]
=
line
.
strip
()
label_idx
+=
1
def
preprocess
(
self
,
feed
=
[],
fetch
=
[]):
feed_batch
=
[]
for
ins
in
feed
:
if
"image"
not
in
ins
:
raise
(
"feed data error!"
)
img
=
self
.
seq
(
ins
[
"image"
])
feed_batch
.
append
({
"image"
:
img
})
return
feed_batch
,
fetch
def
postprocess
(
self
,
feed
=
[],
fetch
=
[],
fetch_map
=
{}):
score_list
=
fetch_map
[
"score"
]
result
=
{
"label"
:
[],
"prob"
:
[]}
for
score
in
score_list
:
max_score
=
max
(
score
)
result
[
"label"
].
append
(
self
.
label_dict
[
score
.
index
(
max_score
)]
.
strip
().
replace
(
","
,
""
))
result
[
"prob"
].
append
(
max_score
)
return
result
image_service
=
ImageService
(
name
=
"image"
)
image_service
.
load_model_config
(
sys
.
argv
[
1
])
image_service
.
init_imagenet_setting
()
if
device
==
"gpu"
:
image_service
.
set_gpus
(
"0,1"
)
image_service
.
prepare_server
(
workdir
=
"workdir"
,
port
=
int
(
sys
.
argv
[
3
]),
device
=
device
)
image_service
.
run_server
()
image_service
.
run_flask
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录