最近在開(kāi)發(fā)項(xiàng)目中,需要通過(guò)txt文件來(lái)生成JSON數(shù)據(jù),于是我了解了一下COCO2017庫(kù)的使用。COCO2017是一個(gè)常用的計(jì)算機(jī)視覺(jué)數(shù)據(jù)集,可以用它來(lái)處理圖像和視頻分類、目標(biāo)檢測(cè)、人體關(guān)鍵點(diǎn)檢測(cè)等任務(wù)。
下面是我使用COCO2017庫(kù)生成JSON的代碼示例:
import json from pycocotools.coco import COCO category_names = ['cat', 'dog', 'bird'] # 創(chuàng)建COCO對(duì)象 coco = COCO() # 創(chuàng)建categories categories = [] for i, name in enumerate(category_names): categories.append({'id': i+1, 'name': name}) # 將categories寫入JSON文件 category_file = 'categories.json' with open(category_file, 'w') as f: json.dump(categories, f) # 創(chuàng)建annotations annotations = [] # 讀取txt文件 data_file = 'data.txt' with open(data_file, 'r') as f: lines = f.readlines() # 遍歷txt文件的每一行 for line in lines: # 解析每行數(shù)據(jù) data = line.split() image_id = int(data[0]) category_id = int(data[1]) x = int(data[2]) y = int(data[3]) w = int(data[4]) h = int(data[5]) # 創(chuàng)建annotation annotation = { 'image_id': image_id, 'category_id': category_id, 'bbox': [x, y, w, h], 'area': w * h } # 將annotation加入annotations annotations.append(annotation) # 將annotations寫入JSON文件 annotation_file = 'annotations.json' with open(annotation_file, 'w') as f: json.dump(annotations, f) # 創(chuàng)建images images = [] # 遍歷annotations for annotation in annotations: # 獲取annotation中的image_id image_id = annotation['image_id'] # 創(chuàng)建image image = { 'id': image_id, 'file_name': str(image_id) + '.jpg' } # 將image加入images images.append(image) # 將images寫入JSON文件 image_file = 'images.json' with open(image_file, 'w') as f: json.dump(images, f) # 創(chuàng)建JSON文件 data = { 'info': {'description': 'my dataset'}, 'categories': categories, 'images': images, 'annotations': annotations } json_file = 'mydataset.json' with open(json_file, 'w') as f: json.dump(data, f)
代碼中,首先創(chuàng)建了一個(gè)空的categories列表用于存放類別信息,遍歷category_names列表,創(chuàng)建了每一種類別的字典類型數(shù)據(jù),并加入到categories列表中。接著我們需要按照COCO2017標(biāo)準(zhǔn)格式創(chuàng)建annotations,遍歷出每一個(gè)txt文件中的數(shù)據(jù),創(chuàng)建相應(yīng)的字典類型annotation數(shù)據(jù)。將所有annotation數(shù)據(jù)加入到annotations列表中,再依次創(chuàng)建每張圖片的image信息,并加入到images列表中。最后將categories、images和annotations信息合并為一個(gè)字典類型數(shù)據(jù)data,并通過(guò)json庫(kù)將字典數(shù)據(jù)轉(zhuǎn)化為JSON數(shù)據(jù)存入文件中。