因为论文里面关于数据集介绍的部分想要放一下数据集关于大中小三类目标的比例,所以写了个脚本来计算,需要的自取:
import json
def calculate_area(bbox):
# 计算bbox的像素面积
width = bbox[2]
height = bbox[3]
area = width * height
return area
def categorize_object(size):
# 根据像素面积判断目标大小
if size < 32*32:
return "小"
elif size < 96*96:
return "中"
else:
return "大"
def count_object_sizes(data):
small_count = 0
medium_count = 0
large_count = 0
i = 1
d_number = 0
a = 0
for annotation in data['annotations']:
print("当前是图片的是",annotation["image_id"])
bbox = annotation['bbox']
area = calculate_area(bbox)
size_category = categorize_object(area)
sc = small_count
mc = medium_count
lc = large_count
# 根据目标大小类别进行统计
if size_category == "小":
small_count += 1
elif size_category == "中":
medium_count += 1
else:
large_count += 1
print("第",i,"个标注信息",small_count-sc,"个小目标",medium_count-mc,"个中等目标",large_count-lc,"个大目标")
return small_count, medium_count, large_count
def main():
# 读取目标检测数据集中的Annotation.json文件
with open('D:\datasets\small-object-detection-datasets\Solar_small/all_annotations.json', 'r') as file:
# with open('D:\datasets\small-object-detection-datasets\AL_1103_2/ann/annotations.json', 'r') as file:
data = json.load(file)
# 统计不同大小目标的数量
small_count, medium_count, large_count = count_object_sizes(data)
# 打印结果
print("小目标数量:", small_count)
print("中目标数量:", medium_count)
print("大目标数量:", large_count)
if __name__ == "__main__":
main()