本仓库存储2023RoboCup世界杯中国赛What is that 题目的代码。本队在此项目获得了1400分的成绩(满分1750分)。 本项目建立在GitHub项目:yolov7-pytorch基础上,并结合了mediapipe的相关功能。
由于本仓库的内容不仅涉及What is that 题目,也包括了Tidy up项目的视觉识别部分,因此我们使用了三个不同的Yolov7数据集训练出的模型,以满足这两个题目需求的不同摄像机视角下良好的识别效果。 共训练三类模型,各自为
1.桌面上的物体-平视视角:保存为Table_P.pth
2.桌面上的物体-俯视视角:保存为Table_F.pth
3.地面上的物体-俯视视角:保存为Ground_F.pth (此部分为What is that所使用的权重文件)。
What is that 题目的目标拆分为如下几个目标: 1.实现物品识别——利用YOLOv7,并修改输出参数以备后用
2.实现手指向物体判断——利用mediapipe的手部关键点识别模块【后改为手势识别模块的同结果输出】并计算三维向量距离实现
3.实现机器人跟随人体——利用mediapipe的语义分割模块实现分割人体,并进行跟随【此方案有利有弊,利在于可以实现面对人体背影时也能保证很好的识别和跟随效果,弊端在于对于人出现较多的画面容易导致误识别甚至误跟随】
4.实现语音播报——利用多线程和tts模块实现语音转换,同时不阻塞主线程。另外,为避免某一帧的误识别导致播报错误,设置连续五帧识别出同一结果再进行输出并播报
5.实现输出内容的pdf输出——利用fpdf模块实现
6.【加分项】实现两种及以上非语言指令引导机器人完成全过程——利用mediapipe的手势识别模块实现手势的识别,利用手势状态实现对机器人当前任务的切换
7.【加分项】实现输出被检测物体的一个显著特征——利用字典,对于已知的物品提前确定显著特征
为简洁,这里仅列出对yolov7代码做出修改的部分代码。
【测试代码】用于测试跟随算法。跟随算法实现原理为:利用mediapipe语义分割模块实现分割人体,并框出面积最大的人体部分,选取中心点。根据中心点偏移量进行跟随。
【测试代码】用于测试手势识别算法,调用了mediapipe的手势识别模块
用于将手势识别等与手部相关的代码与ros通信联系起来【已弃用】
【测试代码】用于测试人体识别代码
语音模块,用于实现text to sound功能。【在主程序中有调用】
拍摄图像模块,用于构建数据集。
【测试代码】单摄像头版tidy_up题目视觉部分功能实现代码
双摄像头版tidy_up题目视觉部分功能实现代码
本题的主要实现代码。主要方案见上
使用地面物体俯视视角的yolo代码。(因为在实际使用中需要对视角进行无缝切换,因此对每一个视角的yolo模型均进行了一次实例化调用)【在主程序中有调用】yolo_P.py和yolo_F.py与之类似,在tidy-up中有调用。
需要首先准备好与代码适配的硬件,例如两台realsense相机、安装了正确cuda版本的ubuntu计算机等。 其次要事先训练好所需的权重文件。并按照注释要求将例如类别名称的txt文件放在指定文件夹内。
1.若仅测试what-is-that题目,本仓库中所有在【文件结构】部分标注了【测试代码】的代码可以不进行下载,此外在下载后建议与参考链接中附上的yolov7代码进行合并后使用。
2.对于竞赛中使用的权重文件,我们也将在日后进行上传,方便大家进行测试和交流。
3.跟随算法的设计较为简单,因此对于人流较大的场景稳定性很差,请尽量避免在人流密集处测试该模块。【最好在仅有一人入镜的环境下使用】,不过本代码的方式也有优点,支持面对机器人跟随和背对机器人跟随,跟随距离约为0.8米,可以在代码中进行调整。
4.训练时采用的数据集为VOC格式,具体训练的方法和要求请参考源yolov7代码。
5.由于我也搞不清楚装了哪些包了,所以大家可以先按照源代码的依赖进行安装,运行时报错缺哪一个就安哪一个~
https://github.com/WongKinYiu/yolov7 https://github.com/bubbliiiing/yolov7-pytorch https://github.com/WenyaoL/tools-VOC https://developers.google.com/mediapipe