基于TensorFlow的图像识别水果秤设计与实现
2022-04-13许龙铭麦启明卢家俊陈苇浩
许龙铭,麦启明,卢家俊,陈苇浩
(广州城市理工学院通信工程学院,广东广州 510800)
智慧农业已成为当今现代农业发展的大趋势[1],而水果图像的识别在智慧农业领域具有重要的地位[2]。传统的水果秤需要通过人工辨别水果的种类,然后选择对应的价格进行计价操作。在该方式下,由于人的分辨能力以及记忆有限,所以计价环节容易出错,特别是在大型超市中,会带来不小的经济损失。文中设计的是一个采用图像识别技术实现的自动水果秤,能够通过机器视觉识别出水果的种类,然后自动进行称重计价操作,通过触摸屏进行信息提示以及语音播报称重计价结果,并且系统能够辨别不同种类水果混装的情况,然后进行拒绝称重计价以及报警提示操作。
1 方案设计
图像识别水果秤的系统结构如图1 所示,主控制器使用NVIDIA 推出的GPU 主控制器Jetson Nano,该控制器内置了128 个NVIDIA CUDA®核心,十分适合边缘部署AI 应用程序。结合CSI 摄像头、称重传感器、语音模块和触摸屏搭建硬件电路。
整个图像识别水果秤主要由5 个部分组成,分别是:
1)Jetson Nano,用于进行图像识别核心的边缘计算、传感器数据处理以及显示控制等操作。
2)CSI 摄像头,用于采集实时检测目标的图像数据。
3)称重电路,在完成目标的种类识别后进行重量检测,通过重量和预设的单价计算出总价。
4)语音电路,负责与消费者进行非接触式人机交互,通过语音交互完成水果秤的称重、计价以及购买。
5)触摸屏,为管理员提供水果单价设置、支付方式设置等操作。
2 硬件设计
2.1 Jetson Nano
Jetson Nano搭载了四核Cortex-A57处理器,拥有足够的AI 算力,以并行的方式运行多个神经网络。安装了NVIDIA JetPack 软件包后,可通过深度学习、计算机视觉、加速计算和多媒体的库进行快速应用层软件开发,而且支持各类传感器的驱动程序。
2.2 CSI摄像头电路
摄像头电路采用索尼IMX219 芯片,分辨率达到800 万像素,通过15PIN 排线直连到Jetson Nano的CSI 相机接口。由于Jetson Nano 出厂的ubuntu 系统提供CSI 协议的相机驱动,因此主控制器可以免驱驱动IMX219 摄像头,最大支持3 280×2 464 分辨率的图像采集,保证了目标原图的高画质。
2.3 CSI称重电路
称重电路使用海芯科技集成电路技术的HX711芯片。HX711是专为电精度电子秤而设计的芯片,内部集成有放大部分和24 位A/D 转换部分[3],集成了电源电路、时钟电路,具有响应速度快、抗干扰性强等优点。
称重电路如图2 所示,将桥式传感器接入HX711的模拟输入通道A,即接入一个增益可编程的放大器,信号放大后再进行转换处理。HX711的输出为串口输出,通过DOUT和PD_SCK 引脚进行控制。当DOUT 出现下降沿时,Jetson Nano 马上输入25~27 个脉冲,分别读取24 位转换数据以及选择下一次转换的通道、增益参数。
图2 称重电路
2.4 语音电路
语音电路的主芯片采用XFS5152CE,XFS5152CE芯片是科大讯飞股份有限公司最新推出的一款高集成度的语音合成芯片[4],除了提供语音编码功能的中、英文语音合成、中英文混读功能外,还集成了语音识别功能。通过XFS5152CE 芯片可实现水果秤与用户的离线语音交互功能。XFS5142CE 支持SPI、UART和I2C 3 种常用的驱动方式,文中选用的是UART 驱动,Jetson Nano 与XFS5152CE通过串口协议进行通信。
语音电路构成框图如图3 所示。当Jetson Nano按协议发送驱动命令以及文本时,XFS5152CE 将接收的文本合成对应的语音信号进行输出,经过功率放大器放大后的信号最后连接喇叭完成播放。语音识别功能则由麦克风采集音频数据,由芯片内部的语音识别模块转换为文本模式的识别结果,最后通过串口发送给Jetson Nano 进行处理。
图3 语音电路构成框图
3 软件设计
3.1 UI设计
系统软件使用Python3.8 进行编程,首先需要进行交互GUI界面设计。在制作GUI界面时,一般可以通过GUI制作工具和纯代码编写两种方式来实现[5-6],文中使用Qt5编写。Qt5隶属于Qt跨平台开发框架[7],由于Python 无法解析Qt5 编写的UI 文件,通过安装第三方模块PyQt5 将UI 文件转换为.py 文件,创建界面类对象即可运行交互UI。
3.2 搭建图像识别神经网络模型
随着标记数据和GPU 技术的发展,针对卷积神经网络[8-14]的研究取得了丰硕的成果,进而引起了大家对这种高效深度学习识别算法的广泛关注[15]。深度学习利用其强大的特征学习能力,GPU的高速计算以及计算机硬件成本的降低等优势,在目标检测任务中得到大量应用[16]。文中图像识别部分技术主要通过搭建卷积神经网络模型来实现水果种类预测。
模型的搭建需要用到大量的图片资源,文中直接从Kaggle 网站上下载需要的水果图片资源。Kaggle 是Google 旗下的一个全球性的线上数据挖掘与机器学习竞赛平台,是全球最大的数据科学家社区[17]。
Kaggle 网站中Fruits 360 类别下提供了131 种水果和蔬菜的图片,其中训练集图片源如图4 所示,使用训练集的图片源完成模型的训练后,下载对应的测试集图片源进行模型的测试。
图4 训练集图片源
3.2.1 数据准备
搭建模型之前从Kaggle 网站上下载需要的水果训练集和测试集图片,网站中Fruits 360 类别下提供131 种水果和蔬菜的9 万多张图片,下载需要进行识别的水果数据集存放在硬盘中。
通过Python 程序对水果图片进行处理,即读取水果训练集图片数据并转化为TensorFlow 支持的数据格式。读取图片数据后为图片数据添加标签,然后与图片数据一起存放在专门的图片数据数组中。
3.2.2 设计卷积神经网络
为了保证图像识别的准确率,直接采用LeNet-5经典模型搭建图像识别卷积神经网络,其中卷积池化层数量为2,全连接层数量为3。
3.2.3 训练模型
由于Jetson Nano 硬件配置有限,因此在PC 上使用之前处理后的训练集数据进行模型训练,训练完成后将模型保存,模型测试完成后再进行模型的边缘部署。
3.2.4 测试模型
使用训练完成模型进行测试,当准确率不理想时重新调参后,进行训练测试,最后得到模型训练集准确率约为97%,测试集准确率约为93%。
3.2.5 部署模型
模型测试完成后,将模型部署到Jetson Nano 平台,通过opencv-python 模块的VideoCapture 调用IMX219 摄像头进行实时图像拍摄验证。
3.3 主软件流程
图像识别水果秤的主软件流程如图5 所示,主要由抓拍图像、图像分类、称重计价、语音交互、扫码支付5 个步骤实现。
图5 软件流程
1)抓拍图像
系统初始化完成后进入实时图像抓拍环节,Jetson Nano 驱动IMX219 摄像头由上往下抓拍秤盘图像,并进行预处理。
2)图像分类
加载深度学习网络模型,输入预处理后的图像数据进行推理,通过推理得到图像的分类结果。
3)称重计价
图像分类后的结果如果为系统预录的水果类别,则驱动称重电路测量水果的重量,结合管理员预录的水果单价计算出总价,再将水果类别、总价等信息输出到触摸屏进行提示。
4)语音交互
称重计价完成后驱动语音模块播放结果,包括水果的名称、单价、种类和总价。询问用户是否进行结算,然后检测用户的语音回复。
5)扫码支付
如果语音模块检测到用户回复确认结算的语音指令时,弹出二维码并进入等待支付状态,支付完成后即完成一次自助购买流程。
4 实验结果与分析
图像识别水果秤的实物图如图6 所示,IMX219摄像头安装在触摸屏上方,正对着秤盘往下拍摄。
图6 图像识别水果秤实物图
实验环节重点进行水果识别准确率测试,使用高仿真水果进行不同数量、不同种类的检测目标组合进行图像识别实验,每种组合进行100次实验测试。
首先,进行目标识别率测试实验,以苹果为目标举例,分别通过不同苹果数量组合、苹果与其他水果混装组合作为检测主体,得到苹果识别率测试部分典型数据如表1 所示。
表1 目标(苹果)识别率数据
其次,在水果秤自助使用的场合,考虑到可能会出现水果混装的情况,因此需要对系统的混装判断准确率进行测试实验,得到部分典型数据如表2所示。
表2 混装判断准确率数据
由实验数据分析可知,影响目标识别率的因素有两个,分别是:
1)目标的数量
单一种类目标识别的情况下,目标的数量越多,识别率越低。
2)混装目标的种类个数
非单一种类目标识别的情况下,混装目标的种类个数越多,识别率越低。
虽然图像识别水果秤目标识别率受识别主体的个别因素影响,但是目标水果识别率仍然能达到90%以上。整体种类混装判断准确率达到94%以上,总体能满足基本应用要求。
5 结论
图像识别水果秤结合当今热门的人工智能技术,可以让水果秤重计价为全自动环节,为各超市、水果商店降低人力成本,减少由于称重计价错误所带来的经济损失,加快企业的智能化转型。