README.md 2.2 KB
Newer Older
走神的阿圆's avatar
走神的阿圆 已提交
1
# 部署图像分类服务-以vgg11_imagenent为例
走神的阿圆's avatar
走神的阿圆 已提交
2 3
## 简介
图像分类是指通过模型,预测给定的图片所属类别,vgg11_imagenent就是一种有效的图像分类模型。关于vgg11_imagenent的具体信息请参见[vgg11_imagenent](https://paddlepaddle.org.cn/hubdetail?name=vgg11_imagenet&en_category=ImageClassification)
走神的阿圆's avatar
走神的阿圆 已提交
4

走神的阿圆's avatar
走神的阿圆 已提交
5
使用PaddleHub Serving可以部署一个在线图片分类服务,既可以对用户暴露直接预测接口,也可以利用此接口实现一个web网站,甚至可以集成到移动端应用程序中实现拍照识别功能。
走神的阿圆's avatar
走神的阿圆 已提交
6

走神的阿圆's avatar
走神的阿圆 已提交
7
这里就带领大家使用PaddleHub Serving,通过简单几步部署一个图像分类服务。
走神的阿圆's avatar
走神的阿圆 已提交
8

走神的阿圆's avatar
走神的阿圆 已提交
9 10
##  Step1:启动PaddleHub Serving
启动命令如下:
走神的阿圆's avatar
走神的阿圆 已提交
11 12 13
```shell
$ hub serving start -m vgg11_imagenet  
```
走神的阿圆's avatar
走神的阿圆 已提交
14
启动时会显示加载模型过程,启动成功后显示:
走神的阿圆's avatar
走神的阿圆 已提交
15 16 17 18 19
```shell
Loading vgg11_imagenet successful.
```
这样就完成了一个图像分类服务化API的部署,默认端口号为8866。

走神的阿圆's avatar
走神的阿圆 已提交
20 21
## Step2:测试图像分类在线API
我们用来测试的样例图片为:  
走神的阿圆's avatar
走神的阿圆 已提交
22 23

<p align="center">  
24
<img src="../img/cat.jpg" width="45%" />  
走神的阿圆's avatar
走神的阿圆 已提交
25 26 27
</p>  

<p align="center">  
28
<img src="../img/flower.jpg" width="45%"/>  
走神的阿圆's avatar
走神的阿圆 已提交
29 30
</p>

走神的阿圆's avatar
走神的阿圆 已提交
31
准备的数据格式为:
走神的阿圆's avatar
走神的阿圆 已提交
32 33 34
```python
files = [("image", file_1), ("image", file_2)]
```
走神的阿圆's avatar
走神的阿圆 已提交
35
**NOTE:** 每个元素第一个参数为"image"。
走神的阿圆's avatar
走神的阿圆 已提交
36

走神的阿圆's avatar
走神的阿圆 已提交
37
代码如下:
走神的阿圆's avatar
走神的阿圆 已提交
38 39 40 41
```python
>>> file_list = ["../img/cat.jpg", "../img/flower.jpg"]  
>>> files = [("image", (open(item, "rb"))) for item in file_list]
```
走神的阿圆's avatar
走神的阿圆 已提交
42 43 44

## Step3:获取并验证结果
然后就可以发送请求到图像分类服务API,并得到结果了,代码如下:
走神的阿圆's avatar
走神的阿圆 已提交
45 46 47 48 49
```python
>>> # 指定检测方法为vgg11_imagenet并发送post请求
>>> url = "http://127.0.0.1:8866/predict/image/vgg11_imagenet"
>>> r = requests.post(url=url, files=files)
```
走神的阿圆's avatar
走神的阿圆 已提交
50
vgg11_imagenent返回的结果为图像分类结果及其对应的概率,我们尝试打印接口返回结果:
走神的阿圆's avatar
走神的阿圆 已提交
51 52 53 54 55 56 57 58 59 60 61
```python

>>> print(json.dumps(r.json(), indent=4, ensure_ascii=False))  
{
    "results": "[[{'Egyptian cat': 0.540287435054779}], [{'daisy': 0.9976677298545837}]]"
}
```

这样我们就完成了对图像分类预测服务化部署和测试。

完整的测试代码见[vgg11_imagenent_serving_demo.py](vgg11_imagenet_serving_demo.py)