IT/AI\ML

labelme 사용법

개발자 두더지 2022. 9. 6. 12:16
728x90

일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다.

 

 

labelme란?


  MIT에서 만들어진 어노테이션(라벨링) 툴으로 이번 포스트에서는 세그먼테이션용으로 사용했다.

 

 

labelme의 설치방법


 설치할 수 있는 방법은 크게 두 가지가 있다. 하나는 "Anaconda경유" 이고 다른 하나는 "venv+pip경유" 이다. 이 두 가지 방법의 차이는 점이 없기 때문에 본인이 편한 방법을 선택하면 된다.

 

1. Anaconda를 통한 설치 방법

conda create --name=[가상환경명] python=[Python 버전]
activate [가상환경명]
conda install pyqt
pip install labelme

 

2. venv+pip를 통한 설치 방법

python -m venv [가상환경명]
./[가상환경명]/Scripts/activate
pip install labelme PyQt5

 

 

labelme의 실행


 여기서부터는 anaconda를 기준으로 설명하도록 하겠다. 설치가 끝나면 아래의 커맨드로 가상환경에 진입 후에 실행하면 된다.

activate [가상환경명]

labelme

 그럼 아래와 같이 labelme 프로그램이 실행된다.

① 이미지를 들어 있는 폴더를 여는 기능이다.

② 마우스로 점-선 연결 방법으로 물체 범위를 감싸 폴리곤을 만들기 위한 기능이다.  폴리곤으로 감싸는 것을 끝내면(첫 점과 이어지면) "클래스명"을 입력할 수 있는 창이 뜨므로, 거기서 클래스를 지정할 수 있다.

③ 필요에 따라 수정이 필요하면 폴리곤을 수정할 수 있는 기능이다.

④ 어노테이션 결과를 저장하는 기능이다. 이름은 기본 파일명.json이 된다.

⑤ 다음 이미지로 이동하는 기능이다.

 

 

json 파일을 png로 변환하는 방법


 생성된 json 파일을 이용해 그대로 코딩을 통해 마스크와 이미지를 추출할 수 있지만, 아래의 커맨드로 간단하게 png 확장자로 변환 가능하다. 

labelme_json_to_dataset ○○.json

 그러면 "oo_json"이라는 폴더가 만들어지고 그 안에 아래와 같은 4개의 파일이 생성된다.

  • img.png
  • label.png
  • label_names.txt
  • label_viz.png

 

 

python 코드로 json 파일에서 마스크 추출하기


 위에서 잠깐 언급했듯 python을 이용해 json 파일에서 마스크만 추출할 수 있다. 코드는 다음과 같다. 단일 마스크만 추출하는 코드이므로 응용해서 복수의 마스크를 추출할 수 있을 거라고 생각된다. 

import numpy as np
import labelme
import json

json_file = open("파일패스")
json_data = json.load(json_file)

class_list = json_data.get("shapes")
search_from_dict_list = list(filter(lambda item : item['label'] == "클래스명", class_list))[0]
mask = labelme.utils.shape_to_mask((json_data['imageHeight'], json_data['imageWidth']), search_from_dict_list['points'], shape_type = None, line, width = 1, point_size = 1)

 참고자료

https://qiita.com/kotaxtech/items/f4afe24c6c033f77e10a

728x90