当前位置: 首页 > news >正文

Python交通标志识别基于卷积神经网络的保姆级教程(Tensorflow)

项目介绍

TensorFlow2.X 搭建卷积神经网络(CNN),实现交通标志识别。搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠,然后经过全连接层,最后用softmax映射为每个类别的概率,概率最大的即为识别结果)。

其他项目

水果蔬菜识别:基于卷积神经网络的水果识别项目

项目展示

视频展示地址:交通标志识别视频展示
1.PYQT5界面:基于PYQT5的GUI界面实现交互,可以上传一张交通标志图像,点击识别结果。

在这里插入图片描述

2.Flask网页前端界面:基于Flask生产一个网页界面实现交互,可以上传一张交通标志图像,点击预测模型会输出每一个类别的置信度,并按照从大到小的降序排列展示在网页上,展示在最上面的类别即为最终模型的识别结果。

在这里插入图片描述

网络结构:
在这里插入图片描述

开发环境:

  • python==3.7
  • tensorflow==2.3

数据集(GTSRB):

德国交通标志基准测试是在2011年国际神经网络联合会议(IJCNN)上举行的多类单图像分类挑战赛。我们诚挚地邀请来自相关领域的研究人员参加:比赛旨在允许没有特殊领域知识的参与。我们的基准测试具有以下特性:

主要用于单图像、多类分类问题。43个class,其中训练集39209个样本,测试集12630个样总计超过 50,000 张图片大型、逼真的数据库。

在这里插入图片描述
在这里插入图片描述
每个训练集和测试集中每个文件夹中存放数据类别如下图所示:
在这里插入图片描述

代码调试

在这里插入图片描述

在这里插入图片描述
拿到项目后,解压文件,解压后如下图所示:
在这里插入图片描述

Step1:打开项目文件夹

在这里插入图片描述

各个文件及代码介绍:
在这里插入图片描述

Step2:搭建开发环境

在这里插入图片描述

创建虚拟环境

输入cmd回车后,会打开一个命令终端,下面我们开始创建虚拟环境:
在这里插入图片描述
输入命令为:

conda create -n tf23_py37 python=3.7

输入命令回车后,出现下面提示,继续回车:
在这里插入图片描述

然后回车后,我们就创建了一个环境名称为“tf23_py37”的虚拟环境,它的python版本为3.7,如下图所示:

在这里插入图片描述

激活虚拟环境

复制这条命令,输入命令行,激活我们创建的虚拟环境:

conda activate tf23_py37

在这里插入图片描述

安装第三方依赖库

下面开始安装项目用到的第三方依赖库,比如tensorflow、matplotlib、pyqt5等。本次用到的依赖库全部记录在了requirements.txt文件中。下面开始安装:

在命令终端中输入以下命令。

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

注意:上面这条安装第三方依赖库的命令 “-i” 后面接的是国内的镜像源地址。如果安装失败提示我们指定的镜像源中没有对应的第三方库依赖的版本,可以考虑选择其他的镜像源。
国内常用镜像源地址

清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:https://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
华中理工大学:http://pypi.hustunique.com/
山东理工大学:http://pypi.sdutlinux.org/
豆瓣:http://pypi.douban.com/simple/

安装成功后,如下如所示:

在这里插入图片描述

打开项目配置环境

在这里插入图片描述
如果出现下面提示:
在这里插入图片描述

如果出现下面提示:

在这里插入图片描述

选择解释器(我们上面创建的虚拟环境)

打开朋友charm后,在pycharm的右下角点击解释器选择,选择”Add Interpreter“选择添加解释器。

在这里插入图片描述

在这里插入图片描述

按照图片的提示操作即可,添加我们需要的“python解释器”,pycharm右下角显示如下图所示即为成功:

在这里插入图片描述

训练神经网络模型

打开项目“train_cnn.py”这个代码,根据图片中提示操作:

在这里插入图片描述
成功运行效果如下图所示:

在这里插入图片描述
成功运行后,接下来要做的事情就是“等待”,根据每个人电脑配置的高低,运行训练网络的代码时间也是不同的(几分钟–几个小时)等待运行完毕,不报错即为训练成功。

在训练成功后,在models文件夹中会生成"cnn_fv.h5"文件。

在这里插入图片描述
在训练成功后,在result文件夹中,可以看到“results_cnn.png”图片,记录了训练过程中准确率和loss的变化情况。
在这里插入图片描述
同样按着运行”train_cnn.py”的逻辑步骤去运行”train_mobilenet.py“,就会训练mobilenet神经网络。运行的结果可以和CNN形成一组对照。更有利于我们写文章哦!

测试

在训练模型完毕后,我们开始测试模型(评估模型的性能),打开“test_model.py”

在这里插入图片描述
按照图片提示操作。

运行成功后会在results文件夹下生成“heatmap_cnn.png”热力图(可以看到每个类别预测准确率的情况),如下所示:
因为类别较多所以显示的效果不是很好看(-_-)。
在这里插入图片描述

预测

PYQT5的GUI界面

在经过训练和测试之后,我们得到了一个可以用来做交通标志识别的神经网络权重,下面开始预测需要识别的交通标志图片。打开"windows.py"这个代码,直接点击运行,结果如下所示:

在这里插入图片描述

运行成功后得到一个pyqt5的GUI界面,然后我们就可以通过这个GUI操作去预测我们项目预测的水果图片啦!

Flask网页端展示

打开"app.py"这个代码,直接点击运行,结果如下所示:

在这里插入图片描述
点击控制台输出的链接,或者自己打开浏览器输入http://127.0.0.1:5000这个网址。即可跳转到flask前端页面,然后自行做交互,上传图片,点击预测,模型会输出每一个类别的置信度,并按照从大到小的降序排列展示在网页上,展示在最上面的类别即为最终模型的识别结果

在这里插入图片描述

相关文章:

Python交通标志识别基于卷积神经网络的保姆级教程(Tensorflow)

项目介绍 TensorFlow2.X 搭建卷积神经网络(CNN),实现交通标志识别。搭建的卷积神经网络是类似VGG的结构(卷积层与池化层反复堆叠,然后经过全连接层,最后用softmax映射为每个类别的概率,概率最大的即为识别…...

基于Selenium+Python的web自动化测试框架(附框架源码+项目实战)

目录 一、什么是Selenium? 二、自动化测试框架 三、自动化框架的设计和实现 四、需要改进的模块 五、总结 总结感谢每一个认真阅读我文章的人!!! 重点:配套学习资料和视频教学 一、什么是Selenium? …...

Python进阶-----高阶函数zip() 函数

目录 前言: zip() 函数简介 运作过程: 应用实例 1.有序序列结合 2.无序序列结合 3.长度不统一的情况 前言: 家人们,看到标题应该都不陌生了吧,我们都知道压缩包文件的后缀就是zip的,当然还有r…...

win10打印机拒绝访问解决方法

一直以来,在安装使用共享打印机打印一些文件的时候,会遇到错误提示:“无法访问.你可能没有权限使用网络资源。请与这台服务器的管理员联系”的问题,那为什么共享打印机拒绝访问呢?别着急,下面为大家带来相关的解决方法…...

深度学习训练营之数据增强

深度学习训练营学习内容原文链接环境介绍前置工作设置GPU加载数据创建测试集数据类型查看以及数据归一化数据增强操作使用嵌入model的方法进行数据增强模型训练结果可视化自定义数据增强查看数据增强后的图片学习内容 在深度学习当中,由于准备数据集本身是一件十分复杂的过程,…...

Tomcat安装及启动

日升时奋斗,日落时自省 目录 1、Tomcat下载 2、JDK安装及配置环境 3、Tomcat配置环境 4、启动Tomcat 5、部署演示 1、Tomcat下载 直接入主题,下载Tomcat 首先就是别下错了,直接找官方如何看是不是广告,或者造假 搜索Tomc…...

【专项训练】排序算法

排序算法 非比较类的排序,基本上就是放在一个数组里面,统计每个数出现的次序 最重要的排序是比较类排序! O(nlogn)的3个排序,必须要会!即:堆排序、快速排序、归并排序! 快速排序:分治 经典快排 def quickSort1(arr...

Android压测测试事件行为参数对照表

执行参数参数说明颗粒度指标基础参数--throttle <ms> 用于指定用户操作间的时延。 -s 随机数种子&#xff0c;用于指定伪随机数生成器的seed值&#xff0c;如果seed值相同&#xff0c;则产生的时间序列也相同。多用于重测、复现问题。 -v 指定输出日志的级别&#xff0c;…...

【观察】亚信科技:“飞轮效应”背后的数智化创新“延长线”

著名管理学家吉姆柯林斯在《从优秀到卓越》一书中提出“飞轮效应”&#xff0c;它指的是为了使静止的飞轮转动起来&#xff0c;一开始必须使很大的力气&#xff0c;每转一圈都很费力&#xff0c;但达到某一临界点后&#xff0c;飞轮的重力和冲力就会成为推动力的一部分&#xf…...

QT编程从入门到精通之十四:“第五章:Qt GUI应用程序设计”之“5.1 UI文件设计与运行机制”之“5.1.1 项目文件组成”

目录 第五章:Qt GUI应用程序设计 5.1 UI文件设计与运行机制 5.1.1 项目文件组成 第五章:Qt GUI应用程序设计...

(二分)730. 机器人跳跃问题

目录 题目链接 一些话 切入点 流程 套路 ac代码 题目链接 AcWing 730. 机器人跳跃问题 - AcWing 一些话 // 向上取整 mid的表示要写成l r 1 >> 1即可&#xff0c;向下取整 mid l r >> 1 // 这里我用了浮点二分&#xff0c;mid (l r) / 2&#xff0c;最…...

vue3使用nextTick

发现nextTick必须放在修改一个响应式数据之后&#xff0c;才会在onUpdated之后被调用&#xff0c;如果nextTick是放在所有对响应式数据修改之前&#xff0c;则nextTick里面的回调函数会在onBeforeUpdate方法执行前就被调用了。可是nextTick必须等到onUpdated执行完成之后执行&a…...

传统图像处理之颜色特征

博主简介 博主是一名大二学生&#xff0c;主攻人工智能研究。感谢让我们在CSDN相遇&#xff0c;博主致力于在这里分享关于人工智能&#xff0c;c&#xff0c;Python&#xff0c;爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主&#xff0c;博主会继续更新的&#xff0c…...

GPS问题调试—MobileLog中有关GPS关键LOG的释义

GPS问题调试—MobileLog中有关GPS关键LOG的释义 [DESCRIPTION] 在mobile log中,有很多GPS相关的log出现在main log和kernel log、properties文件中,他们的意思是什么,通过这篇文档进行总结,以便在处理GPS 问题时,能够根据这些log快速的收敛问题。 [SOLUTION] 特别先提醒…...

【企业管理】你真的理解向下管理吗?

导读&#xff1a;拜读陈老师一篇文章《不会向下负责&#xff0c;你凭什么做管理者&#xff1f;》&#xff0c;引发不少共鸣&#xff0c;“很多管理者有一种错误的观念&#xff0c;认为管理是向下管理&#xff0c;向上负责。其实应该反过来&#xff0c;是向上管理&#xff0c;向…...

Centos7 硬盘挂载流程

1、添加硬盘到Linux&#xff0c;添加后重启系统2、查看添加的硬盘&#xff0c;lsblksdb 8:16020G 0disk3、分区fdisk /dev/sdbmnw其余默认&#xff0c;直接回车再次查看分区情况&#xff0c;lsblksdb1 8:17 0 20G 0 part4、格式化mkfs -t ext4 /dev/sdb15、挂载mkdir /home/new…...

认识vite_vue3 初始化项目到打包

从0到1创建vite_vue3的项目背景效果vite介绍&#xff08;对比和vuecli的区别&#xff09;使用npm创建vitevitevuie3创建安装antdesignvite自动按需引入&#xff08;vite亮点&#xff09;请求代理proxy打包背景 vue2在使用过程中对象的响应式不好用新增属性的使用$set才能实现效…...

【Go】cron时间格式

【Go】cron时间格式 Minutes&#xff1a;分钟&#xff0c;取值范围[0-59]&#xff0c;支持特殊字符* / , -&#xff1b;Hours&#xff1a;小时&#xff0c;取值范围[0-23]&#xff0c;支持特殊字符* / , -&#xff1b;Day of month&#xff1a;每月的第几天&#xff0c;取值范…...

leetcode 55. 跳跃游戏

给定一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标。 示例 1&#xff1a; 输入&#xff1a;nums [2,3,1,1,4] 输出&#xff1a;true 解释&#xff1a;可以先跳 1 …...

Linux:文件流指针 与 文件描述符

目录一、文件描述符二、文件流指针三、缓冲区之前讲解过了IO库函数和IO接口&#xff0c;库函数是对系统调用接口的封装&#xff0c;也就是说实际上在库函数内部是通过调用系统调用接口来完成最终功能的。 库函数通过文件流指针操作文件&#xff0c;系统调用接口通过文件描述符操…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...