目录
*******************附成品展示视频链接**************************
创作不易,需要完整论文及代码可私信有偿获取
摘要:随着互联网与移动支付的普及,人力成本的提高,无人水果售卖机器的应用场景也就越来越普及。无人水果售卖机可以大大减少人工售卖的成本,也不会出现员工疲惫识别错误的情况。尤其在疫情的大环境下,我们可以大幅减少人群的接触,提高安全性。因此在现代工业中得到越来越广泛的研究与应用。本文根据机器视觉智能化地特点,提出了一种基于图像处理的水果自助售卖系统。该系统首先基于图象处理进行水果种类识别,识别后将水果类型通过AM5708中的无线网卡进行传输,传入到网页中,并通过压力传感器读取数据,以相同地方式传送到网页端口,在网页端显示水果的种类、单价、质量以及总价格,并提供付款码以供客户付款。从而形成一套完整的,可嵌入到移动设备的系统。
关键字:图像处理;识别检测;嵌入式;
第一章 概述
1.1 发展概要
随着中国经济的快速发展,移动支付也越来越普及,从而促使零售业快速发展,但随着中国人口红利的慢慢退去,导致人工成本越来越高,而且售卖员也会受到心情的影响导致顾客的购买体验下降。而且这几年疫情的到处肆虐导致,如果人口集聚也会导致疫情的扩散,通过无接触的售卖方式可以使购买者更加安全。在当前的一些水果店中,传统电子称不具备视觉功能,需要由售货员在传统电子称上选择单价后称重并粘贴条码,不仅效率低下,而且操作过程繁琐,可能长时间工作后,员工出现疲惫导致识别错误等情况的出现,针对这种情况并综合顾客体验,相关的工业产品的数量和种类与日俱增。目前在市面中,自助水果称一般都是应用传统图象,利用颜色识别去实现水果种类的识别去识别水果,该方法容易受到环境的影响,如果出现光照变化会导致识别错误。本文利用颜色、物体的轮廓以及面积的大小去识别水果,通过该算法能较好的克服环境所带来的影响具有安全可靠、检测精度高、不容易受到外界因素的干扰,可在复杂的生产环境中长时间运行等优点,是实现生产自动化和智能化的一种有效方法,有着广泛的应用场景。
1.2 国内外研究现状
为了推动国内外水果识别技术的发展,辅助研究人员及相关从业者更好地 了解水果类别检测技术的发展现状,在水果类别检测相关的技术和应用方面做了如下调研:国外在水果识别上的研究相较中国起步早加上国外技术投资大,研发力度高,设备检测精确。例如Celik 等开发了一套基于机器视觉的分类系统,对常见的水果类型进行了检测分类,该系统的检测算法运用小波变换,双阈值二值化和形态学运算等图像处理方法对图像进行检测,分类算法主要基于灰度共生矩阵和卷积神经网络对缺陷图像进行特征提取和训练分类。随着中国 经济和科技的飞速发展,中国在表面缺陷检测技术方面也取得了一定的成就。例如,大恒图像研发出一种应用于金属表面缺陷检测及物体检测,该系统安装在金属产品生产线上,并对生产线上的每个表面缺陷及外形进行实时在线检测,该系统使用了独特的照明光源,并采用了智能化的算法设计及分析算 法,可以对划伤,结石等表面缺陷进行检测和分类。
1.3 研究目的和意义
由于计算机可以快速获取大量信息,而且易于自动处理,也易于同设计信息以及加工控制信 息集成,因此,在现代自动化生产过程中,人们将人工智能下的图像处理系统广泛地用于目标识别等领域。随着机器视觉技术的成熟,基于图像处理进行水果自助售卖机会极大提高工作的效率,减少错误率,还能减少人与人之间的接触,在疫情期间减少聚集,提高水果店、超市等地工作人员的安全。因此它将在现代和未来制造企业中应用越来越广泛。
1.4 方案介绍
通过CT-LO200 USB2.0 2MP摄像头进行图像采集,将采集到的图片传到AM5708的工业派中,通过opencv模块对图像进行处理,识别到水果种类后,传递到全局变量中,程序通过多线程实现压力传感器、语音模块、post网页数据发送等功能具体实现过程是:通过HX711压力传感模块读取水果质量,并通过语音模块进行播放,将水果的种类、质量通过http的post请求传送到网页端,通过网页端显示水果种类、质量、单价,以及水果的照片,网页会有确认付款的按键,按下出现付款码,客户完成付款后,最终实现自动化购买。
第二章 软件设计方案
2.1 整体程序框架
图2-1 整体程序框架图
本次软件程序设计其最大的特点就是类封装和多线程。通过类封装让程序结构分明各部分功能清晰,而多线程通过并发执行增加工业派 cpu 利用率提高水果识别速度及上传到云端的速度。
一般我们在学习 opencv 的时候写程序通常的流程就是读入图片/视频/摄像头,对每张图片进行处理,处理后进行输出(显示图片/显示识别结果等等)。这种模式基本上是一条线走下来的,前一个步骤没有完成就无法进行下一步的操作。而使用多线程后就可以把每个步骤拆分开,用单独的线程来完成对应的操作。
但是由于使用了多线程就可以进行流水线作业,这样在图像处理线程处理本张图片的时候图像读取线程可以读入下一张图片。
一般而言图像读取速度会比图像处理慢得多,一个 120fps 的摄像头平均一帧所花费的时间是 8ms ,而图像处理所花的时间则在 1~3ms 左右(只识别装甲板灯条),这时候平均每帧的处理时间就是 8ms 。如果换 330fps 的摄像头则平均每帧的处理时间就是 3ms 。通过多线程可以极大地减少算法的用时,提高效率。
2.2 opencv识别水果算法
2.2.1算法整体框架
图2-2 程序流程图
2.2.2 HSV介绍
在图像处理中使用较多的是 HSV 颜色空间,它比 RGB 更接近人们对彩色的感知经验。非常直观地表达颜色的色调、鲜艳程度和明暗程度,方便进行颜色的对比。在HSV颜色空间下,比BGR更容易跟踪某种颜色的物体,常用于分割指定颜色的物体。以下数据分别为各颜色对应HSV的数值,可以初步分割为如下。黄色的HSV数值:11,43,46,25,255,255,青色为:28,69,117,180,255,255,红色为:0,43,46,10,255,255.从下图可得能初步进行物体区分
图2-3 HSV部分函数图
图2-4 水果识别效果图
2.2.3图像预处理
得到HSV变化后的图像时,我们分别对掩膜图像进行灰度处理,再通过soble算子对图像轮廓进行边沿增强。可以使我们的图象轮廓更加清晰。而后利用canny轮廓检测,该方法能较好地拟合出轮廓点。虽然该检测算法计算量大、拟合复杂,但是由于计算机性能地大幅提升,能较好的解决该问题。同时为了较好的使轮廓进行闭合,在本文中我们采用了形态学操作的闭操作,该方法能较好地使一些细微空隙地轮廓进行融合。下图为图像预处理后地结果。
图2-5 图像预处理函数
图2-6 图像预处理后效果图
2.2.4 DSP 算法
DSP是高速实时处理数字信号的专用处理器,也称是一种特别适合于进行数字信号处理运算的微处理器器,其主要应用是实时快速地实现 各种数字信号处理算法。DSP 芯片,由于它运算能力很强,速度很快,体积很小,而且采用软件编程具有高度的灵活性,因此为从事各种复杂的应用提供了一条有效途径。其主要应用是实时快速地实现各种数字信号处理算法。根据数字信号处 理的要求,DSP 芯片一般具有如下主要特点:在一个指令周期内可完成一次乘法 和一次加法;程序和数据空间分开,可以同时访问指令和数据;片内具有快速 RAM,通常可通过独立的数据总线在两块中同时访问;具有低开销或无开销循 环及跳转的硬件支持;快速的中断处理和硬件 I/O 支持;具有在单周期内操作的。
图2-7 DSP加速函数程序
2.2.5 RDP算法与轮廓识别
该算法递归进行,首先设定一个阈值,在点集的第一个点和最后一个点间拉一条线段,找出剩下的点集中离线段最远的一个点,如果该点到线段的距离小于阈值则舍弃中间的所有点,如果大于阈值。将该点作为中间点和最初的两个点生成两条线段,重复上述过程。就能得到最贴近于轮廓的多边形,并以此画出矩形框图。进而根据面积去辅助判断水果面积大小。而后通过将轮廓地长与宽地长度进行比较,从而最终结合水果地颜色、轮廓以及轮廓的长与宽比例进行判断,得到最终的水果类型。具体实验结果如下。
图2-8 RDP算法程序图
图2-9 水果种类识别效果图
2.2.6 knn算法介绍
KNN全名为K-Nearest Neighbors Models,翻译下就是K-最近邻模型,这是用于解决分类问题的最流行的机器学习模型之一,KNN算法本质上没有训练过程。传入一个训练数据集,以及与训练数据对应的分类来训练 Knn 分类器(构建搜索树)。最后要使用 OpenCV 中的 KNN 分类器,我们给它一个测试数据,让它来进行分类。
图2-10 knn模型图
例如给定一个预测目标,接下来计算预测目标和所有样本之间的距离或者相似度。接下来我们拍摄了2000张水果照片,将每一张水果照片的大小都压缩成20*20。为了识别水果,我们首先将水果的数据进行提取,创建了2000*200的图片,矩阵中每一行保存一幅水果图象。同时创建一个2000*1的矩阵,用于保存每幅水果照片的具体数值标签。如下图所示:
图2-10 水果照片数值标签
接着用StatModel类中train函数训练模型,最后保存为yml文件,用于后续的处理。
模型训练完后,我们开始利用K邻近模型预测图像中的内容。
图2-11 K邻近模型预测图像
最后利用KNN算法识别出水果后我们与之前的算法进行比较,如果结果一致,我们则输出最终结果。
2.3 压力传感器程序
为了提供了HX711压力传感器到工业派AM5708的一个接口以及协调二者之间的关系,因此我们写了一个驱动程序运行在工业派内核,对hx711通信的协议进行了封装,以完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。这样我们就能在应用层直接打开对应的文件,将压力传感器设备抽象成文件进行读写。
2.3.1 HX711驱动程序
HX711驱动程序流程为:
初始化HX711
注册字符设备驱动
①创建设备号
②初始化cdev
③添加一个cdev
④创建类
⑤创建设备
2.3.2 HX711应用层程序
应用层程序负责打开/dev/hx711文件,并且实时从内核读取文件数据。
程序此处省略,懒得打出来了!
2.4 语音播报程序
SYN6288 提供一组全双工的异步串行通讯(UART)接口,实现与微处理器或 PC 的数据传输。SYN6288 利用 TxD 和 RxD 以及 GND 实现串口通信。其中 GND 作为地信号。SYN 6288 芯片支持 UART 接口通讯方式,通过 UART 接口接收上位机发送的命令和数据,允许发送数据的最大长度为 206 字节。
最小系统包括:工业派、 SYN6288 语音合成芯片、功放模块和喇叭。工业派和 SYN6288 语音合成芯片之间通过 UART 接口连接,控制器可通过通讯接口向 SYN6288 语音合成芯片发送控制命令和文本, SYN6288 语音合成芯片把接收到的文本合成为语音信号输出,输出的信号经功率放大器进行放大后连接到喇叭进行播放。
由于SYN6288支持 GB2312、 GBK、 BIG5 和 UNICODE 内码格式的文本通信,在这里我们实现的语音播报程序采取文本Unicode编码格式通信。首先将接收到到的水果种类与重量数据进行字符串拼接,此时拼接后的字符串数据类型为UTF-8编码格式,由于SYN6288不支持UTF-8编码通信,因此将UTF-8编码转换成Unicode编码格式,最后将数据通过uart传输协议进行传输。
串口发送的协议函数如下:
图2-13 语音播报程序
2.5 post客户端发送函数函数
2.5.1工业派(客户端)与服务端连接
Socker()创建一个socker对象:
图2-14 post客户端程序
2.5.2通信过程
工业派通过write()函数向服务器发送水果的种类和重量等信息,在这里为了防止客户端不断的向服务器发送数据,在函数里加入一个判断条件,即当水果的种类及重量发生变化时,客户端才会向服务端发送一次数据,这样就实现了阻止数据重复发送的问题。
2.5.3释放过程
图2-15 释放过程流程图
2.6 统终端互联数据传输程序
2.6.1 终端框架
2.6.2 概述
当嵌入式设备已经成功获得了水果的种类与重量,此时要解决的问题为如何将数据传达给用户,转化为清晰直观的用户界面,并引导用户完成支付操作。在此项目中采用的解决方案为:由嵌入式设备发起HTTP请求,将水果的信息传到后端服务器,在后端服务器中部署数据库,当有数据发送过来时,确认数据有效后,生成订单号,一并存入数据库中。 然后在前端界面上自动展示出最新的未支付订单,此时用户就可以看到订单号、水果种类、水果单价、支付金额 等订单数据,用户核对数据后便可支付。支付完成后会自动在数据库中为该订单打上已支付标记,并为用户跳转到感谢界面,完成一趟支付流程。本项目采用了Vue.js、Node.js、Express、MySQL、Nginx 等互联网领域先进技术框架,具有较高的可靠性和安全性,天生具有跨平台的无限潜力,同时有极高的可扩展性,为日后业务的进一步扩展建立了坚实的基础。
2.6.3 技术原理分析
TCP/IP协议是网络数据传输的基石,三次握手四次挥手的机制保证了数传输的准确性。Socket套接字正是在这个基础上进行网络编程,实现了双端设备软件之间的数据传输。我们使用C语言在socket的基础上编写了基于HTTP协议的POST请求,实现了嵌入式设备向后端服务器的HTTP接口发送请求并传递数据的功能后端服务器基于Ubuntu操作系统搭建,使用JavaScript作为主要的后端编程语言,监听固定的端口并为不同的访问路径响应不同的回调函数,在回调函数中实现对的数据库的增删改查。采用MySQL作为关系型数据库管理系统,绑定端口随时响应SQL指令。前端界面方面基于vue.js框架开发,摒弃了传统JavaScript繁杂的Dom操作,采用目前最流行的虚拟Dom技术进行响应式界面的开发。Axios.js作为目前最新颖的基于Promise的网络请求库,在本次项目中承担了前端界面数据请求的重任。
第三章 硬件整体设计方案
3.1硬件框架
3.2 硬件结构介绍
3.2.1 AM5008工业派硬件
硬件部分包括检测所需要德州仪器Sitara系列产品AM5708的工业派开源智能硬件开发平台以及配套了以ARM+DSP+GPU异构多核、性能更强的“工 业派”为核心控制器的TI-RSLK专家版和摄像头,软件部分包括服务器端程序和客户端程序。
工业派开发板,是基于AM5708芯片的最小评估系统,支持1GB DDR3内存 和8GB eMMC存储空间。支持1路千兆以太网接口,并同时支持1路工业以太网 接口。支持1路USB3.0和1路USB2.0接口,丰富系统扩展的便捷性。支持摄像头 CSI接口,可以选配CSI高清摄像机。支持80pin扩展接口,可灵活的对扩展口。
它是一款基于TI Sitara系列产品AM5708异构多核处理器设计的最小系统及 开源智能硬件开发平台,主要面向工业互联网、智能制造、机器人、人工智能、边缘计算、智能人机交互等应用领域。工业派是一个软硬件完全开源的基 础平台,具有支持1路千兆以太网接口、1路百兆工业以太网接口(PRU)、CSI 高清摄像头接口等功能,开发者可以用于功能测试、算法验证及应用开发。由于其丰富的工业属性,尤其适用于工业控制、工业通讯、工业人机交互、工业数据采集与处理、实时控制等工业应用领域。另外,工业派支持丰富的软件开 发生态体系,提供支持Processor Software Development Kit(SDK),可支持包 括Linux和RTOS两个版本;支持Ubuntu16.04操作系统;支持ROS机器人操作系 统;支持深度学习架构TIDL,通过高度优化的CNN/DNN实现;支持Caffe或 TensorFlow-slim框架训练的模型可以导入和转换。
工业派开发板硬件组成:
Ø主芯片采用TI AM5708芯片
Ø2片DDR3L_SDRAM(低功耗),每片512MB,共1GB
Ø1片8GB eMMC
Ø采用专用电源管理芯片TPS659162
ØType c电源输入接口(仅做电源输入接口用)
Ø1个硬件复位按键
Ø1个10M/100M/1000M网络接口
Ø1个10M/100M工业网络接口(PRU)
Ø1个TF卡插槽
Ø1个20pin的JTAG 调试接口(全功能)
Ø1个USB 3.0+USB2.0 叠层接口
Ø1个标准HDMI 视频输出接口(最高输出1080p60 音视频输出)Ø1个CSI 视频输入接口
Ø2个40PIN\2.54间距扩展接口
Ø1个50PIN\1.27间距扩展接口(扩展WiFi)
3.2.2 CT-LO200 USB2.0 2MP 摄像头
UVC 是 Microsoft 与另外几家设备厂商联合推出的为 USB 视频捕获设备定 义的协议标准,目前已成为 USB org 标准之一。如今的主流操作系统(如 Windows XP SP2 and later,Linux 2.4.6 and later,MacOS 10.5 and later)都已提供 UVC 设备驱动,因此符合 UVC 规格的硬件设备在不需要安装任何的驱动程序 下即可在主机中正常使用。使用 UVC 技术的包括摄像头、数码相机、类比影 像转换器、电视棒及静态影像相机等设备。运用 CT-LO200 USB2.0 2MP 摄像头,我们可以很方便地从支持 WDM 驱动模型的采集卡上捕获数据,并且进行 相应的后期处理乃至存储到文件中。它广泛地支持各种媒体格式,包括 Asf、Mpeg、Avi、Dv、Mp3、Wave 等,使得多媒体数据的回放变得轻而易举。
3.2.3 语音模块
SYN6288 中文语音合成芯片是北京宇音天下科技有限公司于 2010 年初推出的一款性价比更高,效果自然的一款中高端语音合成芯片。SYN6288 通过异步串口(UART)通讯方式,接收待合成的文本数据,实现文本到语音的转换。
SYN6288 语音合成芯片采用最小 SSOP28L 贴片封装、具有硬件接口简单、低功耗、音色清亮圆润等优点,有着极高的性价比,SYN6288 在识别文本、数字时更加智能、更加准确,语音合成的自然度也很好。是一款面向中高端行业应用领域的中文语音合成芯片。其支持GB2312、GBK、BIG5和UNICODE内码格式的文本,清晰、自然、准确的中文语音合成效果;可合成任意的中文文本,支持英文字母的合成,每次合成的文本量最多可达200字节,同时支持多种控制命令,包括:合成,停止,暂停合成,继续合成,改变波特率等,也可通过发送控制标志调节词语语速,支持6级词语语速调整。
3.2.4 压力传感器
电子秤是称重技术中的一种新型仪表,广泛应用于各种场合。有着体积小、重量轻、结构简单、价格低、实用价值强、维护方便等特点,可在各种环境工作,重量信号可远传,易于实现重量显示数字化,易于与计算机联网,实现生产过程自动化,提高劳动生产率。在本文中我们选取基于ST89C52一个低功耗,高性能的CMOS 8位单片机、HX711 A/D模块与压电传感器所构成的测重模块。该系统中的HX711是一款专门为高精度电子称而设计的24位A/D转换芯片。与同类型其他芯片相比,该芯片集成了包括稳压电源、片内时钟振荡器等其他同类型芯片需要的外围电路。具有集成度高、响应速度快、抗干扰能力强等优点。压电传感器的体积小、重量轻、结构简单、工作可靠,适用于动态力学量的测量,综合本项目的测重需求,设计了本项目的测重需求,性价比较高。
第四章 方案测试与分析
4.1 实验条件
硬件:IndustriPi 板卡,HDMI 显示屏,相机,电脑
软件:visual studio 2019,python, 交叉编译器,ubuntu16.04
4.2 结果分析
4.2.1调试摄像头
4.2.3.水果识别
系统执行缺陷检测算法进行识别检测,在左边窗口扫描检测图片,在右窗口
将识别结果返回,同时在下方小窗口现实缺陷检测结果的种类和数量。
4.2.4.前端信息显示
第五章 系统目标与技术点
5.1 设计目标
基于图象处理进行水果识别,并通过称重传感器进行称重,通过网卡将数据传输到网页端,语音播报模块与网页端同时读取、显示数据。在网页端显示水果的种类、重量与价格。客户点击确认支付后,会得到付款码,付款成功后,开始新的订单服务。
5.2 创新点
Ø设计了水果识别算法,通过HSV、轮廓比例以及轮廓面积大小去识别水果,提高了识别水果的准确性。Ø
ØDSP可以优化模型训练效果,实时处理能力优于GPU和FPGA,可对图像预处理进行DSP数据加速
Ø应用了先进的前后端技术框架,实现数据同步显示。配备专用工业以太网接口,实现种工业以太网协议
Ø多线程技术使程序的响应速度更快,可以提高CPU利用率。使得前后端数据同步,提高了实时行性。
5.3 技术难点
Ø识别水果容易受到外界环境的影响,导致识别失效
Ø多线程之间同步通信
Ø服务器部署与反向代理
第六章 总结
自助水果售卖系统随着移动支付,人工成本的提高、以及疫情的影响,因此其应用具有极大的实际意义,也是广大科研工作者和企业研究的热点之一。本文基于传统图像的水果识别系统流程包括图像的采集、图像预处理,HSV识别、轮廓识别以及框架长宽比较进行水果种类识别。同时通过多线程同时测量水果的质量,实时播报水果的种类与质量,通过HDMI显示屏显示出来,并传输到网页端将数据在网页端实时显示。而后弹出支付界面完成购买。以上系统基本满足自助水果售卖机的要求,具有较好的应用前景。