> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/datasets/ko/create-and-upload/adding-data.md).

# 이미지, 비디오, 주석 업로드

이미지, 비디오, 주석을 Roboflow에 업로드합니다.

Roboflow로 모델을 학습하고 배포하는 첫 번째 단계는 Project에 데이터를 업로드하는 것입니다.

먼저, 다음이 필요합니다 [Project를 생성합니다](/datasets/ko/create-and-upload/create-a-project.md).

그러면 데이터를 업로드할 수 있는 웹 페이지로 이동합니다. 이 페이지는 프로젝트 사이드바에 있는 "Upload Data" 버튼에서도 접근할 수 있습니다.

## 데이터 추가 방법

Roboflow 계정에 데이터를 추가하는 방법은 다음과 같습니다:

* 웹 애플리케이션 사용: 1,000개 미만의 이미지가 있는 데이터셋에 권장됩니다.
* 명령줄 사용: 1,000개 이상의 이미지가 있는 데이터셋에 권장됩니다.
* Dataset Upload Workflow Block 사용: 이미 프로덕션에서 사용 중인 모델이 있는 Workflow에서 데이터를 수집할 때 권장됩니다.

{% hint style="info" %}
이미지가 AWS S3, Google Cloud Storage, Azure Blob Storage 같은 클라우드 스토리지에 이미 있다면, 업로드를 스크립트로 작성하는 대신 [Datasources](/datasets/ko/create-and-upload/adding-data/datasources.md) 와 Bucket Mirror를 기본 경로로 사용하세요. Datasource는 이미지와 메타데이터를 작업 공간으로 자동으로 가져오고, 수집하고, 동기화합니다. 서명된 URL 업로드나 로컬 다운로드는 일회성 또는 필요할 때만 하는 가져오기에만 사용하세요.
{% endhint %}

웹 애플리케이션과 명령줄에서 다음을 업로드할 수 있습니다:

* JPG, PNG, WEBP, AVIF, BMP, HEIC/HEIF 이미지.\*
* MOV 및 MP4 비디오.
* PDF 파일.
* [지원되는 모든 형식의 주석.](https://roboflow.com/formats)

\**최대 크기는 30 MB, 한 변당 16,384픽셀, 전체 178,956,970픽셀(약 1억 7,900만 화소)입니다.*

주석은 연결된 이미지와 함께만 업로드할 수 있습니다. 이미 데이터셋으로 가져온 이미지에 대한 주석은 업로드할 수 없습니다.

## 웹 앱

Project를 만들 때 또는 Upload Data 페이지에서 이미지, 비디오, 주석을 끌어다 놓을 수 있는 상자가 보입니다:

<figure><img src="https://3735512388-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNVfRxNsvCh4GOyqrjmzX%2Fuploads%2Fgit-blob-deb24c5aa34b10e1ccab8bec61e7f55ed2f8c273%2Fimage%20(426).png?alt=media" alt="" width="563"><figcaption></figcaption></figure>

[40개 이상의 주석 형식이 지원됩니다.](https://roboflow.com/formats) 지원되는 형식은 프로젝트 유형에 따라 다릅니다.

<details>

<summary>파일 이름 처리 방식</summary>

이미지 파일 이름을 표준화할 수 있도록 업로드/가져오기와 내보내기 시 클래스 이름을 모두 정리합니다. 업로드와 데이터셋 내보내기에서 다음을 수행합니다:

* 앞뒤 공백 제거
* 모든 공백(줄바꿈 및 탭 포함)은 공백 하나로 변환됩니다
* 이중 공백은 제거됩니다
* `/.[]#~*` 문자는 대시(-)로 대체됩니다 (`-`)
* `|'"` 문자는 제거됩니다

</details>

### Zip 파일 업로드

드래그 앤 드롭하거나 선택할 수 있는 `.zip` 이미지와 주석 아카이브입니다. 더 작은 아카이브(최대 300개 파일)는 브라우저에서 압축 해제되어 드롭한 폴더와 동일한 업로드 흐름으로 처리되므로, 미리보기 썸네일, 주석 매칭, 배치 이름 지정이 모두 동일하게 작동합니다. 아카이브 안에 중첩된 폴더도 그대로 유지됩니다.

더 큰 아카이브(300개 초과 파일, 최대 8 GB)는 대신 원시 zip을 Roboflow 서버에 업로드합니다. 확인하면 진행률 표시줄이 업로드를 추적하고, 그다음 브라우저가 작업을 넘기면 서버 측에서 처리가 계속됩니다. Activity Center에서 진행 상황을 확인할 수 있으므로, 계속 작업하다가 원할 때 다시 확인하면 됩니다. 압축 해제된 이미지는 Annotate 페이지에서 하나의 배치로 표시됩니다.

확인 대화상자에는 "이 프로젝트에 이미 있는 이미지의 주석을 교체" 체크박스가 있습니다. 이 옵션을 끄면 프로젝트에 이미 있는 이미지는 현재 주석을 유지합니다. zip 안의 주석으로 교체하려면 체크하세요. 분류 프로젝트에서는 항상 레이블이 교체되므로 이 체크박스는 표시되지 않습니다.

아카이브에 주석이 포함되어 있으면 그 이미지들은 하나의 주석 작업으로 들어가며, 귀하에게 할당됩니다. 업로드마다 별도의 작업이 생성되므로, 같은 zip을 다시 업로드해도 이전 작업을 재사용하지 않습니다.  [Review Mode](/datasets/ko/annotate/annotate/team-collaboration.md#review-mode) 가 켜져 있으면, 이미지가 Review에 대기하다가 검토자가 승인하면 데이터셋에 추가됩니다. Review Mode가 꺼져 있으면 즉시 데이터셋에 추가됩니다.

8 GB를 초과하는 아카이브의 경우, zip을 [명령줄로](#upload-datasets-with-the-command-line) 업로드하세요.

### 비디오 업로드

이미지 기반 Project 유형에서는 업로드한 비디오가 개별 프레임으로 분할되어 주석을 달 수 있습니다. 비디오를 업로드하면 내장 비디오 플레이어, 샘플링 슬라이더, 선택적 수동 프레임 선택이 있는 추출 대화상자가 열립니다.

Action Recognition Project는 업로드된 각 비디오를 그대로 유지하므로 작업을 [video segments](/datasets/ko/annotate/annotate/annotate-video-segments.md).

#### 샘플링 간격

슬라이더를 사용하여 프레임이 샘플링되는 빈도를 설정하세요. 슬라이더 아래 입력란에 간격을 초 단위로 직접 입력하거나 원하는 프레임 수를 직접 입력할 수도 있습니다. 샘플링 범위는 초당 60프레임부터 60초에 1프레임까지입니다.

#### 수동 프레임 선택

"Manual selection"을 클릭하여 프레임 선택 패널을 펼치세요. "Add current frame"을 사용하거나 `M` 를 눌러 현재 재생 헤드 위치의 프레임을 선택하세요. 다음을 사용해 개별 프레임을 단계적으로 이동하거나 `,` 및 `.`, 또는 다음을 사용해 선택된 프레임 사이를 이동하세요 `Shift+Left` 및 `Shift+Right`.

샘플링된 프레임과 수동으로 선택한 프레임은 병합되고 중복이 제거되며, 대화상자에는 추출할 총 프레임 수가 실시간으로 표시됩니다.

#### 자르기

필름스트립의 자르기 핸들을 드래그하여 시작점과 끝점을 설정하세요. 자른 범위 밖의 프레임은 제외됩니다.

"Extract N frames"를 클릭하여 비디오를 프레임으로 분할하고 데이터셋에 업로드하세요.

여러 비디오가 대기열에 있으면 동일한 간격 설정을 모두에 적용할 수 있습니다. 선택된 프레임은 비디오별로 적용되므로, 선택된 프레임이 있을 경우 각 비디오는 자체 대화상자를 엽니다.

<details>

<summary>지원되는 비디오 파일 형식</summary>

Roboflow는 브라우저에 내장된 비디오 파일 지원을 사용하여 비디오를 프레임 이미지로 변환하고, 이를 모델 학습에 사용할 수 있게 합니다. 즉, 사용하는 브라우저에 따라 MOV 및 MP4 파일을 포함한 다양한 비디오 형식을 사용할 수 있습니다.

다음을 할 수 있습니다 [브라우저가 지원하는 비디오 형식을 확인할 수 있습니다](https://caniuse.com/?search=video%20format).

비디오가 브라우저에서 디코딩할 수 없는 형식을 사용하면, Roboflow는 "Scanning files"에서 멈추지 않고 "unsupported video" 오류를 표시하고 파일 변환을 안내합니다. HEVC/H.265는 흔한 원인입니다(예: DJI 드론, GoPro, 최신 휴대폰의 영상)이며 Safari에서만 디코딩할 수 있습니다. 비디오를 더 널리 지원되는 MP4(H.264)로 다시 내보내거나 변환한 다음 다시 업로드하세요.

비디오 파일을 Roboflow에 로드하는 데 문제가 있으면, 저희 [포럼에](https://discuss.roboflow.com/) 글을 올리거나 계정 담당자에게 문의하세요.

</details>

### 비디오 세그먼트 주석 가져오기

Action Recognition 프로젝트는 각 동작이 언제 발생하는지 나타내는 레이블을 가져올 수 있습니다. 설명하는 각 비디오 옆에 하나의 `_annotations.coco.json` 이 있는 비디오 폴더를 드래그하세요:

```
my_videos/
├── train/
│   ├── serve-01.mp4
│   └── _annotations.coco.json
└── valid/
    ├── serve-02.mp4
    └── _annotations.coco.json
```

각 파일은 `info.format` 을 `roboflow-video-coco` 로 설정하고 하나의 MP4 또는 MOV 비디오를 설명합니다. 공간 주석과 프레임별 주석은 건너뛰며, zip 아카이브는 허용되지 않습니다. `train`, `valid`또는 `test` 라는 폴더가 그 안의 비디오 분할을 결정합니다. 그렇지 않으면 업로드를 시작하기 전에 분할을 선택합니다.

비디오를 다시 가져오면 해당 세그먼트가 교체되지만, 이미 프레임 주석이 있으면 Roboflow가 대신 이를 유지합니다.

## HTTP API

### 비디오 업로드

최대 3 GB의 MP4 또는 MOV 비디오를 Workspace 또는 Action Recognition Project와 같은 Project에 업로드할 수 있습니다. 업로드는 세 단계로 진행됩니다:

1. 업로드를 준비합니다. 다음을 받게 됩니다 `videoId`와 `signedUrl`그리고 `requiredHeaders`.
2. 다음이 포함된 `PUT` 요청으로 비디오 파일을 전송하세요 `signedUrl`그리고 `requiredHeaders`의 모든 헤더를 포함하세요. URL은 60분 후 만료됩니다.
3. 업로드 상태를 다음이 될 때까지 읽으세요 `status` 가 `uploaded` 또는 `failed`.

선택 사항인 `batch`, `tag`, `metadata`그리고 `split` 필드는 이미지 업로드와 동일하게 작동합니다. 동일한 비디오가 이미 Project에 있으면 Roboflow가 이를 재사용합니다. 비디오는 배치를 유지하고 태그, 메타데이터, split을 받습니다.

{% openapi src="/files/9adc2fc9c253afaf0c2add39d011d1d8cbb826a2" path="/{workspace}/upload/video" method="post" %}
[video-upload.yaml](https://3735512388-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNVfRxNsvCh4GOyqrjmzX%2Fuploads%2Fgit-blob-fd03929d0d9fea85d103811eda7c4269428be525%2Fvideo-upload.yaml?alt=media)
{% endopenapi %}

{% openapi src="/files/9adc2fc9c253afaf0c2add39d011d1d8cbb826a2" path="/{workspace}/upload/video/{videoId}" method="get" %}
[video-upload.yaml](https://3735512388-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNVfRxNsvCh4GOyqrjmzX%2Fuploads%2Fgit-blob-fd03929d0d9fea85d103811eda7c4269428be525%2Fvideo-upload.yaml?alt=media)
{% endopenapi %}

업로드된 비디오를 찾으려면 [데이터셋을 검색하세요](/datasets/ko/manage/manage-datasets/dataset-search.md#http-api) 다음을 사용하여 `mediaTypes` 를 `["video"]`.

## CLI

Roboflow Python 명령줄 인터페이스를 사용하여 더 큰 데이터셋을 업로드할 수 있습니다.

명령줄 인터페이스로는 이미지 만 업로드할 수 있습니다. 비디오가 있다면 [파일로 저장된 프레임으로 분할해야 합니다](https://superuser.com/questions/1044444/how-do-i-use-ffmpeg-to-split-a-video-into-images-and-then-reassemble-exactly-the)그런 다음 이 파일들을 Roboflow에 업로드할 수 있습니다.

시작하려면 먼저 다음을 설치하세요 `roboflow-python`:

```
pip install roboflow
```

다음으로, [Workspace ID를 가져오세요](https://docs.roboflow.com/reference/authentication/authentication/workspace-and-project-ids).

마지막으로, 다음 형식의 명령을 준비하세요:

```
roboflow import -w testupload -p project-1-8zgld /path/to/dataset/folder
```

지정해야 하는 인수는 다음과 같습니다:

* `-w testupload`: 이것은 Workspace 이름입니다.
* `-p <project-id>`: 이것은 프로젝트 ID입니다.

명령을 실행하면 업로드 프로세스가 시작되었다는 메시지가 표시됩니다. 그러면 이미지가 업로드되는 동안 로그가 표시됩니다:

<figure><img src="https://3735512388-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNVfRxNsvCh4GOyqrjmzX%2Fuploads%2Fgit-blob-cb3c6b1fff1fa6883a6fb226f8a3704493263a70%2FCleanShot%202024-03-13%20at%2011.29.09%402x.png?alt=media" alt=""><figcaption><p>명령줄을 사용하여 데이터셋 업로드</p></figcaption></figure>

명령줄에서 데이터를 업로드하는 방법을 보여주는 비디오 안내가 있습니다:

{% embed url="<https://www.loom.com/share/19637984033a466b831af56f9404fa89>" %}

### Zip 파일 업로드

큰 데이터셋의 경우 개별 파일 대신 이미지와 주석이 들어 있는 하나의 `.zip` 아카이브를 업로드할 수 있습니다. 아카이브는 한 번 업로드된 뒤 Roboflow 서버에서 비동기적으로 처리되므로 파일별로 업로드하는 것보다 더 빠르고 안정적입니다.

다음을 업로드하세요 `.zip` 직접:

```bash
roboflow image upload dataset.zip --workspace <workspace> -p <project>
```

또는 업로드 전에 CLI가 폴더를 zip으로 압축하도록 할 수 있습니다:

```bash
roboflow image upload ./dataset/folder --zip-upload --workspace <workspace> -p <project>
```

기본적으로 명령은 처리가 끝날 때까지 기다렸다가 요약을 출력합니다. `--no-wait` 를 전달하면 즉시 반환됩니다. CLI는 업로드 상태를 폴링하는 데 사용할 수 있는 작업 ID를 출력합니다.

## Python SDK

다음을 사용하세요 `Workspace.upload_dataset()` 를 사용해 `.zip` 아카이브를 업로드하거나 업로드 전에 폴더를 zip으로 압축하세요:

```python
import roboflow

rf = roboflow.Roboflow(api_key="YOUR_API_KEY")
workspace = rf.workspace()

# .zip 경로는 자동으로 감지되어 아카이브로 업로드됩니다
workspace.upload_dataset("dataset.zip", project_name="your-project")

# 폴더의 경우 use_zip_upload를 사용하도록 선택해 zip으로 압축한 뒤 하나의 아카이브로 업로드합니다
workspace.upload_dataset("./dataset/folder", project_name="your-project", use_zip_upload=True)
```

{% hint style="info" %}
Zip 업로드는 최대 8 GB 및 100,000개 파일의 아카이브를 지원합니다. 예측(`is_prediction=True`)은 zip 경로에서 지원되지 않습니다. 대신 이미지별 업로드를 사용하세요.
{% endhint %}

## MCP Server

AI 에이전트를 [MCP Server](https://docs.roboflow.com/agents/mcp-server) 에 연결하면 다음 도구를 사용하여 프로젝트에 이미지를 추가할 수 있습니다:

<table data-search="false"><thead><tr><th width="290">도구</th><th>설명</th></tr></thead><tbody><tr><td><code>image_upload</code></td><td>zip을 통해 로컬 이미지 파일을 프로젝트에 업로드합니다.</td></tr><tr><td><code>image_upload_status</code></td><td>이미지 zip 업로드 작업의 상태를 확인합니다.</td></tr><tr><td><code>images_update_metadata</code></td><td>업로드한 이미지의 메타데이터와 태그를 업데이트합니다.</td></tr></tbody></table>

## 업로드한 데이터 보기

Roboflow에 업로드된 모든 데이터는 "batch"로 업로드됩니다. 이러한 배치는 Project Annotate 페이지에서 확인할 수 있습니다:

<figure><img src="https://3735512388-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FNVfRxNsvCh4GOyqrjmzX%2Fuploads%2Fgit-blob-e02e3663f94fef52256a1528c2361066bcc4d89f%2FScreenshot%202025-05-20%20at%2008.04.10.png?alt=media" alt=""><figcaption></figcaption></figure>

## 이미지 크기 제한

이미지는 최대 30 MB, 각 변 최대 16,384픽셀, 전체 최대 178,956,970픽셀(약 1억 7,900만 화소)까지 가능합니다. 웹 앱, API, zip 업로드, Datasources를 포함한 모든 업로드 방법은 더 큰 이미지를 거부합니다. 이러한 제한 이전에 업로드된 이미지는 Project에 그대로 유지됩니다.

## 중복 이미지

이미 Project에 있는 이미지를 업로드하려고 하면 해당 이미지의 업로드는 건너뜁니다.

Project에서 이미지를 제거해도 주석은 유지됩니다. 그 이미지를 다시 업로드하면 해당 주석과 이전 주석 상태를 가진 채 Project에 다시 추가되므로, 주석이 달린 이미지가 주석이 없는 상태로 돌아오지 않습니다.

{% hint style="info" %}
두 데이터셋을 [병합하면](/datasets/ko/manage/merge-datasets.md)병합된 데이터셋과 원본 두 데이터셋이 계정에 모두 존재합니다. 따라서 이미지는 중복이므로 병합에 대한 요금은 부과되지 않습니다.
{% endhint %}

## 데이터 소유권

Roboflow에 업로드하는 모든 이미지와 비디오의 소유권은 귀하에게 있습니다. 이는 [이용약관의 23B항에 정의되어 있습니다](https://roboflow.com/terms):

> 귀하가 게시, 제출, 게시, 표시 또는 전송하는 모든 콘텐츠, 정보 또는 자료에 대한 모든 소유권은 귀하에게 있습니다

## 데이터 개인정보 보호

비공개 프로젝트는 Roboflow Universe에 공개 목록으로 표시되지 않습니다. 다음을 할 수 있습니다 [프로젝트 개인정보 보호를 제어합니다](/datasets/ko/manage/make-a-project-public.md).
