目标检测应用化之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

效果图

效果图

posted @   康行天下  阅读(6364)  评论(2编辑  收藏  举报
编辑推荐:
· 为什么构造函数需要尽可能的简单
· 探秘 MySQL 索引底层原理,解锁数据库优化的关键密码(下)
· 大模型 Token 究竟是啥:图解大模型Token
· 35岁程序员的中年求职记:四次碰壁后的深度反思
· 继承的思维:从思维模式到架构设计的深度解析
阅读排行:
· 【保姆级教程】windows 安装 docker 全流程
· 基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
· 由 MCP 官方推出的 C# SDK,使 .NET 应用程序、服务和库能够快速实现与 MCP 客户端
· 电商平台中订单未支付过期如何实现自动关单?
· X86-64位简易系统开发 - 从BIOS阶段开始
点击右上角即可分享
微信分享提示