| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 基于机器视觉的水果检测算法实现 -> 正文阅读 |
|
[人工智能]基于机器视觉的水果检测算法实现 |
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?一、摘要? ? ? ? 这是一款基于卷积神经网络和数字图像处理的智能水果检测和分类系统,由检测,分类两个部分组成。通过互联网下载和使用多媒体处理工具对水果拍摄视频剪辑处理得到大量水果图片,对图片进行标定获得数据集,并将数据集分成训练集和测试集。检测部分使用 Keras搭建的FASTER RCNN目标检测算法进行对不同水果的检测,在10多个小时的网络训练后,得到多个权值文件,选取总错误率最小的权值文件进行预测。其中预测返回了被检测的目标以及圈定目标的框的位置信息,通过框截取输入图片中的目标,并通过苹果的颜色和圆形度以及香蕉表面斑点的多少分别对两种水果进行等级分类。本设计已完成代码的设计、FASTER RCNN模型的训练、多种水果的检测以及对苹果和香蕉的等级分类,使用PyQt5进行界面设计与实现。通过测试,本系统能够检测五种不同的水果,且能够对苹果和香蕉进行三级有效分类。 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二、水果检测算法的实现2.1PASCAL VOC数据集的制作? ? ? ? 本数据集包含苹果、香蕉、火龙果、草莓和橘子在内的五种不同的水果,数据集采用LabelImg进行制作。LabelImg是一个可视化的图像标定工具,许多目标检测网络(如FASTER RCNN,YOLO,SSD)训练时所需要的数据集,均需要借助这个工具进行图像中目标的标定。生成的XML文件时遵循PASCAL VOC格式。打开LabelImg,进行对训练集中图片的标定。所谓标定,就是选取大小合适的框,将图片中需要检测的物体进行框起来,并标注上框内目标的类别名称。标定过程如图所示: ? ? ? ? ? ? ? ?? ? ? ? ?标定结束后,就会生成对应图片的XML文件。XML文件不仅包含该图片的基本信息,比如文件路径,图片的大小以及是否时彩色图片等等。其中文件中的前景包含了每一个目标的名字以及所处的位置,位置信息由左上角坐标和右下角坐标进行区分。某个标定结束的XML文件内容如图所示: ? ? ? ? ? ? ? ? ? ? ? ?? 2.2 FASTER?RCNN模型的实现与训练2.2.1 检测系统设计与软件开发平台搭建? ? ? ?本系统主要包含检测和分类两个部分。其中,检测过程包括水果图片的获取与Pascal VOC格式训练集的制作,FASTER RCNN目标检测网络的搭建,网络的预测过程。其中网络的预测部分可以通过调用摄像头进行验证,或者输入带有目标的图片进行预测。检测系统整体架构如图所示: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?系统使用的编程语言为Python,作为一种计算机编程语言,近年来,随着人工智能相关研究的不断发展,成为最近几年比较热门的语言。Python语言简单易学,且包含许多的开发库,比如Matplotlib,Numpy,OpenCv等库。如今Python版本的迭代较快,最近一版为3.9.5。最新版本拥有的功能更加强大,但由于刚出不久,开发资料少,相关函数库的改动仍需一段时间的磨合,故我们选取稳定的Python3.6版本。本文中所涉及的实验均在Windows10操作系统,Intel i5 7th处理器,GTX1050的显卡下完成的。 ? ? ? 作为谷歌发布的一个端到端开源机器学习平台,一经发布就受到广大开发者的热爱。继TensorFlow1.0版本发布后, 2.0版本将更多的精力放在了简洁性和易用性上面,相较于1.0版本API复杂难懂,2.0版本的入门学习难度降低很多。尽管如此,2.0版本的难度依然很高。由于我们用到了contrib模块,而2.0版本已经去掉,且1.0版本网络资源较多,这可以为我们解决开发中的问题提供很大的帮助。Keras库为研究机器学习算法的强大实验工具,能够创建复杂的拓扑,包括使用残差层、自定义多输入/输出模型以及强制编写的正向传递。并可与更高级别的抽象一起工作,以实现完全可定制的逻辑。同时,TensorFlow每个版本都会有速度更快的Gpu版本和普通的Cpu版本,前者对显卡等电脑硬件的要求较高,为提高运行的速度,我们安装Gpu版本的TensorFlow。Gpu版本会用到Cuda10.0和Cudnn7.4.1.5,因此在使用之前需要安装Cuda。系统的开发环境如图所示:?? ? ? ? ?
|
目前只有 HOUGH_GRADIENT,通过梯度来寻找 | |
dp = 1:在原图上寻找;dp = 2, 原图宽高减半 | |
如果两个圆的圆心距离小于 mindist 则认为是同一个圆 | |
Canny 检测时的 高阈值,低阈值是 param1 的一半 | |
? ? ? ?在参数调节结束后,便可以在原图上根据霍夫圆变换获得的圆的三个参数进行标注。我们灰度增强的效果是要将香蕉体表上的斑点视为前景,背景以及蕉身视为背景。效果如图所示:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ??由于香蕉体表的斑点比较小,且相邻两个圆的距离也较小,因此设置的待检测圆的半径范围也比较小。图4.7左侧图中,香蕉表面虽然有斑点,但是不影响食用,检测到的斑点也较少。下图右侧的香蕉质量明显很差,用霍夫圆变换得到的表面的圆也比较多,也即斑点的个数比较多。
? ? ? ? ? ? ? ? ??
? ? ? ?霍夫圆变换可以检测到图片中圆的半径和圆心坐标,每个圆也就代表了香蕉表面的斑点。根据返回的参数便可统计斑点的个数,进而相应的判断香蕉的分类结果。
? ? ? ? 如前面所述,界面的设计采用Qt设计师这个软件进行设计,我们使用的控件有按钮,文本框以及对话框。整个GUI界面的背景是选取一个图片,然后设置一个跟其他组件没有继承关系的ListView,然后铺开作为背景,这样不会遮挡其他组件。文本框显示我们打开的图片和处理的图片在整个界面上面的位置。我们使用按钮进行设计所要完成的功能,我们的功能有四个,分别是打开图片,检测目标,水果的分类和退出。打开图片并能够在图片显示控件上显示出来,其中两个图片显示控件的大小都是100*100,因此界面中显示的图片是进行压缩后的。检测后点击检测,便可以得到被检测图片。当点击分类时,首先进行对检测结果的截取,使用分类算法得到其品级。退出按钮即结束所有的工作,退出界面,退出程序的执行。设计的界面如下图所示:?
? ? ? ? ? ? ? ? ? ? ??
? ? ? ?界面设计好后通过指令将界面转化成Python文件,该Python文件是一个类,该类包含了所有的组件信息,比如其名字,位置,以及调用函数。我们再建立一个新的Python文件,并把表示界面的类导入,就可以进行对四个按钮函数内容的编写了。由于我们前面已经把检测和分类的代码实现,故只需稍加改动,便可迁移到我们界面中实现功能和界面的互动。
? ? ? ?在设计结束界面后,编辑按钮的事件函数。将前面所调试成功的实验内容相应的放入事件函数中,并分别在打开和检测按钮的事件处理函数中加入图片显示的操作。由于处理时所用的图片格式和显示时的格式不统一,便导致显示上有些瑕疵,但并不影响其结果的准确性。下图1是三种水果的检测结果,包括边界框以及置信度信息。下图2是五种水果的检测结果,图下图3,4,5分别显示了香蕉三种品级的分类结果,下图6,7,8分别显示了苹果三种品级的分类结果。? ?
? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
1.? ??ffmpeg视频转图片
2.? ?水果划分等级的标准
3.? ?PyQt5简单教程
4.? ?PyQt5编写简单GUI
5.? ?Qt -- QImage使用总结
6.? ?Qt Designer设置背景图片 ??
7.? ?从RCNN-FASTER RCNN
8.? ?理解卷积神经网络中的特征图(feature map)
9.? ?目标检测综述
12??labelimg标定图片
13??windows下的tensorflow-gpu=1.13.2环境配置
14??windows下的tensorflow-gpu=2.2.0环境配置
15??对比度增强算法
16??opencv 图像增强
17??opencv图像的灰度处理
18???faster rcnn中rpn的anchor,sliding windows,proposals的理解?
20??Faster RCNN算法解析
? ? ? ? ? ? ? ? ? ? ? ? ??
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年4日历 | -2025/4/3 1:58:51- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |