【数据集可视化】COCO数据集标注可视化+代码实现


1作用

在做目标检测时,首先要检查标注数据。一方面是要了解标注的情况,另一方面是检查数据集的标注和格式是否正确,只有正确的情况下才能进行下一步的训练。

2 代码实现

import json
import os, cv2

# train_json = r'C:\Users\mage\Desktop\detectron2-maskrcnn\datasets\coco\annotations\instances_test2014.json'
# train_path = r'C:\Users\mage\Desktop\detectron2-maskrcnn\datasets\coco\test2014'
# visual_output = r'C:\Users\mage\Desktop\SolarCOCO\visual\test'





#  可视化coco格式json标注中的box到图片上
import json
import shutil
import cv2

def select(json_path, outpath, image_path):
    json_file = open(json_path)
    infos = json.load(json_file)
    images = infos["images"]
    annos = infos["annotations"]
    assert len(images) == len(images)
    for i in range(len(images)):
        im_id = images[i]["id"]
        im_path = image_path + "/" + images[i]["file_name"]
        img = cv2.imread(im_path)
        for j in range(len(annos)):
            if annos[j]["image_id"] == im_id:
                x, y, w, h = annos[j]["bbox"]
                x, y, w, h = int(x), int(y), int(w), int(h)
                x2, y2 = x + w, y + h
                # object_name = annos[j][""]
                img = cv2.rectangle(img, (x, y), (x2, y2), (255, 0, 0), thickness=2)
                img_name = outpath + "/" + images[i]["file_name"]
                cv2.imwrite(img_name, img)
                # continue
        print(i)

if __name__ == "__main__":

    # train_json = r'D:\PY_SCI\Drawing board\data\COCO\annotations\train.json'
    # train_path = r'D:\PY_SCI\Drawing board\data\COCO\train'
    # visual_output = r'D:\PY_SCI\Drawing board\data\COCO\visual\train'

    # train_json = r'D:\PY_SCI\Drawing board\data\COCO\annotations\test.json'
    # train_path = r'D:\PY_SCI\Drawing board\data\COCO\test'
    # visual_output = r'D:\PY_SCI\Drawing board\data\COCO\visual\test'
    #
    train_json = r'D:\PY_SCI\Drawing board\data\COCO\annotations\val.json'
    train_path = r'D:\PY_SCI\Drawing board\data\COCO\val'
    visual_output = r'D:\PY_SCI\Drawing board\data\COCO\visual\val'

    # json_path = "/Users/wanghao/Desktop/Tianchi_bottle/train1/fix_anno.json"
    # out_path = "/Users/wanghao/Desktop/Tianchi_bottle/train1/vis"
    # image_path = "/Users/wanghao/Desktop/Tianchi_bottle/train1/images"


    select(train_json, visual_output, train_path)


http://www.niftyadmin.cn/n/1368414.html

相关文章

Eureka核⼼源码剖析3 - Eureka Server服务注册接⼝(接受客户端注册服务)

ApplicationResource类的addInstance()⽅法中代码:registry.register(info, “true”.equals(isReplication)); com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl#register - 注册服务信息并同步到其它Eureka节点 PeerAwareInstanceRegistryImpl#repli…

Eureka核⼼源码剖析4 - Eureka Server服务续约接⼝(接受客户端续约)

InstanceResource的renewLease⽅法中完成客户端的⼼跳(续约)处理,关键代码:registry.renew(app.getName(), id, isFromReplicaNode); com.netflix.eureka.registry.PeerAwareInstanceRegistryImpl#renew replicateInstanceActio…

Eureka核⼼源码剖析5--Eureka Client注册服务和刷新缓存,心跳续约

启动过程:Eureka客户端在启动时也会装载很多配置类,我们通过spring-cloud- netflix-eureka-client-2.1.0.RELEASE.jar下的spring.factories⽂件可以看到加载的配置类 引⼊jar就会被⾃动装配,分析EurekaClientAutoConfiguration类头 如果不想…

Eureka核⼼源码剖析6--Eureka Client下架服务

具体实现方法:com.netflix.discovery.DiscoveryClient#shutdown com.netflix.discovery.shared.transport.jersey.AbstractJerseyEurekaHttpClient#cancel

Spring cache缓存应用与总结

前言 现在项目中大家基本都会使用到缓存,本地缓存,Spring引入缓存,或者是直接使用三方缓存的API进行缓存的操作,基本离不开这三种,如果项目没有使用springboot的话,有些配置还需要自己手动去引入&#xff0…

代码重构之枚举使用(策略模式思想)

前言 目前项目是为服务的架构,进行业务的拆分,但是服务之间的交互使用的是http->RestTemplate的方式,这样的方式就没办法像rpc那样通过接口的方式进行直接调用,这个需要单独对调用的地址路径进行定义。 比如订单的创建方法url&…

代码重构之去掉if-else判断

前言 最近在对接一个业务功能,用到了前人写的代码功能点,需要在上边做功能,之前的写法就是if-else的判断,已经有四个这样的判断,而我这次的功能,如果要在之前的基础上继续开发的话,需要再加两个…

gc日志简单分析

前言 gc日志的分析还是可以看出系统的一些问题,吞吐量,gc暂停时间,年轻代和年老代的分配比例等,其中吞吐量和暂停时间是两个比较重要的指标,接下来,我们来简单演示下,随着jvm参数的变化&#xf…