Supervisely 이미지 분할 데이터 세트 형식 변환

Supervisely 데이터 세트 의 읽 기와 해석 은 두 가지 방법 이 있 습 니 다. 1. 읽 기 json 파일 자체 분석;2. 쓰다 supervisely_lib 해석
이미지 분할 데이터 집중 이미지 의 표 시 는 두 가지 기하학 적 유형 이 있 습 니 다. 비트 맵 (bitmap), 다각형 (polygon) 입 니 다.스스로 해석 하려 면 이 두 가지 유형 을 처리 하고 참고 해 야 한다. “Supervisely "이미지 분할 데이터 세트 형식 해석".사용 방법supervisely_lib 통 일 된 API 를 제공 합 니 다. 기하학 적 유형 에 관심 을 가 질 필요 가 없습니다. 같은 API 로 가 져 올 수 있 습 니 다. 마스크, 윤곽, box.
마스크 이미지 생 성 을 예 로 들 면
설치 하 다 supervisely_lib
supervisely_lib 항목 주소:https://github.com/supervisely/supervisely
설치 방법 은 프로젝트 홈 페이지 (README. md) 를 참조 합 니 다.
설치 과정 에서 제3자 라 이브 러 리 에 의존 할 수 있 습 니 다. 그 중에서 요구 합 니 다. opencv-python 버 전 은 4.0.0 보다 작다.제 Python 환경 에 설치 되 어 있 기 때 문 입 니 다. opencv-python 4.2.0 그래서 저 는... supervisely 약간의 수정, 차 이 는 다음 과 같 습 니 다.
diff --git a/setup.py b/setup.py
index dad24a3..4cc0698 100644
--- a/setup.py
+++ b/setup.py
@@ -25,7 +25,7 @@ setup(
         "jsonschema>=2.6.0,<3.0.0",
         "matplotlib>=3.0.0",
         "numpy>=1.14.3",
-        "opencv-python>=3.4.1,<4.0.0",
+        "opencv-python>=3.4.1",
         "pandas>=1.0.3",
         "pascal-voc-writer>=0.1.4",
         "PTable>=0.9.2",
diff --git a/supervisely_lib/geometry/bitmap.py b/supervisely_lib/geometry/bitmap.py
index 30880b8..ab51919 100644
--- a/supervisely_lib/geometry/bitmap.py
+++ b/supervisely_lib/geometry/bitmap.py
@@ -117,7 +117,7 @@ class Bitmap(BitmapBase):
         self.to_bbox().get_cropped_numpy_slice(bitmap)[self.data] = color
 
     def _draw_contour_impl(self, bitmap, color, thickness=1, config=None):
-        _, contours, _ = cv2.findContours(self.data.astype(np.uint8), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
+        contours, _ = cv2.findContours(self.data.astype(np.uint8), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
         if contours is not None:
             for cont in contours:
                 cont[:, :] += (self.origin.col, self.origin.row)  # cont with shape (rows, ?, 2)

2. 데이터 세트 준비
데이터 세트 를 다운로드 한 후 압축 을 풀 고 이름 을 바 꿉 니 다. 여기 서 person 으로 이름 을 바 꿉 니 다.
데이터 세트 다운로드, 참고:https://blog.csdn.net/SimleCat/article/details/107021152
내 디 렉 터 리 구 조 는 다음 과 같다.
├── code
├── person
│   ├── ds#
│   │   ├── ann
│   │   └── img
│  └── meta.json
└── person_mask

주: "\ #" 취 [1, 13],code 화해시키다 person_mask 내 가 만 든 거 야.
주의: person 데이터 세트 디 렉 터 리 를 위해 서 이 디 렉 터 리 에 새 디 렉 터 리 를 만 들 수 없습니다. 그렇지 않 으 면 supervisely_lib 로드 Project 시 차 를 잘못 보고 하 다.
생 성 mask
code 디 렉 터 리 아래 새 파일 gen_mask. py, 파일 내용 은 다음 과 같 습 니 다.
import os
import numpy as np
import cv2
import tqdm
import supervisely_lib as sly
from matplotlib import pyplot as plt


def genMask(dataset_root_dir="./person",
            output_dir="./person_mask",
            label_color=[255,255,255]):
    '''   Mask
        dataset_root_dir:       
        output_dir:   mask     
        label_color: mask      [R, G, B]
    '''
    project = sly.Project(dataset_root_dir, sly.OpenMode.READ)

    #        
    print(f"Project name     : {project.name}")
    print(f"Project directory: {project.directory}")
    print(f"Total images     : {project.total_items}")
    print(f"Dataset names    : {project.datasets.keys()}")
    print()
    print(project.meta)

    pbar = tqdm.tqdm(total=project.total_items)
    for dataset in project:
        for item_name in dataset:
            #      
            pbar.update(1)
            #              
            item_paths = dataset.get_item_paths(item_name)
            #       
            ann = sly.Annotation.load_json_file(item_paths.ann_path, project.meta)
            #            3      ,
            ann_render = np.zeros(ann.img_size + (3,), dtype=np.uint8)
            #        (       )
            ann.draw(ann_render, color=label_color)
            # ann_render shape: (h, w, c), pixel: (R, G, B)
            # RGB -> BGR,  Opencv
            ann_render = ann_render[..., ::-1]
            # mask        ,   
            save_dir = os.path.join(output_dir, dataset.name)
            if not os.path.exists(save_dir):
                os.makedirs(save_dir)
            #   mask
            mask_path = os.path.join(save_dir, item_name)
            cv2.imwrite(mask_path, ann_render)
    pbar.close()


if __name__ == '__main__':
    import fire
    fire.Fire(genMask, name='gen_mask')
    '''
    Usage:
    # 1.       
    python code/gen_mask.py
    # 2.         mask    
    python gen_mask.py --dataset_root_dir ../person --output_dir ../person_mask
    '''

gen_mask. py 사용 방법 은 위 코드 의 마지막 "Usage" 부분 을 참고 하 십시오.
supervisely_lib 더 많은 사용 예시, 참고:https://github.com/supervisely/supervisely/blob/master/help/jupyterlab_scripts/src/tutorials/01_project_structure/project.ipynb

좋은 웹페이지 즐겨찾기