一般做网站什么价格,网络运维工程师证,网站是公司域名是个人可以,俄罗斯乌克兰最新局势在进行Yolo-obb 模型训练的时候需要标注旋转框#xff0c;roLabelImg 是比较推荐的一款旋转框标注工具#xff0c;既可以标注正常的矩形框#xff0c;还可以标注旋转框
roLabelImg Github 地址#xff1a;https://github.com/HumanSignal/labelImg
但是在使用过程中遇到了…在进行Yolo-obb 模型训练的时候需要标注旋转框roLabelImg 是比较推荐的一款旋转框标注工具既可以标注正常的矩形框还可以标注旋转框
roLabelImg Github 地址https://github.com/HumanSignal/labelImg
但是在使用过程中遇到了一个比较难搞的bug。对于手机等拍摄的图像除了图像内容还会保存很多其他信息比如下图的旋转采用不同的方式打开效果是不一样的使用常规的图像查看就是正常的但是使用 roLabelImg 打开就会发现逆时针旋转 90度。由于roLabelImg 开发较早目测好像没人维护了bug也没人解决了对于项目比较急的小伙伴可以采用本文临时救急使用后续有时间再修复bug 原因
先说下造成这种情况的原因。通过 roLabelImg.py 文件可以看出roLabelImg 在读取图片的时候是先通过read 函数将图像以二进制的形式读取所有内容然后再 QImage.fromData 将像素信息提取出来但是 QImage 读取的时候会根据图片的头信息结合旋转显示而Yolo-obb模型读取数据的时候直接采用 opencv 的形式将图片读取出来出入就此产生
def read(filename, defaultNone):try:with open(filename, rb) as f:return f.read()except:return default解决办法
由于比赛时间紧迫因此当时我们采用的解决方案是将所有的图片重置一遍简单点将就是使用 opencv 将图片读取之后再将所有的像素内容保存一遍从而去除掉图片中的头信息在此推荐使用cv2.imdecode 进行读取不受限于操作系统和中英文路径而cv2.imread在windows系统下如果路径中有中文则会跳过且不报错又是一把辛酸泪(灬ꈍ ꈍ灬)可以参考我的这篇博客查看细节cv2.imdecode cv2.imread 的区别
import cv2
import numpy as npimage_data np.fromfile(pred_image_path, dtypenp.uint8) # 从文件中读取图像数据
image cv2.imdecode(image_data, cv2.IMREAD_COLOR) # 使用cv2.imdecode()解码图像数据# 简写
image cv2.imdecode(np.fromfile(pred_image_path, dtypenp.uint8), cv2.IMREAD_COLOR) # 支持中文与cv2.imread 读取一致
在此建议不要原地覆盖而是另保存一个路径这样一来可以保存原有数据以防后期需要二来原地覆盖保存可能因为 opencv 不提示警告、错误信息导致重置失败而不自知保存在其他路径查看图片数量即可指导是否出错。
后续优化
明白人都知道此方法只能解决燃眉之急不是根本解决之道因此真正的解决办法应该是采用OpenCV 或者 PIL读取图片但是整个项目较为复杂后续有时间再补上解决代码