※ 일본의 한 블로그 글을 번역한 포스트입니다. 오역 및 의역, 직역이 있을 수 있으며 틀린 내용은 지적해주시면 감사하겠습니다.
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)
참고자료
'IT > AI\ML' 카테고리의 다른 글
[python/Tensorflow2.X] "ValueError: tf.function-decorated function tried to create variables on non-first call" 에러 해결하기 (0) | 2022.08.16 |
---|---|
[python/Tensorflow] Tensorflow에서 GPU 제한 혹은 무효화하기 (0) | 2022.05.30 |
Annotation과 Annotation의 툴 비교 (0) | 2022.05.13 |
머신러닝 구현 속도를 올려주는 VSCode 설정 (0) | 2022.04.14 |
[python] AI엔지니어가 주의해야할 python 코드 작성 포인트 (0) | 2022.04.13 |