语义分割数据集转目标检测数据集

前言

最近,在做实时性计算的东西,最初用的语义分割unet,发现它在服务器级GPU下推理的特别慢,但是精度还不错,但是我们追求的是实时性,所以我们还是用一下目标检测,最终选定yolov5

yolov5的数据集大家都知道,是需要知道每个锚框的,需要image和txt,而我的语义分割数据集有json文件
如图所示
在这里插入图片描述
#!/usr/bin/python

下文的8标注文件夹底下就是一些json格式的文件
json格式的样子:

在这里插入图片描述
这里面是只有一类,points是当初给的图片(没有用labelme标过的)后来标的一些框的坐标,比如,我这块地有个鼠洞,我需要把他标出来,这样就生成了json格式的文件

-- coding: UTF-8 --

!H:\Anaconda3\envs\new_labelme\python.exe

import argparse
import json
import os
import os.path as osp
import base64
import warnings
import PIL.Image
import yaml
from labelme import utils

def main():
	json_file = "D:/sd/裁切/8标注"

# freedom
list_path = os.listdir(json_file)
print('freedom =', json_file)
for i in range(0, len(list_path)):
    path = os.path.join(json_file, list_path[i])
    if os.path.isfile(path):

        data = json.load(open(path))
        img = utils.img_b64_to_arr(data['imageData'])
        lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

        captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]

        lbl_viz = utils.draw_label(lbl, img, captions)
        # out_dir = osp.basename(path).replace('.', '_')
        out_dir = osp.basename(path).split('.json')[0]
        save_file_name = out_dir
        # out_dir = osp.join(osp.dirname(path), out_dir)

        if not osp.exists(json_file + 'mask'):
            os.mkdir(json_file + 'mask')
        maskdir = json_file + 'mask'

        if not osp.exists(json_file + 'mask_viz'):
            os.mkdir(json_file + 'mask_viz')
        maskvizdir = json_file + 'mask_viz'

        out_dir1 = maskdir
        # if not osp.exists(out_dir1):
        #     os.mkdir(out_dir1)

        # PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name + '_img.png')
        PIL.Image.fromarray(lbl).save(out_dir1 + '/' + save_file_name + '.png')

        PIL.Image.fromarray(lbl_viz).save(maskvizdir + '/' + save_file_name +
                                          '_label_viz.png')


        with open(osp.join(out_dir1, 'label_names.txt'), 'w') as f:
            for lbl_name in lbl_names:
                f.write(lbl_name + '\n')

        warnings.warn('info.yaml is being replaced by label_names.txt')
        info = dict(label_names=lbl_names)
        with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
            yaml.safe_dump(info, f, default_flow_style=False)

        print('Saved to: %s' % out_dir1)
if __name__ == '__main__':
# base64path = argv[1]
	main()

转换结果:

我们生成了与image相对应的txt文件
在这里插入图片描述
如100_0001_0007_1_4.jpg与上图中的txt相对应,所以我们这个做法省去了你用labelme一个一个标(如果一个一个标,估计要一年这么多要检测的物体),所以这个python脚本还是很成功的。
txt效果图:

第一个为类别,因为只有一类,以后的为每个锚框的数值

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在目标识别追踪项目mikel-brostrom/yolov8_tracking中增加计数功能,可以按照以下步骤进行操作: 1. 首先,您可以在代码仓库的GitHub页面上查找相关的文档、问题和讨论,以了解是否已经有其他用户提出了类似的需求或解决方案。这样可以节省您自己实现计数功能的时间和精力。 2. 如果没有找到相关的解决方案,您可以在代码仓库中查找与目标检测相关的部分。通常,目标检测的结果会以矩形框的形式进行表示。您可以根据检测到的目标数量对矩形框进行计数,并将计数结果显示在图像上或输出到控制台。 3. 需要修改的文件可能是predict.py或其他与目标检测相关的文件。您可以在这些文件中查找目标检测的部分代码,通常涉及到对检测结果进行处理和显示的部分。 4. 在目标检测的代码中,您可以使用一个变量来记录目标的数量,并在每次检测到目标时进行更新。您可以根据您的需要选择适当的计数方法,例如使用一个全局变量或在每个帧中保存目标数量的列表。 5. 最后,您可以根据您的要求将计数结果显示在图像上,或将其输出到控制台或保存到文件中。这取决于您希望如何使用计数结果。 总结起来,要为mikel-brostrom/yolov8_tracking项目增加目标检测的计数功能,您需要查找与目标检测相关的代码部分,并在其中实现计数逻辑。具体的实现方式可以根据您的需求和代码结构进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值