기계는 거짓말하지 않는다

Labelme JSON data label 별 object 개수 본문

AI

Labelme JSON data label 별 object 개수

KillinTime 2022. 10. 28. 10:44

Labelme JSON 데이터에 포함 된 label 이름 별 object 개수를 확인할 경우

하위 디렉터리가 존재하지 않는다면 수정이 필요하다.

하위 디렉터리가 존재할 경우 디렉터리 별로 결과를 출력하고

모두 확인이 완료되면 전체 결과를 출력한다.

import os
import glob
import datetime
import time
import copy
import json

# 경로 변경
dir_root_path = "G:/data"
# 하위 디렉터리가 존재할 경우
sub_dir_name_list = glob.glob(os.path.join(dir_root_path, "*"))

total_name_dict = {}
class_name_dict = {}
read_count = 0

start_time = time.time()

for sub_dir_name in sub_dir_name_list:
    label_path_list = glob.glob(os.path.join(sub_dir_name, "*.json"))
    read_count = 0
    class_count_dict = {}

    sub_dir_name = os.path.basename(sub_dir_name)
    print(f"{sub_dir_name} label")
    
    for label_path in label_path_list:
        with open(label_path, 'r', encoding='utf-8-sig') as f:
            data = json.load(f)
            box = data['shapes']
            for box_data in box:
                if box_data["label"] in class_count_dict:
                    class_count_dict[box_data["label"]] += 1
                else:
                    class_count_dict[box_data["label"]] = 1
                    
                if box_data["label"] in class_name_dict:
                    class_name_dict[box_data["label"]] += 1
                else:
                    class_name_dict[box_data["label"]] = 1
                    
        read_count += 1
        
        if read_count % 1000 == 0:
            print(f"{read_count} / {len(label_path_list)}")
            
    key_list = list(class_count_dict.keys())
    key_list.sort(key=lambda x: x)

    print(f"{sub_dir_name} class list")
    for key in key_list:
        print("class:", key, "count:", class_count_dict[key])
    print('')
            
    total_name_dict[sub_dir_name] = copy.deepcopy(class_count_dict)

print('\n< Result >')

for name in total_name_dict.keys():
    print(f"[{name}]")
    key_list = list(total_name_dict[name].keys())
    key_list.sort(key=lambda x: x)

    print(key_list)
    for key in key_list:
        print("class:", key, "count:", total_name_dict[name][key])
    print('')
    

print("< Class Name and Total Object Count >")
key_list = list(class_name_dict.keys())
key_list.sort(key=lambda x: x)

print(key_list)

for key in key_list:
    print("class:", key, "count:", class_name_dict[key])
print('')
print(f"Total Time: {datetime.timedelta(seconds=int(time.time() - start_time))}")

'AI' 카테고리의 다른 글

Darknet make libdarknet.so  (0) 2022.11.04
Labelme JSON data label 명 변경  (0) 2022.10.28
YOLO label 텍스트 object 개수  (2) 2022.10.23
YOLO label 텍스트 classid 제외  (1) 2022.10.23
YOLO label 텍스트 classid 변경  (0) 2022.10.14
Comments