Metadata-Version: 2.4
Name: clean-dataset
Version: 0.3.0
Summary: 데이터셋 정리 및 시각화 라이브러리
Author: haechan
License: MIT
Project-URL: Homepage, https://github.com/haechan/clean-dataset
Project-URL: Repository, https://github.com/haechan/clean-dataset
Keywords: dataset,segmentation,detection,visualization,mask
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Scientific/Engineering :: Image Processing
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: numpy>=1.20.0
Requires-Dist: Pillow>=8.0.0
Requires-Dist: opencv-python>=4.5.0
Requires-Dist: sanghyunjo
Provides-Extra: dev
Requires-Dist: pytest>=7.0.0; extra == "dev"
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
Requires-Dist: black>=23.0.0; extra == "dev"
Requires-Dist: isort>=5.0.0; extra == "dev"
Requires-Dist: flake8>=6.0.0; extra == "dev"
Dynamic: license-file

# clean-dataset

데이터셋 정리 및 시각화 라이브러리

train/val/test로 구성된 비디오/이미지 데이터셋을 정리하고 시각화하는 도구입니다.

## 설치

```bash
pip install clean-dataset
```

## 사용법

```python
from clean_dataset import image, split, mask_semantic, mask_instance, mask_panoptic, make_json, visualize
```

### 1. 이미지/마스크 폴더 구조 평탄화

```python
# JPEGImages/video_id/frame.jpg -> images/video_id@frame.jpg
image("dataset")

# video_id/image/frame.jpg -> images/video_id@frame.jpg
image("dataset", source="image")

# video_id/mask/frame.png -> masks/video_id@frame.png
image("dataset", source="mask")

# 특정 split만 처리
image("dataset", splits=["train", "val", "test"])
```

### 2. 데이터셋 분할 (txt 파일 기반)

```python
split("data", train="train.txt", val="val.txt", test="test.txt")
# 결과: train/, val/, test/ 폴더 생성
```

### 3. 마스크 생성

```python
# 어노테이션 JSON에서 생성
mask_semantic("dataset", {
    "train": "train.json",
    "val": "val.json",
    "test": "test.json",  # test는 있으면 넣고 없으면 생략
})
mask_instance("dataset", {"train": "train.json", "val": "val.json"})
mask_panoptic("dataset", {"train": "train.json", "val": "val.json"})
# 결과: dataset/train/mask_semantic/, dataset/train/mask_instance/, ...

# RGB 마스크 폴더에서 생성
# 구조 1: split/panomasksRGB/video_id/*.png
mask_instance("dataset", {
    "train": "panomasksRGB",
    "val": "panomasksRGB",
}, from_rgb=True)

# 구조 2: split/data/video_id/mask/*.png
mask_instance("dataset", {
    "train": "data",
    "val": "data",
}, from_rgb=True, mask_folder="mask")
```

### 4. JSON 생성

```python
# 어노테이션 JSON에서 bbox JSON 생성
make_json("dataset", {
    "train": ["train/instances.json"],
    "val": ["val/instances.json"],
    "test": ["test/instances.json"],
})
# 결과: dataset/train/json/, dataset/val/json/

# 마스크에서 직접 bbox 계산
make_json("dataset", {
    "train": "mask_instance",
    "val": "mask_instance",
}, from_mask=True)

# 카테고리 JSON 생성 (어노테이션에서 추출)
make_json("dataset", {
    "train": ["train.json"],
}, category=True, output_name="VIPSeg.json")
```

**출력 JSON 형식 (bbox):**
```json
[
    {"id": 1, "tag": "person", "xmin": 701, "ymin": 0, "xmax": 1280, "ymax": 709},
    {"id": 2, "tag": "car", "xmin": 100, "ymin": 200, "xmax": 500, "ymax": 600}
]
```

**출력 JSON 형식 (category, isthing 있을 때):**
```json
{
    "names": {"person": "thing", "sky": "stuff", ...},
    "ignore": 255
}
```

**출력 JSON 형식 (category, isthing 없을 때):**
```json
{
    "names": ["person", "car", "tree", ...],
    "ignore": 255
}
```

### 5. 시각화

```python
visualize("dataset")
# 결과: examples/semantic/, examples/instance/, examples/panoptic/

visualize("dataset", splits=["train", "val", "test"], max_samples=10)
```

## 지원 형식

- **입력**: YouTube-VOS, VIPSeg, COCO 형식의 JSON
- **마스크**: RLE 인코딩, RGB panoptic 마스크
- **폴더 구조**:
  - `split/JPEGImages/video_id/frame.jpg`
  - `split/video_id/image/frame.jpg`
  - `split/video_id/mask/frame.png`

## 의존성

- numpy >= 1.20.0
- Pillow >= 8.0.0
- opencv-python >= 4.5.0
- sanghyunjo

## 라이선스

MIT License
