> 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/ja/shiteappurdo/upload-a-dataset.md).

# データセットをアップロードする

Python SDK を使って、構造化された画像とアノテーションのデータセットを Roboflow プロジェクトにアップロードします。

このページでは、Python SDK、REST の zip エンドポイント、または CLI を使用して、既存のラベル付きデータセット（画像とそのアノテーション）を一括インポートする方法を説明します。API を介して個々の画像をアップロードおよび管理する方法については、 [画像の管理](/datasets/ja/guan-li/manage-images.md).

## Python SDK

`Workspace.upload_dataset()` は、構造化データセット（画像 + 対応するアノテーション）を Roboflow プロジェクトにアップロードします。プロジェクトが存在しない場合は作成され、存在する場合は新しい画像が既存のプロジェクトに追加されます。

```python
import roboflow

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

workspace.upload_dataset(
    "./dataset/",                  # 構造化データセットディレクトリへのパス
    "my-detector",                 # プロジェクト ID（存在しない場合は作成）
    num_workers=10,
    project_license="MIT",
    project_type="object-detection",
    batch_name=None,
    num_retries=0,
    is_prediction=False,           # レビュー待ちのモデル生成アノテーションには True
)
```

### パラメータ

* `dataset_path` (str) - データセットルートへのパス。
* `project_name` (str) - 宛先プロジェクトの ID。存在しない場合は作成されます。
* `num_workers` (int、デフォルト値 `10`) - 同時アップロード数。25 を超えないことを推奨します。
* `project_license` (str、デフォルト値 `"MIT"`) - 新規作成プロジェクトのライセンス。プライベートプロジェクトの場合は `"Private"` に設定します（有料プランのみ）。
* `project_type` (str、デフォルト値 `"object-detection"`) - 新規作成プロジェクトのタイプ。プロジェクトがすでに存在する場合は無視されます。
* `batch_name` (str、任意) - これらのアップロードを名前付きバッチにまとめます。ラベリングラウンドのソースを追跡するのに便利です。
* `num_retries` (int、デフォルト値 `0`) - 一時的なアップロード失敗を再試行します。
* `is_prediction` (bool、デフォルト値 `False`) -  `True` に設定すると、アノテーションをグラウンドトゥルースではなく、レビュー待ちのモデル予測としてアップロードします。

### 予測の保存先

まだアップロードバッチ内にある画像に予測を保存すると、Roboflow はその画像をバッチのレビュージョブに移動します。ラベルがグラウンドトゥルースになる前に、ジョブを開いて承認または修正してください。

画像がすでにアノテーションジョブに割り当てられている場合は、そのジョブに残ります。

### 想定されるディレクトリ構成

COCO データセットの場合：

```
my_dataset/
├── train/
│   ├── image1.jpg
│   └── _annotations.coco.json
├── valid/
│   ├── image2.jpg
│   └── _annotations.coco.json
└── test/
    ├── image3.jpg
    └── _annotations.coco.json
```

VOC では、対応する `.xml` ファイルを各画像と同じ場所に配置します。YOLO では、対応する `.txt` ファイルと、クラス一覧を記述した `data.yaml` を配置します。

### SHA-256 重複排除に関する注記（v1.3.6 以降）

バージョン `roboflow` 1.3.6 以降、SDK は Pillow による再エンコードではなく、元の画像バイトをアップロードします。これにより Web アップローダーとの整合性が保たれ、Roboflow サーバーは SHA-256 によってアップロードを重複排除できます。同じ画像を再アップロードしても（たとえば別のバッチへ）、追加のストレージクレジットを消費せずに成功します。

## REST API

### データセット Zip をアップロードする

非同期タスクを使用して、データセットを 1 つの zip アーカイブとしてアップロードします（最大 2 GB、10,000 ファイル）。標準の画像アップロードエンドポイントとは異なり、zip の処理中に HTTP 接続を開いたままにする必要はありません。API は zip の PUT 先となる署名付き URL と、 `taskId` を返します。ステータスはこれをポーリングして確認します。

このエンドポイントは、Roboflow データセットアップロードツールでサポートされる任意の形式（COCO、YOLO、Pascal VOC など）の画像およびアノテーションを含む zip を受け付けます。分類データセットでは、フォルダー名がクラスラベルとして使用されます。

#### フロー

1. `POST /:workspace/:project/upload/zip` 署名付き URL と `taskId`.
2. `PUT` を返します。zip を署名付き URL に直接送信します。
3. `GET /:workspace/upload/zip/:taskId` を使用して、タスクが完了するまでポーリングします。

#### アップロードを開始する

次の `POST` を `/:workspace/:project/upload/zip`に送信します。レスポンスには GCS 署名付き URL と `taskId`.

```bash
curl -X POST "https://api.roboflow.com/my-workspace/my-project/upload/zip?api_key=$ROBOFLOW_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"split": "train", "batchName": "my-batch"}'
```

**ボディパラメータ**

```
- split (string、任意) - train、valid、test のいずれかです。デフォルトは train です。
- batchName (string、任意) - アップロードした画像をこの名前のバッチにグループ化します。
- annotationOverwrite (boolean、任意) - すでにプロジェクトにある画像のアノテーションを置き換えます。デフォルトは false です。
```

デフォルトでは、すでにプロジェクト内にある画像は既存のアノテーションを維持し、zip 内のその画像に対するアノテーションはスキップされます。 `annotationOverwrite` を `true` に設定すると置き換えられます。分類プロジェクトでは常にラベルを置き換えるため、デフォルトを無視し、 `annotationOverwrite: false` を指定すると 400 を返します。

アノテーションを含む zip は、 `batchName`にちなんだ 1 つのアノテーションジョブに入ります。省略した場合は「Uploaded via API」になります。同じ名前を再利用しても、各アップロードには独自のジョブが作成されます。ワークスペースで [レビューモード](/datasets/ja/anotshon/anotshon/team-collaboration.md#review-mode) が有効になっている場合、画像はレビューで待機し、レビュアーが承認するとデータセットに追加されます。

**レスポンス**

```json
{
    "taskId": "abc123",
    "signedUrl": "https://storage.googleapis.com/...",
    "url": "https://api.roboflow.com/my-workspace/upload/zip/abc123"
}
```

#### Zip をアップロードする

`PUT` zip ファイルを、返された `signedUrl`にアップロードします。Content-Type は `application/zip`.

```bash
curl -X PUT "$SIGNED_URL" \
  -H "Content-Type: application/zip" \
  --upload-file ./my-dataset.zip
```

アップロードが完了すると、処理が自動的に開始されます。

#### タスクステータスをポーリングする

次の `GET` を `/:workspace/upload/zip/:taskId`.

```bash
curl "https://api.roboflow.com/my-workspace/upload/zip/abc123?api_key=$ROBOFLOW_API_KEY"
```

レスポンスは標準の [非同期タスク](https://docs.roboflow.com/reference/platform/rest-api/async-tasks) 形式に従います。タスクが完了すると、 `result` には、画像ごとの概要と、解析中に発生した警告またはエラーが含まれます。

```json
{
    "taskId": "abc123",
    "status": "completed",
    "progress": { "current": 250, "total": 250 },
    "result": {
        "uploaded": 248,
        "failed": 2,
        "warnings": [],
        "errors": []
    }
}
```

画像ごとのエラーは最大 100 件、警告も最大 100 件報告されます。zip 内の動画と PDF は、未対応形式の警告として表示され、スキップされます。

#### 制限

* zip の最大サイズ：2 GB
* zip あたりの最大ファイル数：10,000

#### エラー

```
- 400 - zip の形式が不正、またはサイズもしくはファイル数の上限を超えています。
- 401 - API キーがないか、無効です。
- 404 - ワークスペース、プロジェクト、またはタスクが存在しないか、別のワークスペースに属しています。
```

## CLI

Roboflow CLI を使用すると、画像やアノテーションを含むデータセットをアップロードできます。

データセットのアップロード方法を解説した動画を用意しています：

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

### ディレクトリをアップロードする

次を使用します `roboflow image upload` にディレクトリパスを指定すると、画像ごとの並列アップロードでデータセットを一括アップロードできます：

```bash
roboflow image upload /path/to/dataset/folder -p PROJECT_ID
```

または、短縮エイリアスを使用します：

```bash
roboflow upload /path/to/dataset/folder -p PROJECT_ID
```

CLI は、パスがファイル、ディレクトリ、または `.zip` ファイルかどうかを自動検出します。ディレクトリを指定すると、 `--zip-upload`.

#### を使用しない限り、画像ごとの並列アップロードによる一括インポートが実行されます。

| フラグ                   | 説明                             |
| --------------------- | ------------------------------ |
| `-p`, `--project`     | プロジェクト ID（必須）                  |
| `-c`, `--concurrency` | 並列アップロード数（デフォルト：10）            |
| `-b`, `--batch`       | アップロードをグループ化するためのバッチ名          |
| `-r`, `--retries`     | 失敗したアップロードを N 回再試行します（デフォルト：0） |
| `-s`, `--split`       | アップロードするすべての画像の分割を上書きします       |

オプションを指定した例：

```bash
roboflow upload ./my-dataset -p my-project -c 20 -b "april-batch" -r 3
```

### Zip ファイルをアップロードする

より大きなデータセット、またはデータセットがすでに `.zip` ファイルとしてパッケージ化されている場合は、zip アップロードを使用します。zip アップロードでは、Roboflow の非同期 zip アップロードフローを使用します。デフォルトでは、CLI は zip ファイルをアップロードしてから、処理が完了するまで待機します。

これは、 [REST API](#rest-api) で説明したものと同じフローです。CLI が署名付き URL へのアップロードとタスクのポーリングを処理します。

既存の zip ファイルをアップロードするには：

```bash
roboflow image upload /path/to/dataset.zip -p PROJECT_ID
```

ローカルディレクトリをクライアント側で zip 化し、非同期 zip フローでアップロードするには、 `--zip-upload` をメインコマンドとともに使用します：

```bash
roboflow image upload /path/to/dataset/folder -p PROJECT_ID --zip-upload
```

#### Zip アップロードのオプション

| フラグ               | 説明                                                |
| ----------------- | ------------------------------------------------- |
| `-p`, `--project` | プロジェクト ID（必須）                                     |
| `--zip-upload`    | ディレクトリをクライアント側で zip 化し、非同期 zip アップロードフローでアップロードする |
| `--no-wait`       | 処理の完了を待たずに、zip のアップロード後すぐに返します                    |
| `-b`, `--batch`   | アップロードをグループ化するためのバッチ名                             |
| `-s`, `--split`   | 分割を設定：train、valid、または test                        |
| `-t`, `--tag`     | カンマ区切りのタグ名                                        |

zip アップロードオプションを指定した例：

```bash
roboflow image upload ./my-dataset.zip -p my-project -s train -t "outdoor,daytime" -b "april-batch"
```

処理を開始し、すぐにタスク ID を返すには：

```bash
roboflow image upload ./my-dataset.zip -p my-project --no-wait --json
```

JSON レスポンスには非同期タスク ID が含まれます：

```json
{
  "status": "pending",
  "task_id": "task-123",
  "path": "./my-dataset.zip",
  "project": "my-project",
  "result": {
    "task_id": "task-123",
    "status": "pending"
  }
}
```

zip アップロードでは、 `--is-prediction`はサポートされていません。予測のアップロードには、通常の画像ごとのアップロードフローを使用してください。

### サポートされるプロジェクトタイプ

次のプロジェクトタイプのデータをアップロードできます：

* 物体検出
* 単一ラベル分類
* 複数ラベル分類
* インスタンスセグメンテーション
* セマンティックセグメンテーション
* キーポイント検出

### サポートされる data.yaml 形式

CLI は、データセットのアップロード時に `data.yaml` ファイル内の、リスト形式とキー・値ペア形式の両方のクラス名マッピングをサポートします：

```yaml
nc: 3
names: ['Paper', 'Rock', 'Scissors']
```

または

```yaml
nc: 3
names:
  0: Paper
  1: Rock
  2: Scissors
```

### JSON 出力

自動化には、 `--json`:

```bash
roboflow upload ./my-dataset -p my-project --json
```

```json
{"status": "uploaded", "path": "./my-dataset", "project": "my-project"}
```

## MCP サーバー

AI エージェントを [MCP サーバー](https://docs.roboflow.com/agents/mcp-server) に接続すると、これらのツールでデータセットをアップロードできます。zip には画像のみが含まれるため、ラベルは別のステップで保存されます。

<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>annotations_save</code></td><td>すでにアップロード済みの画像のアノテーションを保存します。</td></tr></tbody></table>

## 次のステップ

* アノテーションのない画像にラベルを付け、トレーニングに使用できるようにします。 [Roboflow Annotate の概要](/datasets/ja/anotshon/anotshon/annotation-tools.md).
* 画像をトレーニング可能なスナップショットに変換します。 [データセットバージョンを作成する](/datasets/ja/bjon/dataset-versions/create-a-dataset-version.md).
