本文是针对yolo标注格式txt文件的可视化脚本介绍
如果是VOC格式的xml文件,参考:关于目标检测任务中,XML(voc格式)标注文件的可视化
代码比较简单, 50行这样 。。。。
下面是代码的目录结构,1.jpeg 是数据图像,1.txt是对应的相对坐标信息和索引类别
result.png 是保存的绘制好边界框的图像
因为yolo格式的类别是0开始的索引,所以classes文件尤为重要,否则根本不知道数字对应的目标是什么!这里的classes采用普遍的txt文件展示
有好几种方法,例如
1. 写个脚本将训练集所有标签文件 (txt文件)的内容读取出来,把第一列目标类别项提取出来,然后去重,看看索引到多少,根据不同的索引看看原图框住是什么,自己新建个txt文件写上去就行了。
读取所有的训练集,是因为训练集包含全部的检测类别,要不然网络没法识别没有学习到的内容2. 或者干脆不要这个了,推理的时候,直接在输出图像上推理数字就行了...
3. 好吧,第二种确实有点丑,事实上大部分的数据都有这个classes文件,不管是json字典格式还是txt格式,要不然网络训练的时候根本没法定义检测的个数。 大部分的数据还是VOC的居多,也就是xml标注的,只需要将xml标注的classes文件拷贝就行了。要是VOC的也没有classes文件,可以参考这个文章生成:目标检测篇:如何根据xml标注文件生成类别classes的json文件
大部分和xml可视化脚本差不多,这里只介绍差异的部分
首先,在读取原始图像的时候,需要保留图像的原始size,因为yolo标签是相对坐标,这个有用
然后加载classes文件,这里是列表,看图片中的注释
在然后,同样的方法打开标注txt文件,这里是列表,按照行存储
注意列表的格式,每个元素(字符串)中间是空格隔开的
接下来,保存单个txt文件所以的信息
上面说了,每个目标存放在列表里,单个目标有五个元素,用空格隔开,所以这里将i用空格切分,赋给相应的五个变量,看蓝色框因为是字符串形式,所以要进行类型转换,这里的类别需要整形,其余的小数,看黄色框最后就是坐标变换了,这个很简单,简单的数学计算罢了,需要注意的是,坐标映射还原后,需要改成整型!看黑色框最后,ob 里面存放的就是这样的
后面就都一样了,不赘述,直接看效果
完美
如下:
import cv2
def txtShow(img,txt,save=True):
image = cv2.imread(img)
height,width = image.shape[:2]
with open('./my_yolo_dataset/my_data_label.txt','r') as f:
classes = f.read().splitlines()
with open(txt,'r') as f:
labels = f.read().splitlines()
ob = []
for i in labels:
cl, x_centre, y_centre, w, h = i.split(' ')
cl, x_centre, y_centre, w, h = int(cl), float(x_centre), float(y_centre), float(w),float(h)
name = classes[cl]
xmin = int(x_centre * width - w * width / 2)
ymin = int(y_centre * height - h * height / 2)
xmax = int(x_centre * width + w * width / 2)
ymax = int(y_centre * height + h * height / 2)
tmp = [name, xmin, ymin, xmax, ymax]
ob.append(tmp)
for name, x1, y1, x2, y2 in ob:
cv2.rectangle(image, (x1, y1), (x2, y2), color=(255, 0, 0), thickness=2)
cv2.putText(image, name, (x1, y1 - 10), fontFace=cv2.FONT_HERSHEY_SIMPLEX,
fontScale=0.5, thickness=1, color=(0, 0, 255))
if save:
cv2.imwrite('result.png', image)
cv2.imshow('test', image)
cv2.waitKey()
cv2.destroyAllWindows()
if __name__=='__main__':
img_path = './my_yolo_dataset/train/images/1.jpeg'
label_path = img_path.replace('images','labels')
label_path = label_path.replace('.jpeg','.txt')
txtShow(img=img_path,txt=label_path,save=True)
相关知识
YOLO目标检测——棉花病虫害检测数据集下载分享【含对应voc、coco和yolo三种格式标签】
【yolo数据集】花朵数据集yolo
YOLO作物虫害识别,包含19000张虫害图片,97个昆虫类别。
【目标检测数据集】西蓝花数据集1930张VOC+YOLO格式
基于YOLOv5的PCB板缺陷检测
YOLO识别病虫害数据集
基于YOLOv8深度学习的水稻害虫检测与识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的智能玉米害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
基于YOLOv8深度学习的智能小麦害虫检测识别系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战
助力农业智能化:YOLO病虫害识别数据集推荐
网址: 关于目标检测任务中,YOLO(txt格式)标注文件的可视化 https://m.huajiangbk.com/newsview1263595.html
上一篇: 从LabelMe到一键Label |
下一篇: 【原创】标签应注明不适宜人群的新 |