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

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

このページでは、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, default `"MIT"`) - 新規作成されるプロジェクトのライセンス。次のように設定します `"Private"` プライベート プロジェクト用（有料プランのみ）。
* `project_type` (str, default `"object-detection"`) - 新規作成されるプロジェクトの種類。プロジェクトが既に存在する場合は無視されます。
* `batch_name` (str, optional) - これらのアップロードを名前付きバッチにまとめます。ラベリング ラウンドのソース追跡に便利です。
* `num_retries` （int、既定値 `0`) - 一時的なアップロード失敗を再試行します。
* `is_prediction` (bool, default `False`) - 次のように設定します `True` すると、アノテーションを正解データではなく、レビュー待ちのモデル予測としてアップロードします。

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

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（文字列、任意）- train、valid、test のいずれか。既定値は train です。
- batchName（文字列、任意）- アップロードされた画像をこの名前のバッチにまとめます。
```

アノテーションを含む zip は、 `batchName`で名前付けされた 1 つのアノテーション ジョブに入ります。指定しない場合は "Uploaded via API" になります。名前を再利用しても、アップロードごとに個別のジョブが作成されます。ワークスペースで [Review Mode](/datasets/ja/anotshon/anotshon/team-collaboration.md#review-mode) がオンになっている場合、画像は Review で保留され、レビュアーが承認するとデータセットに追加されます。

**応答**

```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`       | アップロードしたすべての画像の 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`   | 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"
```

処理を開始して、すぐに task ID を返すには:

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

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

```json
{
  "status": "保留中",
  "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"}
```

## 次のステップ

* 未アノテーションの画像にラベルを付けて、学習に使えるようにします。こちらを参照してください [Roboflow Annotate の概要](/datasets/ja/anotshon/anotshon/annotation-tools.md).
* 画像を学習可能なスナップショットに変換します。こちらを参照してください [データセットのバージョンを作成](/datasets/ja/bjon/dataset-versions/create-a-dataset-version.md).
