728x90
728x90
python code로 xml label값 수정하는 방법
가끔 detection에서 labeling 된 object의 name을 수정하고 싶거나 bounding box 값을 변환하고 싶을 때 labeling tool을 사용하기도 하지만 직접 코드로 원하는 값으로 바꾸고 싶을 때가 있다.
전체 example python code
밑의 코드는 xml로 되어있는 annotation파일에 대해 object의 name을 수정하거나 bounding box 값을 수정할 수 있는 코드이다.
import os
# 라이브러리 호출
import xml.etree.ElementTree as ET
# 변환하고 싶은 xml파일들을 list에 저장
path = 'annotations'
anno_list = [os.path.join(path, x) for x in os.listdir(path)]
anno_list.sort()
for c, anno in enumerate(anno_list):
anno_name = anno.split('/')[-1]
save_anno_path = os.path.join('new_anno', anno_name)
image_name = anno_name.split('.')[0] + '.jpg'
# 해당 xml파일 읽기
xml = open(anno, 'rt', encoding='UTF8')
tree = ET.parse(xml)
root = tree.getroot()
# xml 파일 안에 있는 bounding box 결과 값 수정
for obj in root.iter('object'):
obj.find('name').text = 'food'
obj.find('bndbox')[0].text = 10
obj.find('bndbox')[1].text = 10
obj.find('bndbox')[2].text = 100
obj.find('bndbox')[3].text = 100
# 수정된 정보 xml에 저장
tree.write(save_anno_path)
728x90
반응형
'Development > Python' 카테고리의 다른 글
[python] pip install TypeError: expected str, bytes or os.PathLike object, not int (0) | 2023.01.04 |
---|---|
[Python] DCM파일을 jpg나 png의 image 파일로 변환 (2) | 2022.12.05 |
[Scipy] error: library dfftpack has Fortran sources but no Fortran compiler found (0) | 2022.04.18 |
[Flask] image에 대해 주고 받기 (1) | 2021.12.13 |
[Python] 백 슬레시를 슬레시로 변경 (0) | 2021.10.06 |
댓글