目标:识别卡牌,骰子等物体,测试旋转框检测方案的可行性
1、配置rotation-yolov5,使用conda配置yolov5,
遇到的错误主要有:
1)、AttributeError: 'Hardswish' object has no attribute 'inplace'
这里 修改activation.py的438行,去掉self.inplace
2)、cv2.getRotationMatrix2D(angle=-a*180/math.pi, center=(cx,cy), scale=1)报错,
查了这个api,第一个为center,第二个为角度,修改源码这里的调用方式,cv2.getRotationMatrix2D(center=(cx,cy), angle=float(-a*180/math.pi), scale=1) ,这里angle再强制转一次(我用的opencv版本为4.5,并没有安装作者的要求换成4.2)
3)、cuda没有参与进来
看了不知何时环境里的torch都不带cuda,重装即可>pip install torch==1.6.0+cu101 torchvision==0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html
正常的应该是这样:这个版本只适用于当前的代码,不适用于yolov5的源码,最好另外创一个conda虚拟环境
4)、这里是后记:利用conda另外创建一个环境和yolov5区别开来,遇到问题再一个一个解决
这里需要改成self.cpu().numpy()
5)、再跑测试demo:
后面制作一下数据集自己训练看看效果,看看竖框检测和旋转框检测哪个更能够接近预期。
2、数据集制作:用到opencv,usb摄像头,手机,游戏王卡片,labelImg
照片来源:手工按键拍照+手机拍照结合,加上以下图像增强工作
标签处理: labelImg,竖框检测的不用再额外处理,旋转框检测可以写个脚本转换一下labelImg生成的标签
doing。。。后面上效果
这里没有用旋转框,直接做的训练,效果ok,针对当前决斗场景来说
验证了初步的想法。√
当然如果牌有旋转,竖框检测就是这样的
接下来做进一步的处理操作:优化上面的训练结果(多增加一个类别),熟悉python的一些操作,了解一种resnet并搭建环境
开发工具:pycharm
python-opencv智能提示:将 d:\programdata\anaconda3\lib\site-packages 类似路径下的cv2.cp38-win_amd64.pyd拷贝一份,重命名为cv2即可智能提示;
python环境下的摄像头输出帧数最稳定,(同样代码逻辑,C++ 2K视频输出卡顿,python帧数正常),后期做接口进行交互;
工程管理:svn服务器,
主机双系统,windows用于编码开发,ubuntu用于训练与测试(ubuntu下训练速度比win10快10倍以上)