파이썬

[python] yolo bbox -> xml bbox

장비 정 2021. 12. 7. 16:34

회사에서 프로젝트를 진행 중 yolo 형태의 라벨링 파일들을 pascalVOC 의 xml 형태로 바꿔야하는 일이 생겼다.

 

xml 의 format 으로 만들어 각 값들을 넣는데까지는 성공했지만,

 

yolo 와 VOC 의 bbox 그리는 계산식이 서로 달라 제대로 bbox 가 그려지지 않는 문제점이 발생했다.

 

여기저기 검색해보니 xml 의 bbox 값을 yolo 형태로 바꾸는 코드는 찾았지만 그 반대의 경우는 보이질 않았다.

 

xml -> yolo 의 코드를 역산해가며 수정한 코드는 아래와 같다.

 

별로 어렵진 않았지만 혹시라도 나중에 또 쓰일 일이 있을 것 같아 우선 블로그에 저장해둔다.


def convert(size, x, y, w, h): 
    # size : input image 의 width, height 값
    # x, y, w, h : yolo label txt file 의 bbox coord 값
    x = float(x) * size[0] * 2
    y = float(y) * size[1] * 2
    w = float(w) * size[0]
    h = float(h) * size[1]
    xmax = int(round((w+x) / 2))
    xmin = int(round(xmax - w))
    ymax = int(round((h+y) / 2))
    ymin = int(round(ymax - h))
    return xmax, xmin, ymax, ymin