当前位置: 首页 > 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;系统调用接口通过文件描述符操…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

golang循环变量捕获问题​​

在 Go 语言中&#xff0c;当在循环中启动协程&#xff08;goroutine&#xff09;时&#xff0c;如果在协程闭包中直接引用循环变量&#xff0c;可能会遇到一个常见的陷阱 - ​​循环变量捕获问题​​。让我详细解释一下&#xff1a; 问题背景 看这个代码片段&#xff1a; fo…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...