基于机器视觉的自动分类垃圾桶设计
2022-04-20朱炜义王喜社吴冠林
□朱炜义 王喜社 吴冠林
2016年,中央财经领导小组第十四次会议提出“要加快建立分类投放、分类收集、分类运输、分类处理的垃圾处理系统,形成以法治为基础、政府推动、全民参与、城乡统筹、因地制宜的垃圾分类制度,努力提高垃圾分类制度覆盖范围”。目前垃圾分类方式多为人工分类,由于垃圾分类困难,步骤繁琐,再加上人们对垃圾分类的意识与自觉性普遍不高,现有的人工分类方法使得垃圾分类制度在我国仍未完全落实。
垃圾分类自动化能大幅度提高垃圾分类效率,使垃圾在投入时就实现分类,便于后续的投放、转运、回收处理,并且可以降低垃圾分类的人工成本,能够有效解决人们对垃圾类别判断困难,垃圾分类实施繁琐、耽误时间等问题。但目前垃圾自动分类装置的设计多为单个垃圾的投放和分拣,故只能应用于理想条件下,和实际应用还有一定的距离。
本设计基于Kendryte k210、树莓派和Arduino UNO平台,结合深度学习领域内的MobileNet V1图像分类算法、opencv图像处理库和末端分拣机构实现垃圾的自动识别和分拣,能对投入的单个或者多个垃圾进行自动识别并分拣,与只能分类单个垃圾的同类设计而言,本设计更符合生活中垃圾投放的实际情况,能有效提高垃圾分类的效率。同时又不需要目标检测算法要求的繁琐的标注环节,大幅度减少深度学习模型训练的工作量,为垃圾分类自动化真正应用到实际生活提供新的思路。
一、系统总体设计
(一)算法设计思路。机器视觉中主流的深度学习算法有图像分类、目标检测、语义分割和实例分割等。由于目标检测、语义分割和实例分割三种算法均需要繁琐的人工标注过程,而垃圾分类面对的对象是种类繁多的垃圾,采用这三种算法中的任何一种都将消耗较大的人工成本来进行数据集标注,并消耗较大的计算资源进行计算,使得对承载平台的算力要求变高,成本随之增加。而图像分类是对图像数据整体进行类别判断的方法,不需要对采集对象进行标注。但是采用图像分类算法的弊端是无法确定目标所属像素点在图像中的相对位置,不适于多个垃圾同时投入进行分类的情况。为了实现多垃圾自动分类,本设计采用图像分类算法和opencv图像处理库相结合的设计方案,采用图像分类算法对垃圾进行识别和分类,再使用opencv对图像数据中的垃圾目标进行框选从而计算垃圾的相对位置,保证采集目标位置精准定位。
(二)机械结构设计思路。人们在日常生活中投放垃圾时常常有单个垃圾投放或多个垃圾同时投放两种情况,两种情况的分拣速度和难度差别较大。为了提高垃圾分拣效率,可以针对单个垃圾投放和多个垃圾投放设计不同的分拣方案。单垃圾分拣投放相对简单,考虑采用可开合的分拣板和可旋转的子垃圾桶,便于垃圾的投入以及提高垃圾掉入相应子垃圾桶的准确度。多垃圾分拣的关键点是将每个垃圾进行分离,考虑采用机械臂抓取的方式进行多垃圾的分离,从而实现点对点的分拣,可以保证稳定性和准确度。
(三)垃圾桶工作过程。垃圾桶的工作过程如下:垃圾投放至分拣板上。单垃圾投放时,机械臂旋转到分拣板上方,位于机械臂末端的摄像头2识别垃圾类别,下方旋转板带动子垃圾桶旋转使得对应垃圾类别的子垃圾桶旋转至分拣板下方,分拣板打开,垃圾自动掉落,分类完成。多垃圾投放时,位于分拣板正上方的摄像头1准确读取垃圾的位置信息,机械臂根据位置信息依次夹取每个垃圾到识别板,同时摄像头2对夹到识别板的每个垃圾进行识别,旋转板再带动对应的子垃圾桶旋转至识别板下方,识别板打开,垃圾自动掉落,分类完成。机械结构原理图如图1所示。
图1 垃圾桶结构原理图
二、硬件设计
(一)控制平台选型。目前,市面上可供选择的控制平台类型很多,功能各有特点。为实现垃圾桶的目标功能,控制平台需要完成工作有:对摄像头采集的图像数据进行图像分类、用opencv图像库实现垃圾的框选、各类传感器及电机的控制和用PyQt5制作人机交互界面。基于采购成本和要完成的工作考虑,筛选出了以下控制平台,在控制成本的条件下极大地满足了产品功能的需求。
Kendryte k210是集成机器视觉定位于AI与IoT市场的的SoC。使用TSMC超低功耗的28纳米制程,拥有RISC-V双核64位处理器,其包含用于计算卷积人工神经网络的KPU。同时k210具备快速傅里叶变换加速器,可以进行高性能复数FFT计算[3]。对于大多数机器学习算法,k210具备高性能处理能力,足以承载MobileNet V1图像分类算法。
需要用到的opencv及PyQt5均需运行在操作系统上。树莓派(Raspberry Pi)4B是只有信用卡大小的微型电脑,其系统基于Linux,具有CSI摄像头接口和USB接口,能够连接各种摄像头,采用28纳米制程的博通BCM2711,内置4核Cortex-A72,主频为1.5GHz,采用双MICRO HDMI接口,支持4K分辨率。树莓派4B能在有限的成本中极大满足本设计的系统及显示要求。
Arduino UNO是基于ATmega328P的IC。它有14个数字I/O口,其中6个可用于PWM、6个模拟输入引脚,一个USB接口,一个DC接口,一个ICSP接口,一个串口[3]。本设计需要用到数个舵机及步进电机,Arduino UNO具有接口数量优势。
基于以上平台特点,选用Kendryte k210平台承载MobileNetV1图像分类算法,通过所连的摄像头采集图像数据,并进行识别,树莓派运行基于opencv的算法及基于PyQt5的UI界面,实现垃圾坐标计算和人机交互的功能。Arduino UNO用来与末端分拣机构直连,保证分拣的机械过程准确实现。
(二)电机选型。电机按电源类型可分为交流电机和直流电机,交流电机结构简单、制造成本低、维护维修简单经济,但其受控性能较差,难以方便实现调速等功能,且一般交流电机用于功率较大的场合。本设计对电机的要求主要是特性、精度和快速响应等方面,分拣板和识别板的张合以及底盘的旋转均需要能够旋转一定的角度,而机械臂的移动更是需要电机能够旋转精准的角度,而直流电机可以平滑调速、转矩较大且便于移动,故选用直流电机。
舵机是一种位置伺服电机,具有可控性好、稳定性高和适应性强的基本性能。在信号到来之前,转子静止不动。信号到来之后转子立即转动,信号消失时,转子能及时自行停转,且其转动角度取决于输入的PWM信号的占空比,适用于需要变换给定角度并能保持的控制系统。
步进电机是一种将离散的电脉冲信号转化为角位移或者线位移的电动机。根据输入的脉冲信号,每改变一次通电状态,步进电机就前进一定的角度。若不改变通电状态,则其保持在一定的位置而静止。其具有精度高、惯性小的特定。在自动化设备中得到广泛的应用。
因此,本设计选择舵机和步进电机作为传动电机。由于旋转底盘承载重量较大,因此选择360°磁编码工业舵机驱动。而识别板和分拣板选择常见的MG996R模拟舵机驱动,价格低廉,性能较为稳定,其扭矩能达到9kg/cm。机械臂是多垃圾分拣的关键结构,对精度要求较高,选用NEMA17HS3401S步进电机驱动。
(三)电源电路。垃圾桶由220V的电源进行供电。220V的电源经过开关电源变压、整流为24V的直流电,再通过XL4015直流变直流降压模块将24V直流降为12V、6.8V和5V,分别给不同的部件进行供电。其中步进电机和旋转底盘的舵机采用12V供电,分拣板和识别板的舵机采用6.8V供电,3个主控平台均采用5V供电。
(四)硬件连接。结合上述三款主控平台的特点及分工,为实现垃圾桶的功能要求,为控制平台设计外围电路。模块和器件的选用以及连接方式如下:树莓派通过CSI接口与摄像头相连,采集分拣板上的图像信息,通过HDMI接口与一块7寸IPS触摸屏连接通过基于PyQt5的UI界面实现人机交互功能。Kendryte k210连接一块小型TFT彩屏与一个ov5640摄像头,通过ov5640采集识别板上的图像信息,通过SPI接口与TFT彩屏连接获取实时识别动态。Arduino UNO作为末端分拣机构的主控板,通过cnc shield v3扩展板与3个NEMA17HS3401S步进电机、4个MG996R舵机和1个360°磁编码110kg工业级舵机相连,扩展板设计有A4988步进电机驱动模块接口,方便步进电机的驱动,步进电机控制机械臂的移动,MG996R控制分拣板和识别板的开合,110kg大舵机为旋转板的旋转提供动力。三个控制平台通过异步全双工串口进行通信,根据自身特点及优势进行分工协作,实现垃圾桶自动分拣的完整功能。硬件连接框图如图2所示。
图2 硬件连接图
三、算法设计
为实现垃圾桶自动分拣功能,在算法方面主要对三个部分进行设计。图像分类算法实现垃圾类别的判断。物体框选算法实现读取每个垃圾在识别板上的坐标,以便进一步驱使机械臂抓取。坐标转换算法将摄像头读取的坐标信息转换为供机械臂执行的位置信息,驱动机械臂准确抓取每个垃圾,达到多垃圾分拣的效果。以下为各部分算法具体实现过程。
(一)图像分类算法。深度学习模型需要部署于移动端,选用一个体积小、模型参量少的网络尤为关键。MobileNet V1是一种体积较小、计算量较少、适用于移动设备的卷积神经网络,其用深度可分离卷积代替普通的卷积,并使用宽度乘数减少参数量[4]。模型训练过程为:将MobileNet V1预训练模型部署于Tensorflow框架上,传入数据集,经过足够批次的迭代,loss值趋于0,mAP值趋于1,停止训练,将训练得到的ckpt后缀的模型转化为tflite模型再通过NNCase转化为kmodelv3模型即可部署于k210系统板上。传入摄像头所采集的图像数据到模型,将会传出图像对应的类别以及准确度。
(二)物体框选算法。垃圾桶的识别板背景单一,垃圾所属的像素点的值与背景差异较大,利用这一特点,通过opencv进行一系列的图像处理,突出垃圾在图像中所属的像素,并且求出最小外接矩形,最小外接矩形对角线中点的坐标即为垃圾中心的坐标,由此可以读取垃圾的相对位置,便于机械臂的夹取。运算过程为:输入图像,用sobel算子求出图像梯度较大处并突出像素点,用canny算法进行边缘检测,将两步操作得到的数据相与后得到粗略轮廓图,将原图像转化为hsv色域,设置合适的阈值突出显示垃圾像素点,将得到的图像与粗略轮廓图相与,即可得到较为明显的轮廓图,再经过多次的腐蚀膨胀,即可将垃圾像素点与背景像素点二值化分离,最后使用opencv的findContours方法画出垃圾的最小外接矩形,即完整的框选出垃圾。框选算法的计算流程如图3所示。
图3 框选算法计算流程
(三)坐标转换算法。整套系统拥有3个坐标系,分别是摄像头采集的图像坐标系、分拣板的实物坐标系以及机械臂坐标系,要从图像坐标系映射到实物坐标系最终转化为机械臂坐标系的坐标才能作为机械臂的输入数据供其抓取。
由于摄像头和分拣板的相对位置固定不变,故选取一为基准点,并设该点为实物坐标系的原点,得到它在摄像头坐标系中的固定坐标,则垃圾的实物坐标系坐标=(垃圾的图像坐标系坐标-图像坐标系基准点坐标)×比例系数。其中,实物坐标系坐标为垃圾距原点的实际距离,图像坐标系坐标为垃圾中心点的像素位置。比例系数为两坐标系中同一段距离数值之比。
机械臂坐标系由实物坐标系都是以实际距离为尺度,差别仅在于原点不一致,进行相应的平移即可达到坐标系转换。机械臂的运动行程的求解采用逆向运动学,即在给定末端的空间位置的前提下,求解关节需要呈多少角度。具体计算公式如下:
θ1=arctan(x/y)-arctan(L2·sinθ2)/(L1+L2·cosθ2)
示意图如图4所示。
图4 机械臂运动算法示意图
四、结语
本文提出了一种垃圾自动分类的实施方案,综合运用了机器视觉和AI技术,使用图像分类算法进行垃圾的识别以及opencv进行垃圾的框选,为解决使用目标检测算法时标注数据集繁琐这一问题提供了一条新的思路[5]。在满足产品功能要求的前提下选用了k210、树莓派和Arduino三款性价比完美的控制平台,极大地降低了产品成本,实现了垃圾分类自动化。该设计方案的成功实现,有利于自动分类垃圾桶的推广和普及应用,为推动我国垃圾分类制度的全面实施贡献力量。