![]()
“今人不见古时月,今月曾经照古人。”自古以来月亮寄托着人们浓厚的情感,东坡先生的“人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。”更是成为千古名句。在本项目中,我们将通过月的“阴晴圆缺(月相)”,走近人的“悲欢离合(诗词)”,与古人同赏一轮山间明月!
项目介绍
本项目使用 Mind+2.0 模型训练平台的实例分割算法训练出一个“识别月相”的模型,部署在行空板 M10 上。接下来设计一个互动程序,使行空板M10 外接摄像头在识别到你所见到的月相时,根据月相生成对应的诗词和背景图。最具特色的是,该项目可以利用实例分割功能将识别到的月相保存下来,与画面中的诗词和背景图共同构成一幅完美的画卷(见图 1)。
![]()
图 1 项目效果
月相的形成与分类
在做这个项目前,我们先弄清楚两个重要的信息:一是月相形成的原因,二是月相的分类。
月相不是因地球遮挡而形成的(月食是地球遮挡形成的,日食是月球遮挡形成的)。月球会围绕地球转动,转动一周约为一个月。在一个月中,我们可以看到所有的月相。
我们将太阳光看作平行光,月球始终会有一半球面受太阳光照射(除了月食时),也会反射一半球面的太阳光。当月球转动到不同位置时,被太阳光照亮的一面,其反射到地球上的光的面积比会发生变化,于是就有了不同的月相(见图 2)。
![]()
图 2 月相原理
月相与农历日期关系如图 3 所示。
● 朔月(初一,不可见)。
● 蛾眉月(初三至初四,新月)。
● 上弦月(初七至初八)。
● 盈凸月(十一至十二)。
● 望月(十五至十六,满月)。
● 亏凸月(十七至廿二)。
● 下弦月(廿三至廿四)。
● 残月(廿五至廿九,亏眉月)。
● 晦月(三十,朔月前夕)。
![]()
图 3 月相与农历日期关系
月相数据的采集
了解月相形成的原理和分类后,接下来我们需要准备月相的数据集。你可以通过多种方式获取月相数据集(见图 4),这里我展示的是“手搓教具”的方式——准备一个小球,涂成一半黑、一半白即可。黑色代表的是始终没有受到太阳光照射的一面,白色代表的是太阳光照射的一面,当我们平视小球,缓慢转动时,就能够看到模拟版的“完整月相”。
![]()
图 4 获取月相数据集的方式
使用摄像头,对小球不同的转动角度进行拍摄。每个类型的月相先采集 25 张左右(此数据量可用于项目测试使用,远不能达到非常精准的模型训练效果),确保各类型数据量接近即可。
在拍摄时,角度、距离、位置可做适当的调整,增加数据的多样性,也可以将你真实拍到的月相照片放入对应的文件夹,对采集的“月相数据”进行分类(见图 5)。
![]()
图 5 对采集的“月相数据”进行分类
月相数据的上传与标注
使用 Mind+2.0 版本的实例分割功能(见图 6),上传无标注的数据。
![]()
图 6 实例分割功能
实例分割的数据标注是训练模型的核心步骤,特指通过人工或辅助工具,在图像中为目标类别,标注出类别信息与完整轮廓信息的过程。标注时需沿着月相边缘逐点绘制掩膜(Mask),精准包裹目标轮廓,生成模型训练所需的 “标准答案”。相比目标检测的边界框标注,实例分割的轮廓标注更精细(见图 7),直接决定抠图效果的准确性。
![]()
图 7 实例分割数据标注图样
对上传的数据集进行数据标注,如图 8 所示(此过程比较费时间,可以使用其他的数据标注工具来完成)。
![]()
图 8 数据标注过程
如果大家想直接使用标注好的数据集,可以用本项目分享的数据集(见图 9),关注本刊微信公众号获取。
![]()
图 9 已标注的数据集文件
将上述已经标注过的数据文件直接上传至数据集,其中蛾眉月上传 1 次,满月上传 3 次,上弦月上传 2 次,盈凸月上传 1 次,用于平衡数据集(多次重复上传操作,效果提升有限)。
因为标注太费时间,所以我就标注了 4 个类型的月相做演示。如果是老师带学生做标注,可以让不同的学生分别标注不同的月相,再将标注的数据集一起导入,可事半功倍。
模型训练与验证
在上传完已标注过的数据集或是自己已经完成数据集的标注后,单击“模型训练”即可开始训练模型。如图 10 所示,图片统一处理为 224 像素 ×224 像素,每次训练 16 张图,训练 50 轮(训练完所有的数据集算一轮)。
![]()
图 10 模型训练过程
完成训练后,可以对不同的月相进行测试,验证识别效果(见图 11)。
![]()
图 11 模型效果验证
单击“导出模型”后,将会得到两个文件(见图 12),然后进行保存。
![]()
图 12 模型相关文件
项目设计
器材清单:行空板 M10、USB 接口摄像头。行空板 M10 系统版本为 0.4.1 及以上(见图 13)。行 空 板 M10 Python 环 境 为 3.12.7, 行 空 板M10 调 Python 版本方法如图 14 所示,将项目素材文件(见图 15)导入,上传路径选“资源文件”(见图 16)。
![]()
图 13 器材准备与查看系统版本方法
![]()
图 14 行空板 M10 调 Python 版本方法
![]()
图 15 项目素材文件
![]()
图 16 素材上传路径
搭建程序
搭建示例程序如图 17 所示。
![]()
图 17 程序
● 启动程序,显示背景画面,中间圆形为背景的透明部分,用于摄像头采集月相数据(见图 18)。
● 摄像头对准月亮,按下 A 键识别月相。
● 获取月相类型数据,显示屏显示对应的图片和诗词。
● 获取月相坐标数据并保存掩膜,将识别到的月相抠图显示在行空板画面中(见图 19)。
● 按下 B 键返回初始界面。
![]()
图 18 程序启动效果
![]()
图 19 识别到月相后的效果
基于 Mind+ 模型训练平台和行空板 M10 的跨学科项目完成了。在欣赏月相与优美诗词之际,我们也可以开动脑筋思考更多趣味问题。你能根据看到的月亮判断月相并推算农历时间吗?基于行空板 M10 的交互设计如何进行完善?如何将此装置设计出 2.0 版本作为校园的互动装置?期待大家一起创新项目,识别月相赋诗词!
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.