将二值图转换为coco格式的json文件
文章目录1. 二值图2. python库3. 二值图转单个物体的二值图4. 单个物体的二值图写入json文件1. 二值图2. python库https://github.com/waspinator/pycococreator3. 二值图转单个物体的二值图from scipy import ndimage as ndiimport gdalToolsimport osimport numpy as
·
1. 二值图

2. python库
https://github.com/waspinator/pycococreator
3. 二值图转单个物体的二值图

from scipy import ndimage as ndi
import gdalTools
import os
import numpy as np
from skimage import io
if __name__ == '__main__':
outRoot = "annotations"
fileName = r"F:\paper\fishpond\instance\instanceEval\fishpond\labels\poly.tif"
gdalTools.mkdir(outRoot)
im_proj, im_geotrans, im_width, im_height, im_data = gdalTools.read_img(fileName)
labeled_array, num_features = ndi.label(im_data)
for i in range(1, num_features+1):
subLabel = np.where(labeled_array == i, 255, 0)
outName = f"1000_fishpond_{i-1}.png"
outPath = os.path.join(outRoot, outName)
io.imsave(outPath, subLabel)
4. 单个物体的二值图写入json文件
import datetime
import json
import os
import re
import fnmatch
from PIL import Image
import numpy as np
from pycococreatortools import pycococreatortools
ROOT_DIR = './fishpond'
IMAGE_DIR = os.path.join(ROOT_DIR, "shapes_train2018") # 放入影像
ANNOTATION_DIR = os.path.join(ROOT_DIR, "annotations") # 放入单个物体的二值图
INFO = {
"description": "Leaf Dataset",
"url": "https://github.com/waspinator/pycococreator",
"version": "0.1.0",
"year": 2017,
"contributor": "Francis_Liu",
"date_created": datetime.datetime.utcnow().isoformat(' ')
}
LICENSES = [
{
"id": 1,
"name": "Attribution-NonCommercial-ShareAlike License",
"url": "http://creativecommons.org/licenses/by-nc-sa/2.0/"
}
]
# 根据自己的需要添加种类
CATEGORIES = [
{
'id': 1,
'name': 'fishpond',
'supercategory': 'shape',
}
]
def filter_for_jpeg(root, files):
file_types = ['*.jpeg', '*.jpg', '*.png', '*.tif']
file_types = r'|'.join([fnmatch.translate(x) for x in file_types])
files = [os.path.join(root, f) for f in files]
files = [f for f in files if re.match(file_types, f)]
return files
def filter_for_annotations(root, files, image_filename):
file_types = ['*.png']
file_types = r'|'.join([fnmatch.translate(x) for x in file_types])
basename_no_extension = os.path.splitext(os.path.basename(image_filename))[0]
file_name_prefix = basename_no_extension + '.*'
files = [os.path.join(root, f) for f in files]
files = [f for f in files if re.match(file_types, f)]
files = [f for f in files if re.match(file_name_prefix, os.path.splitext(os.path.basename(f))[0])]
return files
def main():
coco_output = {
"info": INFO,
"licenses": LICENSES,
"categories": CATEGORIES,
"images": [],
"annotations": []
}
image_id = 1
segmentation_id = 1
# filter for jpeg images
for root, _, files in os.walk(IMAGE_DIR):
image_files = filter_for_jpeg(root, files)
# go through each image
for image_filename in image_files:
image = Image.open(image_filename)
image_info = pycococreatortools.create_image_info(
image_id, os.path.basename(image_filename), image.size)
coco_output["images"].append(image_info)
# filter for associated png annotations
for root, _, files in os.walk(ANNOTATION_DIR):
annotation_files = filter_for_annotations(root, files, image_filename)
# go through each associated annotation
for annotation_filename in annotation_files:
print(annotation_filename)
class_id = [x['id'] for x in CATEGORIES if x['name'] in annotation_filename][0]
category_info = {'id': class_id, 'is_crowd': 'crowd' in image_filename}
binary_mask = np.asarray(Image.open(annotation_filename).convert('1')).astype(np.uint8)
annotation_info = pycococreatortools.create_annotation_info(
segmentation_id, image_id, category_info, binary_mask,
image.size, tolerance=2)
if annotation_info is not None:
coco_output["annotations"].append(annotation_info)
segmentation_id = segmentation_id + 1
image_id = image_id + 1
with open('{}/instances_leaf_train2017.json'.format(ROOT_DIR), 'w') as output_json_file:
json.dump(coco_output, output_json_file)
if __name__ == "__main__":
main()
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)