> 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/hi/create-and-upload/upload-a-dataset.md).

# एक डेटासेट अपलोड करें

यह पेज Python SDK, REST zip endpoint, या CLI का उपयोग करके किसी मौजूदा लेबल किए गए डेटासेट - इमेजें और उनकी एनोटेशन सहित - के bulk import को कवर करता है। API के माध्यम से अलग-अलग इमेजों को अपलोड और प्रबंधित करने के लिए, देखें [इमेजें प्रबंधित करें](/datasets/hi/manage/manage-images.md).

## Python SDK

`Workspace.upload_dataset()` Roboflow प्रोजेक्ट में एक संरचित डेटासेट (images + matching annotations) अपलोड करता है। यदि प्रोजेक्ट मौजूद नहीं है, तो वह बनाया जाएगा; अन्यथा नई इमेजें मौजूदा प्रोजेक्ट में जोड़ दी जाएँगी।

```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) - डेटासेट root का पथ।
* `project_name` (str) - destination प्रोजेक्ट का id। यदि मौजूद नहीं है तो बनाया जाता है।
* `num_workers` (int, डिफ़ॉल्ट `10`) - समकालिक अपलोड। हम 25 से अधिक न करने की सलाह देते हैं।
* `project_license` (str, default `"MIT"`) - नए बनाए गए प्रोजेक्ट के लिए license। इसे सेट करें `"Private"` निजी प्रोजेक्ट्स के लिए (सिर्फ़ paid plans)।
* `project_type` (str, default `"object-detection"`) - नए बनाए गए प्रोजेक्ट के लिए type। यदि प्रोजेक्ट पहले से मौजूद है तो अनदेखा किया जाता है।
* `batch_name` (str, optional) - इन अपलोड्स को एक नामित batch के अंतर्गत समूहित करें। labeling round के स्रोत को ट्रैक करने के लिए उपयोगी।
* `num_retries` (int, डिफ़ॉल्ट `0`) - अस्थायी अपलोड विफलताओं को पुनः प्रयास करें।
* `is_prediction` (bool, default `False`) - इसे सेट करें `True` ताकि एनोटेशन को ground truth के बजाय समीक्षा की प्रतीक्षा कर रही model predictions के रूप में अपलोड किया जाए।

### जहाँ predictions पहुँचती हैं

जब आप किसी ऐसी image पर prediction सहेजते हैं जो अभी भी upload batch में है, तो Roboflow उस image को उस batch के लिए review job में भेज देता है। labels ground truth बनने से पहले उन्हें approve या ठीक करने के लिए job खोलें।

यदि image पहले से किसी annotation job को assigned है, तो वह उसी job में बनी रहती है।

### अपेक्षित डायरेक्टरी लेआउट

COCO dataset के लिए:

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

VOC के लिए, मिलती-जुलती `.xml` files को प्रत्येक image के साथ रखें। YOLO के लिए, मिलती-जुलती `.txt` files के साथ एक `data.yaml` जो class list का वर्णन करता हो।

### SHA-256 dedup (v1.3.6+) पर नोट

से `रोबोफ्लो` 1.3.6, SDK Pillow के माध्यम से पुनः-encoding करने के बजाय मूल image bytes अपलोड करता है। इससे web uploader के साथ समानता मिलती है और Roboflow server को SHA-256 द्वारा अपलोड्स deduplicate करने देता है - उसी image को फिर से अपलोड करना (जैसे किसी अलग batch में) अतिरिक्त storage credits खर्च किए बिना सफल होता है।

## REST API

### Dataset Zip अपलोड करें

async task का उपयोग करके एक single zip archive (2 GB तक, 10,000 files) के रूप में dataset अपलोड करें। standard image upload endpoint के विपरीत, zip प्रोसेस होते समय आपको HTTP connection खुला रखने की आवश्यकता नहीं होती। API एक signed URL लौटाता है जिस पर आप zip PUT करते हैं, और एक `taskId` जिसकी status आप poll करते हैं।

यह endpoint उन zips को स्वीकार करता है जिनमें Roboflow dataset upload tools द्वारा समर्थित किसी भी format (COCO, YOLO, Pascal VOC, आदि) में images और annotations हों। classification datasets के लिए folder names को class labels के रूप में उपयोग किया जाता है।

#### Flow

1. `POST /:workspace/:project/upload/zip` एक signed URL और एक लौटाता है `taskId`.
2. `PUT` zip को सीधे signed URL पर भेजें।
3. `GET /:workspace/upload/zip/:taskId` जब तक task पूरा न हो जाए तब तक poll करने के लिए।

#### Upload प्रारंभ करें

एक `POST` से `/:workspace/:project/upload/zip`भेजें। response में एक GCS signed 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, optional) - train, valid, या test में से एक। डिफ़ॉल्ट train है।
- batchName (string, optional) - अपलोड की गई images को इस नाम के batch के अंतर्गत समूहित करें।
```

जिन zips में annotations होती हैं, वे एक annotation job में पहुँचती हैं जिसका नाम `batchName`के नाम पर होता है, या यदि आप इसे छोड़ देते हैं तो "Uploaded via API"। हर upload को अपना अलग job मिलता है, भले ही आप नाम पुनः उपयोग करें। यदि workspace में [Review Mode](/datasets/hi/annotate/annotate/team-collaboration.md#review-mode) चालू है, तो images Review में प्रतीक्षा करती हैं और reviewer द्वारा approve किए जाने के बाद dataset में शामिल हो जाती हैं।

**प्रतिक्रिया**

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

#### Zip अपलोड करें

`PUT` zip file को लौटाए गए `signedUrl`पर अपलोड करें। Content-Type होना चाहिए `application/zip`.

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

अपलोड पूरा होते ही प्रोसेसिंग अपने-आप शुरू हो जाती है।

#### Task Status को poll करें

एक `GET` से `/:workspace/upload/zip/:taskId`.

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

response मानक [Async Tasks](https://docs.roboflow.com/reference/platform/rest-api/async-tasks) shape का अनुसरण करती है। जब task पूरा हो जाता है, `result` में प्रति-image सारांश के साथ parsing के दौरान सामने आई कोई भी warnings या errors शामिल होते हैं।

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

प्रति-image अधिकतम 100 errors और 100 warnings रिपोर्ट किए जाते हैं। zip के अंदर videos और PDFs unsupported-format warnings के रूप में दिखते हैं और छोड़ दिए जाते हैं।

#### सीमाएँ

* अधिकतम zip size: 2 GB
* प्रति zip अधिकतम files: 10,000

#### त्रुटियाँ

```
- 400 - zip malformed है या size या file count सीमाओं से अधिक है।
- 401 - API key अनुपस्थित या अमान्य है।
- 404 - workspace, project, या task मौजूद नहीं है, या किसी अन्य workspace का है।
```

## CLI

आप Roboflow CLI का उपयोग करके images और/या annotations वाले datasets अपलोड कर सकते हैं।

हमने एक वीडियो तैयार किया है जो बताता है कि dataset कैसे अपलोड करें:

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

### डायरेक्टरी अपलोड करें

उपयोग करें `roboflow image upload` किसी directory path के साथ, parallel per-image uploads का उपयोग करके dataset को bulk-upload करने के लिए:

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

या शॉर्टहैंड alias का उपयोग करें:

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

CLI अपने-आप पहचान लेता है कि path file, directory, या `.zip` file है। एक directory bulk import को parallel per-image uploads के साथ ट्रिगर करती है, जब तक कि आप `--zip-upload`.

#### विकल्प

| फ़्लैग                | विवरण                                                |
| --------------------- | ---------------------------------------------------- |
| `-p`, `--project`     | प्रोजेक्ट ID (आवश्यक)                                |
| `-c`, `--concurrency` | समांतर अपलोड की संख्या (डिफ़ॉल्ट: 10)                |
| `-b`, `--batch`       | uploads को समूहित करने के लिए batch नाम              |
| `-r`, `--retries`     | असफल अपलोड को N बार फिर से प्रयास करें (डिफ़ॉल्ट: 0) |
| `-s`, `--split`       | सभी अपलोड की गई images के लिए split को override करें |

options के साथ उदाहरण:

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

### एक Zip फ़ाइल अपलोड करें

बड़े datasets के लिए, या जब आपका dataset पहले से ही एक `.zip` file के रूप में पैकेज किया हुआ हो, zip uploads का उपयोग करें। Zip uploads Roboflow के asynchronous zip upload flow का उपयोग करते हैं। डिफ़ॉल्ट रूप से, CLI zip file अपलोड करता है और प्रोसेसिंग पूरी होने तक प्रतीक्षा करता है।

यही flow है जिसका दस्तावेज़ीकरण [REST API](#rest-api) ऊपर किया गया है; CLI आपके लिए signed-URL upload और task polling संभालता है।

मौजूदा zip file अपलोड करने के लिए:

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

किसी local directory को client-side zip करने और async zip flow के साथ उसे अपलोड करने के लिए, उपयोग करें `--zip-upload` प्राथमिक command के साथ:

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

#### Zip Uploads के लिए विकल्प

| फ़्लैग            | विवरण                                                                                 |
| ----------------- | ------------------------------------------------------------------------------------- |
| `-p`, `--project` | प्रोजेक्ट ID (आवश्यक)                                                                 |
| `--zip-upload`    | किसी directory को client-side zip करें और async zip upload flow के साथ उसे अपलोड करें |
| `--no-wait`       | प्रोसेसिंग समाप्त होने की प्रतीक्षा करने के बजाय zip अपलोड होते ही तुरंत वापस लौटें   |
| `-b`, `--batch`   | uploads को समूहित करने के लिए batch नाम                                               |
| `-s`, `--split`   | Split set: train, valid, या test                                                      |
| `-t`, `--tag`     | अल्पविराम से अलग किए गए टैग नाम                                                       |

zip upload options के साथ उदाहरण:

```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 response में asynchronous task ID शामिल है:

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

Zip uploads समर्थन नहीं करते `--is-prediction`। prediction uploads के लिए regular per-image upload flow का उपयोग करें।

### समर्थित प्रोजेक्ट प्रकार

आप निम्न project types के लिए data अपलोड कर सकते हैं:

* ऑब्जेक्ट डिटेक्शन
* सिंगल-लेबल क्लासिफिकेशन
* मल्टी-लेबल क्लासिफिकेशन
* इंस्टेंस सेगमेंटेशन
* सेमांटिक सेगमेंटेशन
* कीपॉइंट डिटेक्शन

### समर्थित data.yaml Formats

CLI dataset uploads के दौरान `data.yaml` files में list-style और key-value pair formatted class name mappings, दोनों को समर्थन देता है:

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

या

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

### JSON आउटपुट

Automation के लिए, उपयोग करें `--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) और यह इन tools के साथ dataset अपलोड कर सकता है: Zip में केवल images होती हैं, इसलिए labels दूसरे चरण में सहेजे जाते हैं।

<table data-search="false"><thead><tr><th width="290">टूल</th><th>विवरण</th></tr></thead><tbody><tr><td><code>image_upload</code></td><td>local image files को zip के माध्यम से project में अपलोड करें। केवल images, कोई annotation files नहीं।</td></tr><tr><td><code>image_upload_status</code></td><td>image zip upload task की स्थिति जाँचें।</td></tr><tr><td><code>annotations_save</code></td><td>किसी ऐसी image के लिए annotation सहेजें जो पहले से अपलोड की जा चुकी है।</td></tr></tbody></table>

## अगला चरण

* किसी भी बिना-एनोटेशन वाली images को label करें ताकि उन्हें training के लिए उपयोग किया जा सके। देखें [Roboflow Annotate का परिचय](/datasets/hi/annotate/annotate/annotation-tools.md).
* अपनी images को एक trainable snapshot में बदलें। देखें [डेटासेट संस्करण बनाएं](/datasets/hi/versions/dataset-versions/create-a-dataset-version.md).
