目标检测应用化之web页面(YOLO、SSD等)

在caffe源码目录下的examples下面有个web_demo演示代码,其使用python搭建了Flask web服务器进行ImageNet图像分类的演示。

首先安装python的依赖库:pip install -r examples/web_demo/requirements.txt

接下来,修改源码,仅三个代码文件:

  • app.py 这是主程序的入口
  • exifutil.py 辅助代码,解决skimage库不能处理exif标志的问题
  • templates/index.html 前端web页面

解决python2中的中文问题:

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

exifutil.py中删除img = np.asarray(im).astype(np.float32) / 255.这句归一化的代码(视情况自行修改)。

网络模型调用

将模型加载和前向传播计算的相关代码写在另外的新增的python代码中。如YOLO和SSD均提供了python使用模型进行测试的代码,稍作修改即可。

结果显示

结果框画框代码:

from PIL import Image, ImageDraw

def draw_rectangle(draw, coordinates, color, width=1, draw_ellipse=False):
    for i in range(width):
        rect_start = (coordinates[0] - i, coordinates[1] - i)
        rect_end = (coordinates[2] + i, coordinates[3] + i)
        if draw_ellipse:
            draw.ellipse((rect_start, rect_end), outline=color)
        else:
            draw.rectangle((rect_start, rect_end), outline=color)

def draw_rectangles(image_pil,det_result):
    # draw rectangles
    draw = ImageDraw.Draw(image_pil)
    for idx, item in enumerate(det_result):
        x, y, w, h = item[2]
        half_w = w / 2
        half_h = h / 2
        box = (int(x - half_w+1), int(y - half_h+1), int(x + half_w+1), int(y + half_h+1))
        draw_rectangle(draw,box,(0, 255, 0),width=2,draw_ellipse=True)
        draw.text((x - half_w + 5, y - half_h + 5), str(idx + 1)+" : "+item[0], fill=(0, 0, 150))
    del draw

得到模型的预测结果之后使用上述画框代码画框后在flask.render_template时将画了结果框的图像显示在HTML页面上。

HTML页面内容适配

在调用如下代码时flask会将参数变量传给页面填充部分。

flask.render_template('index.html', has_result=True, result=results,
    imagesrc=new_img_base64
)

在html页面代码中可以使用{{ result }}的形式来获取这些参数变量的值,并且可以使用if...else, for等语句控制html代码的填充。此步要做的就是修改app.py和html适配的内容一致。

详细代码在此:https://github.com/makefile/objdet_web

效果图

转载于:https://www.cnblogs.com/makefile/p/objdet-web.html

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值