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

2023-11-10 02:20

本文主要是介绍深度学习目标检测-交通标志检测web界面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习目标检测-交通标志检测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 cvtable = []  # 识别历史表格
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:passtry:shutil.rmtree(TMP_FOLDER)os.makedirs(TMP_FOLDER)
except OSError:passdef 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.filenameimage.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  # 编号加1return {'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界面-交通标志检测识别

需要代码的请私信我

这篇关于深度学习目标检测-交通标志检测web界面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379855

相关文章

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java MCP 的鉴权深度解析

《JavaMCP的鉴权深度解析》文章介绍JavaMCP鉴权的实现方式,指出客户端可通过queryString、header或env传递鉴权信息,服务器端支持工具单独鉴权、过滤器集中鉴权及启动时鉴权... 目录一、MCP Client 侧(负责传递,比较简单)(1)常见的 mcpServers json 配置

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

Maven中生命周期深度解析与实战指南

《Maven中生命周期深度解析与实战指南》这篇文章主要为大家详细介绍了Maven生命周期实战指南,包含核心概念、阶段详解、SpringBoot特化场景及企业级实践建议,希望对大家有一定的帮助... 目录一、Maven 生命周期哲学二、default生命周期核心阶段详解(高频使用)三、clean生命周期核心阶

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

深度解析Python yfinance的核心功能和高级用法

《深度解析Pythonyfinance的核心功能和高级用法》yfinance是一个功能强大且易于使用的Python库,用于从YahooFinance获取金融数据,本教程将深入探讨yfinance的核... 目录yfinance 深度解析教程 (python)1. 简介与安装1.1 什么是 yfinance?

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦