深度学习目标检测-交通标志检测web界面

2023-10-26

深度学习目标检测-交通标志检测web界面

今天我们一起学习利用flask框架将深度学习检测封装为一个界面系统。该界面是基于之前写的一篇文章的训练模型进行检测:
自动驾驶目标检测项目实战(二)—基于Faster-RCNN的交通标志检测

效果

首先看看效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
有识别历史记录。

算法流程

参考这些大佬的代码进行训练:
https://github.com/arindam93/Traffic-Sign-Detection-Faster-RCNN

使用Faster-RCNN进行训练,这是一个二分类的问题,也就是检测是否存在交通标志,而未进行分类。

训练完之后,可以得到pickle文件和hdf5文件:
在这里插入图片描述
这里选用fcnet,也可选择vgg进行训练。

网页设计

使用Flask框架进行网页的搭建。主要代码如下:

# -*- coding: utf-8 -*-
import os
import uuid
import cv2
from flask import (
    Blueprint, flash, g, redirect, render_template, request, url_for
)
from flask import send_from_directory
from flask_img.db import get_db
import shutil
from test_frcnn import detect_sign # 加载文件函数
import cv2 as cv

table = []  # 识别历史表格
hot = 0 # 编号

bp = Blueprint('main', __name__)

ALLOWED_EXTENSIONS = {'png', 'jpg', 'bmp'}
IMAGE_FOLDER = os.path.join(bp.root_path, '..', 'images')
TMP_FOLDER = os.path.join(bp.root_path, '..', 'tmps')
CARD_COLOR = {
    "blue": "蓝色",
    "yello": "黄色",
    "green": "绿色"
}

try:
    shutil.rmtree(IMAGE_FOLDER)
    os.makedirs(IMAGE_FOLDER)
except OSError:
    pass

try:
    shutil.rmtree(TMP_FOLDER)
    os.makedirs(TMP_FOLDER)
except OSError:
    pass


def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@bp.route('/', methods=('GET', 'POST'))
def index():
    if request.method == 'POST':
        if 'defect_image' not in request.files:
            flash('请选择识别文件')
            return redirect(request.url)
        image = request.files['defect_image']
        image_path = ""
        if image.filename == '':
            flash('请选择识别文件')
            return redirect(request.url)
        if not image or not allowed_file(image.filename):
            flash('文件不存在或后缀不合法')
            return redirect(request.url)
        # 原来的文件名写法
        # image_uuid = uuid.uuid4().hex
        # filename = ''.join([image_uuid, '.', image.filename.rsplit('.', 1)[1]])
        # 现在的文件名写法
        filename = image.filename
        image.save(os.path.join(IMAGE_FOLDER, filename))
        result = {}
        try:
            db = get_db()
            result = defect_pic(filename, image_path)
            db.execute(
                'INSERT INTO img_info (img_color_contours, img_only_color, barcode_info)'
                ' VALUES (?, ?, ?)',
                (
                    result.get('img_color_contours', ''),
                    result.get('img_only_color', ''),
                    ' '.join(result['text']) if result.get('text') else ''
                )
            )
            db.commit()
            result.update({
                'result': '检测成功'
            })
        except Exception as e:
            flash(e)
            result.update({
                'result': '检测失败'
            })
        return render_template('index.html', result=result)
    return render_template('index.html')

@bp.route('/image/<filename>')
def show_img(filename):
    return send_from_directory(IMAGE_FOLDER, filename)


@bp.route('/tmp/<filename>')
def show_tmp_img(filename):
    return send_from_directory(TMP_FOLDER, filename)


def defect_pic(filename, image_path):
    pic_path = os.path.join(IMAGE_FOLDER, filename)
    res, defect_img = detect_sign(pic_path, filename, "绝对路径")
    has_defect = '否'  # 初始化
    if res > 0:
        has_defect = '是'

    cv2.imwrite(TMP_FOLDER + "/" + "defect_" + filename, defect_img)

    global hot # 设为全局变量
    img_his = cv.imread(pic_path)
    x, y = img_his.shape[0:2]
    cv2.imwrite(IMAGE_FOLDER + "/" + "hot_" + filename, cv.resize(img_his, (int(y / 2), int(x / 2))))

    table.append([hot, '/image/' + "hot_" + filename, has_defect, res])
    hot += 1  # 编号加1

    return {
        'defect': True,
        'img_color_contours': '原始图像',
        'img_color_contours_path': '/image/'+filename,
        'img_only_color': '检测图像',
        'img_only_color_path': '/tmp/'+ "defect_" + filename,
        'has_defect': has_defect,
        'is_defect': res,
        'table': table,
    }

注意

1.该界面适合所有检测目标,只需要更改界面的后台检测算法即可。
2.目前算法可以同时支持检测分类,具体可以看:
深度学习目标检测ui界面-交通标志检测识别

需要代码的请私信我

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习目标检测-交通标志检测web界面 的相关文章

  • 在Linux中的端口80上运行flask[重复]

    这个问题在这里已经有答案了 也许以前有过这个问题的答案 所以请重定向我 如果是这样的话 我正在考虑在端口 80 上运行 Flask 所以我检查了是否有任何东西正在使用端口 80 因为事实证明端口 80 没有运行 所以当我输入以下内容时 if
  • 显示模板中存储为二进制 blob 的图像

    我有一个模型 其中图像存储为二进制 blob 我想在模板中显示该图像以及有关该对象的其他数据 由于图像不是一个单独的文件 我不知道如何显示它 我尝试过设置标题 或使用send file or render template 但我要么没有得到
  • Flask 的“app.logger”的 Pylint 误报:E1101:方法“logger”没有“debug”成员(无成员)

    使用烧瓶的app logger成员函数 例如app logger error 原因pylint报告E1101 no member 错误 即使这些成员app logger是在运行时定义的 这可以通过使用以下文件来重现 app py impor
  • 如何在与应用程序初始化文件不同的文件中迭代 api 路由

    我有一个 apiroutes py 文件 其中定义了许多路由 例如 api route api read methods GET api route api write methods POST 其中 api 是导入 from import
  • wtforms 自定义验证器可以使字段可选吗?

    如果选中复选框 我正在使用自定义验证器来检查字段不为空 它检查正确 但无论如何它总是仍然验证该值是否是数字 基本上我需要一个字段来在表单的某些条件下停止验证 有没有办法让自定义验证器停止现场验证 是的 自定义验证器可以像内置的可选和必需验证
  • Flask 装饰器怎么能有参数呢?

    我以与这里相同的方式实现了一个装饰器如何在 Flask 中使用参数创建 python 装饰器函数 用于授权 https stackoverflow com questions 13896650 how to make a python de
  • 如何在不使用请求上下文的情况下在烧瓶中渲染模板

    因此 我正在为这个项目开发一个 Flask 应用程序 我需要它在定时变量循环中运行 以检查某些变量的状态 然后给出相应的输出 然而 我遇到的问题是我需要在循环重新启动之前在 Flask 中渲染模板 在变更日志中http flask poco
  • Flask 和其他 Python 框架中的多个 URL 段

    我正在 Bottle 和 Flask 中构建一个应用程序 看看我更喜欢哪一个 因为 Django 的 包含电池 太多了 我已经阅读了两者的路由文档 它非常清晰易懂 但我正在努力寻找一种处理未知的 可能无限数量的 URL 段的方法 IE ht
  • 使用 Flask SQLAlchemy 进行表(模型)继承

    我遵循了这个建议question https stackoverflow com questions 1337095 sqlalchemy inheritance但我仍然收到此错误 sqlalchemy exc NoForeignKeysE
  • WTforms 表单未提交但不输出验证错误

    我正在尝试使用以下方式上传文件flask uploads工作和遇到一些障碍 我会告诉你我的flask查看函数 html 希望有人能指出我缺少的内容 基本上发生的情况是我提交了表格但失败了if request method POST and
  • 导入 nltk 时 Flask WSGI 应用程序挂起

    我按照说明进行操作here https beagle whoi edu redmine projects ibt wiki Deploying Flask Apps with Apache and Mod WSGI在 ubuntu 上使用
  • 从 sqlalchemy 获取第一行

    我有以下查询 profiles session query profile name filter and profile email email profile password password hash 如何检查是否存在一行以及如何返
  • Flask 消息闪烁错误 -flask.debughelpers.FormDataRoutingRedirect

    当我运行我的烧瓶代码时 当前出现以下错误 Flask debughelpers FormDataRoutingRedirect FormDataRoutingRedirect 请求已发送到此 URL http localhost 5000
  • 包含文件中的块未被扩展模板填充

    我有一个如下所示的模板 include base top html with context include base nav html with context div Stuff block content endblock div i
  • Flask、Windows、IIS、Plotly-Dash。读取 WSGI 处理程序时发生错误

    我希望您能帮助我解决我在尝试在 Windows 服务器上部署plotly dash 时使用 Flask 遇到的错误 我已使用以下指南逐字设置 Flask 但我的网站在 wwwroot 文件夹中的位置除外 IIS 上的 Flask http
  • time.sleep、Flask 和 I/O 等待

    使用时time sleep Flask 请求会被阻止吗 我的 Flask 端点之一启动了一个长处理子任务 在某些情况下 可以等待任务完成并在同一请求中返回结果 而不是异步执行工作 在这种情况下 我的 Flask 应用程序启动该过程 然后等待
  • 生产环境的 Flask-Login 与 Flask-Security

    我正在构建一个功能 供用户注册 登录 验证和授权自己 特别是使用 Python Flask 作为后端 我找到了一些解决方案 例如flask login and flask security 据我了解 flask login实际上并没有进行任
  • 使用主宰器将实时数据发送给客户端

    我尝试使用 Flask 的主宰框架 以便按照 Flask 代码片段将实时信息发送到客户端浏览器http flask pocoo org snippets 80 http flask pocoo org snippets 80 当我尝试为我的
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt

随机推荐

  • openstack-keystone入门

    作用 身份验证 令牌发放和校验 服务列表 用户权限定义 不适合新手看 想到哪儿写到哪儿 写一些关于自己在看书学习的过程中对一些知识的理解 Service决定每个Role能干什么事情 而每个User可以给他分配多个Role 进而具备了多服务的
  • 【yolo】yolo的txt标签转VOC格式的xml标签

    脚本介绍 1 可以为原图提供自动标注的功能 例如 需要标注10000 的数据 可以人工标注1000 然后训练yolo模型 再用detect py用模型对剩下来的原图进行推理 推理中保存txt格式的推理结果 然后可以采用本代码 对剩下来的原图
  • 【Linux】基本指令(三)

    目录 一 head指令 二 tail指令 三 date指令 3 1显示时间 3 2时间戳 四 cal指令 五 find指令 六 grep指令 七 zip unzip指令 一 head指令 head英文意思是头部 顾名思义 head就是显示文
  • 刷脸支付重磅来袭是业界的口碑代表

    近两年来 刷脸支付发展如火如荼 宁波 长沙等多个城市相继开展线下刷脸支付试点 建设银在其网点的ATM机推出刷脸取款 光大银也将人脸识别应用于账户登陆 转账 线上融资等场景 支付宝 财付通等第三方支付公司也争相推出刷脸支付设备 随着移动支付的
  • [Event] Linux con Japan 2015

    日本每年都举办一次LinuxCon 下面是今年的 Event 及对应的 ppt http events linuxfoundation jp events linuxcon japan 粗粗看了一下 竟然还有这么一个主题 How China
  • C程序设计的抽象思维-递归过程-砝码称重

    问题 在狄更斯时代 商人们用砝码和天平来称量商品的重量 假设你仅仅有几个砝码 就仅仅能精确地称出一定的重量 比如 假定仅仅有两个砝码 各自是1kg和3kg 仅仅用1kg的砝码能够称出1kg重量的商品 仅仅用3kg的砝码能够称出3kg重量的商
  • 关于typescript的数据类型的那一些事~

    以下介绍typeScript的几种数据类型 分别是Boolean number string array object any 1 ts中boolean的使用 var boolean Boolean boolean true console
  • 金蝶客户端显示服务器不是有效的,金蝶 服务器不是有效的 请重新设置

    金蝶 服务器不是有效的 请重新设置 内容精选 换一换 Web服务端证书用于客户端浏览器和Web服务器之间的通讯 实现数据信息在客户端和Web服务器之间的加密传输 可以防止数据信息的泄露 为提高安全性 建议替换成自己的证书 并及时更新证书 保
  • 利用Petalinux定制Linux系统(ZYNQ)

    目录 一 创建vivado硬件平台 二 创建Petalinux工程 三 配置Linux内核 四 设置根文件系统 五 配置设备树文件 六 编译petalinux工程 七 制作SD卡启动文件 八 开发板启动设置 九 打开串口上位机 进入 Lin
  • 分布式缓存Redis之Java客户端

    写在前面 本学习教程所有示例代码见GitHub https github com selfconzrr Redis Learning 目前Redis的Java客户端主要有两种 Jedis Redission 个人感觉Jedis用的广泛一些
  • 数据分析--Numpy--去重与重复

    1 unique函数 通过unique函数可以找出数组中的唯一值并返回已经排序的结果 arr np array 1 1 1 2 2 3 3 res np unique arr print res 1 2 3 2 tile函数 np tile
  • web基础之自动处理表单填装javabean

    http hi baidu com smilelive blog item e31b8f50ea1ef212367abe77 html web开发中 肯定会设计到表单的提交 而表单一般都设计到一个表 表又对应一个javabea 一般我们都在
  • java-jsp篮球联赛管理系统c1246[独有源码]如何找到适合自己的毕业设计的指南

    本项目包含程序 源码 数据库 LW 调试部署环境 文末可获取一份本项目的java源码和数据库参考 系统的选题背景和意义 选题背景 篮球联赛管理系统是为了更好地组织和管理篮球联赛而开发的一种信息化管理系统 随着篮球运动的普及和发展 越来越多的
  • Java编程实现控制台输出网址中所有的参数名及参数值

    项目 Java编程实现控制台输出网址中所有的参数名及参数值 时间 2019 8 14 作者 郑翰林 public class Math1 public static void main String args String baidu ht
  • 机制检验、异质性检验、调节效应

    目录 基准回归 稳健性检验 内生性处理 机制检验 机制分析模型 调整要素配置结构 机制分析模型 生产率提升效应 异质性检验 1 企业规模 2 企业注册地 调节效应 假设3后半部分 1 人力资本 2 市场化环境 本文是对王林辉老师的论文 工业
  • 使用cdn来加速字体文件在前端的加载速度,并监听字体是否加载完成

    最近在个人网站butterpig中实现了个性印章的在线设计功能 里面目前一共实现了有八九种个性印章的样式 并且还有六七种网络开源商用的字体类型 具体效果可以访问 个性印章在线设计查看 印章的设计 其实原理非常简单 主要就是通过canvas画
  • Spring Boot读取properties配置文件中的数据

    Spring Boot 专栏 https blog csdn net dkbnull category 9278145 html Spring Cloud 专栏 https blog csdn net dkbnull category 92
  • redis安装成功,外部无法访问问题?

    1 redis安装成功 外部无法访问问题 原因 redis所在端口的监听地址为127 0 0 1 导致外部网络无法连接 解决方法 修改redis conf 配置文件 bind 127 0 0 1 为 bind 101 200 166 125
  • MySQL使用存储过程批量生成数据

    假设我们有如下表 drop table if exists t user create table t user user id varchar 32 not null comment 用户id primary key user no va
  • 深度学习目标检测-交通标志检测web界面

    深度学习目标检测 交通标志检测web界面 今天我们一起学习利用flask框架将深度学习检测封装为一个界面系统 该界面是基于之前写的一篇文章的训练模型进行检测 自动驾驶目标检测项目实战 二 基于Faster RCNN的交通标志检测 效果 首先