一种智能识别分拣中草药系统

60 多年过去了,尽管辉光管已经停产,有很多工程师仍然对它情有独钟。我用 8 块液晶显示屏制作了一个拟辉光管时钟,感受复古元素的美感,表达对过去经典的敬意。

中医药文化是中华民族传统文化的重要组成部分。近年来,国家对继承、发展中医药文化日益重视,明确提出了要加强中华民族传统文化教育,推动中医药文化进社区、校园和家庭,将中医药基础知识纳入中小学传统文化课程。引导学生深入了解中草药相关知识,这不仅是对传统文化的传承,更是对他们劳动素养的提升和实践能力的锻炼,具有深远的现实意义。近年来,众多地方学校与中医药相关机构携手,共同开展了丰富多彩的“中草药进校园”等劳动教育主题活动。学生们在种植园中亲手种植、采摘中草药,通过亲身体验,更直观地感受到中草药文化的魅力。然而,学生在刚接触中草药时,势必会对中草药的特点、功效、用法等相关知识产生疑问。如果学生一一询问工作人员,这个过程会过于琐碎、低效。同时,学生在采摘后,如何分类收集到的中草药又是一大难题。如果混乱存放,会造成后期药物回收管理上的不便。基于此,我们设计了一款能够识别中草药并将其分拣的装置,以期能够解决中草药回收上的困难。

打开网易新闻 查看精彩图片

准备工作

该装置的功能大体上可分为识别和分拣中草药两部分。

识别功能可由深度学习训练模型完成。在此使用 OpenInnoLab 浦育平台完成模型的训练和推理测试,还可将训练模型转换为轻量、高效的 ONNX 框架文件,方便模型在终端部署。这里的终端是行空板,借助Obloq 通 信 模 块、Easy IoT 平 台 可实现行空板与 Arduino Uno 主控板通信,进而控制舵机。通信连接与舵机控制程序可使用 Mind+ 进行图形化编程,降低开发难度。制作该装置所需的软 / 硬件清单见附表。

打开网易新闻 查看精彩图片

核心内容

总体设计

我们先搜集中草药图片, 形成数据集,并将其划分为训练集、验证集和测试集。将数据集上传至OpenInnoLab 浦育平台,在平台上进行模型训练和推理测试,并将其转化为轻量、高效的 ONNX 框架文件,再将 ONNX 框架文件上传至行空板。

分拣台主要包括分类装置、机械臂和摄像台。当使用者把中草药放置在机械臂上后,启动程序,USB 摄像机自动拍摄,并将图像返回到行空板中。行空板再将推理识别的结果传给外接的蓝牙音箱,蓝牙音箱播报相关的文化知识。同时,行空板通过物联网将识别结果传给 Arduino Uno 主控板,舵机将中草药投放到对应的分类装置中,实现药物分拣。该装置的技术实现思路如图 1 所示。

打开网易新闻 查看精彩图片

图 1 中草药识别分拣装置的技术实现流程

硬件介绍

行空板

行空板是一款国产开源硬件,它自带 Linux 操作系统和Python 环境,还预装了常用的 Python库,能够轻松胜任各种编程相关的开发场景,如搭建物联网系统、体验人工智能应用、编写游戏、进行科学实验、设计声光互动、开发可穿戴设备等。同时,行空板作为智能终端设备,采用微型计算机架构,集成了 LCD 彩屏、Wi-Fi、蓝牙、多种传感器和丰富的扩展接口,具体如图 2 所示。

打开网易新闻 查看精彩图片

图 2 行空板板载接口

Arduino Uno主控板

Arduino Uno 主控板搭载有 AVR单 片 机(ATmega328P)、 晶 体 振荡 器 和 5V 的 直 流 电 源。它 有 14 个数字输入 / 输出引脚 ( 其中 6 个可用作 PWM 输出 )、6 个模拟输入引脚、16MHz 晶体振荡器、USB 接口、电源插孔、ICSP 端口和复位按键。只需要通过 USB 数据线连接计算机就能供电、下载程序和通信数据。Arduino Uno 开发板各部分如图 3 所示。

打开网易新闻 查看精彩图片

图 3 Arduino Uno 主控板

分拣台

分拣台主要由分类装置、机械臂及摄像台组成。先通过 LaserMaker软件设计分拣台,图纸如图 4 所示。再用激光切割机切割,所用的材料是3mm 厚的椴木板。

打开网易新闻 查看精彩图片

图 4 分拣台的设计图纸

实现过程记录与程序设计

该装置的功能大体上可分为识别中草药(模型训练与转换)和分拣中草药(行空板与 Aduino Uno 主控板通信、Aduino Uno 主控板控制舵机)两部分。其中模型训练、推理测试、模型转换可结合程序理解。

识别中草药

1. 数据集制作

通过爬虫程序爬取中草药图片(如果有条件,建议实地拍摄图片,这样在模型部署完成后,识别效果更好),并进行筛选、清洗,爬取的中草药图片(以车前子为例)如图 5 所示。

打开网易新闻 查看精彩图片

图 5 爬取的中草药图片(以车前子为例)

然后,通过划分数据集的程序,将上述数据集划分为训练集、验证集、测试集。此处采集了 8 种中草药的数据集,如图 6 所示。

打开网易新闻 查看精彩图片

图 6 中草药数据集

划分数据集程序如程序 1 所示。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

将数据集上传至 OpenInnoLab浦育平台,如图 7 所示。

打开网易新闻 查看精彩图片

图 7 将数据集上传至 OpenInnoLab 浦育平台

2. 模型训练

模型训练时选用轻量、高效的卷积神经网络模型 MobileNet,该模型由谷歌公司开发,是 SOTA 模型(即“State-Of-The-Art” 模 型, 在 这指模型训练中最先进、高效的模型的总称)的一种。它能在保持准确性的同时,通过减少模型的计算量,提高模型的效率和速度。MobileNet 可以通过在大规模数据集上预训练,将其用作迁移学习的基础模型,进一步提高模型的准确性和稳定性。模型训练过程如图 8 所示。

打开网易新闻 查看精彩图片

图 8 模型训练过程

模型训练程序如程序 2 所示。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

运行之后即可得到识别权重文件,此处名为 best_accuracy_top-5_epoch_43.pth,接下来将在推理测试程序中用到。

3. 推理测试

推理测试程序 3 如下,推理测试结果如图 9 所示。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

图 9 推理测试结果

4. 模型转换

模型转换时选用 ONNX,该模型由微软公司开发,是一种开放的深度学习框架互操作性标准,帮助开发人员实现深度学习框架之间的互操作性和模型的共享和迁移,提高模型推理和部署的效率和灵活性,从而实现

更加高效、可靠和可扩展的图像分类应用。

模型转换如程序 4 所示。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

转 换 后 得 到 ImageNet1k.onnx文件,这也是我们的部署文件,后续把它上传到行空板中,OpenInnoLab浦育平台模型转换示意如图 10 所示。

打开网易新闻 查看精彩图片

图 10 OpenInnoLab 浦育平台模型转换示意

分拣中草药

此功能主要通过编程实现,此处先对通信功能进行设备准备说明。

第一步:先将模型转换得到的ImageNet1k.onnx 文 件 上 传 至 行 空板,如图 11 所示。

打开网易新闻 查看精彩图片

图 11 将 ImageNet1k.onnx 文件上传至行空板

第二步:需要将 Arduino Uno 主控板加装的 Obloq 通信模块、行空板、计算机三者设置于同一网络下,建议用手机开热点,热点连接情况如图 12所示。

打开网易新闻 查看精彩图片

图 12 热点连接示意

注意,当 Obloq 通信模块连接到热点时将会亮绿灯,如图 13 所示,其他情况可自行搜索排查问题。

打开网易新闻 查看精彩图片

图 13 Obloq 通信模块连接成功示意

第 三 步:当 行 空 板 和 Arduino Uno 主控板同处一个热点下时,可以开始考虑如何让两者实现通信。此处借用 Easy IoT 平台,采用 MQTT 通信协议。

MQTT 是一种轻量级的、基于发布 - 订阅模式的物联网通信协议,是由 IBM 公司开发的,主要用于连接传感器、物联网设备或其他小内存和小带宽设备,实现设备间的互联互通。

在 Easy IoT 平台注册账号并登录,登录后添加设备名,具体如图 14所示。至此,通信连接准备工作完成,接下来结合程序说明编程过程。

打开网易新闻 查看精彩图片

图 14 Easy IoT 平台界面

第四步:打开 Mind+,需要编写完成“摄像头拍摄调用——识别框架调用——消息发送”这一流程的程序,并下载到行空板中。

这个功能实现程序如程序 5 所示。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

接下来是行空板连接 Easy IoT平台的程序,其中 user="epOOB4sVR",password="etOdfVsVgz" 为 图14 中需要记录的另外两条数据。

此功能程序如程序 6 所示。

打开网易新闻 查看精彩图片
打开网易新闻 查看精彩图片

当行空板识别到中草药后,会将中草药名称通过订阅消息的方式发送到 Easy IoT 平台,而 Easy IoT 平台也能查看消息发送结果,具体如图 15所示。

打开网易新闻 查看精彩图片

图 15 Easy IoT 平台设备消息查询结果

到这里就实现了行空板将识别结果发送到Easy IoT 平 台 的 功 能。接下来介绍 Arduino Uno主控板如何获取 Easy IoT平台数据并执行相关动作指令。

第五步:在 Arduino Uno 主 控 板 上 连 接 好 舵机、Obloq 通信模块等,打开 Mind+,直接在可视化编程界面进行编程,主要程序如图 16 所示。

打开网易新闻 查看精彩图片

图 16 主要程序

需要注意的是 MQTT的初始化设置,同样使用到 图 14 中 的 3 条 数 据,具体设置如图 17 所示。

打开网易新闻 查看精彩图片

图 17 MQTT 协议配置

Arduino Uno 主 控 板 可 以 接 收Easy IoT 平台消息后,我们可以在串口中查看消息,如图 18 所示。

打开网易新闻 查看精彩图片

图 18 Obloq 通信模块接收到 Easy IoT 平台消息

至此,行空板与 Arduino Uno 主控板之间的通信工作便设置完成了。最后,是 Arduino Uno 主控板控制舵机的程序说明。也就是图 16 中所涉及的“复位”“第一”等封装函数,参数需要根据实际搭建的分拣台进行调整,图 19 所示程序仅供参考。

打开网易新闻 查看精彩图片

图 19 舵机控制程序

成品展示

最终分拣台的搭建成果如图 20所示。

打开网易新闻 查看精彩图片

图 20 最终成品

同时我们也把这个项目中深度学习的部分打包在 OpenInnoLab 浦育平台,读者可基于我们的项目体验中草药识别模型的训练、推理测试、转换过程。

结语

从演示视频中我们可以看出,目前该作品还依赖人工将药物放置在分类装置上,这显然与现实有所出入。我们打算在分类装置前加入机械臂,从药物堆中抓取药物放到分类装置上,进一步提高中草药加工过程的机械化程度,其中涉及的技术更为复杂,需要我们进一步探索。

这个项目倾注了我们接近半年的心血。在学习与创作过程中,我们对复杂的算法、晦涩的逻辑结构感到困惑和烦恼,几次想要放弃。最终,我们不断地查阅资料、请教前辈、反复试错,问题都被一一解决,达到了想要的效果。