> 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 के साथ इमेजों और एनोटेशनों का एक संरचित डेटासेट Roboflow प्रोजेक्ट में अपलोड करें।

यह पृष्ठ एक मौजूदा लेबलयुक्त डेटासेट — छवियाँ और उनकी एनोटेशन — का बल्क इम्पोर्ट Python SDK, REST zip endpoint, या CLI का उपयोग करके कवर करता है। API के माध्यम से अलग-अलग छवियाँ अपलोड और प्रबंधित करने के लिए, देखें [छवियों का प्रबंधन करें](/datasets/hi/manage/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",                 # प्रोजेक्ट आईडी (यदि मौजूद नहीं है तो बनाई जाएगी)
    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) - गंतव्य प्रोजेक्ट की आईडी। यदि यह मौजूद नहीं है, तो बनाई जाएगी।
* `num_workers` (int, default `10`) - समांतर अपलोड। हम 25 से अधिक न करने की सलाह देते हैं।
* `project_license` (str, default `"MIT"`) - नए बनाए गए प्रोजेक्ट के लिए लाइसेंस। इसे सेट करें `"Private"` निजी प्रोजेक्ट्स के लिए।
* `project_type` (str, default `"object-detection"`) - नए बनाए गए प्रोजेक्ट का प्रकार। यदि प्रोजेक्ट पहले से मौजूद है, तो इसे अनदेखा किया जाता है।
* `batch_name` (str, optional) - इन अपलोड्स को इस नाम वाले बैच के अंतर्गत समूहित करें। लेबलिंग राउंड के स्रोत को ट्रैक करने के लिए उपयोगी।
* `num_retries` (int, default `0`) - अस्थायी अपलोड विफलताओं के लिए पुनः प्रयास करें।
* `is_prediction` (bool, default `False`) - इसे सेट करें `True` ताकि एनोटेशन को ग्राउंड ट्रुथ के बजाय समीक्षा की प्रतीक्षा कर रही मॉडल प्रेडिक्शन्स के रूप में अपलोड किया जाए।

### प्रेडिक्शन्स कहाँ पहुँचती हैं

जब आप किसी ऐसी छवि पर प्रेडिक्शन सेव करते हैं जो अभी भी किसी अपलोड बैच में है, तो Roboflow उस छवि को उस बैच के लिए एक समीक्षा जॉब में स्थानांतरित कर देता है। लेबल्स को ग्राउंड ट्रुथ बनने से पहले अनुमोदित या ठीक करने के लिए जॉब खोलें।

यदि छवि पहले से किसी एनोटेशन जॉब को असाइन है, तो वह उसी जॉब में रहती है।

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

COCO डेटासेट के लिए:

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

जो फ़ोल्डर प्रत्येक छवि को रखता है, वही उसका split सेट करता है। केवल ये सटीक फ़ोल्डर नाम मान्य हैं: `train`, `training`, `valid`, `validation`, `val`, `test`, और `testing`. केस मायने नहीं रखता, और फ़ाइल नामों को अनदेखा किया जाता है, इसलिए नाम की कोई छवि `test_image.jpg` test split में नहीं जाएगी और नाम वाला फ़ोल्डर `train2017` कोई split सेट नहीं करता। जब कोई फ़ोल्डर मेल नहीं खाता, तो छवि अपलोड के डिफ़ॉल्ट split पर वापस जाती है: zip uploads के लिए वह है `split` आपके अनुरोध में मान, जो डिफ़ॉल्ट रूप से `train`.

VOC के लिए, प्रत्येक छवि के साथ मिलती-जुलती `.xml` फ़ाइलें डालें। YOLO के लिए, मिलती-जुलती `.txt` फ़ाइलें और एक `data.yaml` डालें, जिसमें class list का विवरण हो।

### SHA-256 डिडुप (v1.3.6+) पर नोट

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

## REST API

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

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

यह endpoint ऐसे zips स्वीकार करता है जिनमें Roboflow dataset upload tools (COCO, YOLO, Pascal VOC, आदि) द्वारा समर्थित किसी भी फ़ॉर्मेट में छवियाँ और एनोटेशन हों। Classification datasets के लिए फ़ोल्डर नाम class labels के रूप में उपयोग किए जाते हैं।

#### प्रवाह

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

#### अपलोड प्रारंभ करें

एक `POST` को भेजें `/:workspace/:project/upload/zip`. प्रतिक्रिया में एक 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) - अपलोड की गई छवियों को इस नाम वाले बैच के अंतर्गत समूहित करें।
- annotationOverwrite (boolean, optional) - उन छवियों की एनोटेशन बदल दें जो पहले से प्रोजेक्ट में हैं। डिफ़ॉल्ट false।
```

डिफ़ॉल्ट रूप से, जो छवि पहले से प्रोजेक्ट में है वह अपनी मौजूदा एनोटेशन रखती है, और उसके लिए zip की एनोटेशन को छोड़ दिया जाता है। `annotationOverwrite` को भेजें `true` उन्हें बदलने के लिए। Classification projects हमेशा लेबल बदलते हैं, इसलिए वे डिफ़ॉल्ट को अनदेखा करते हैं और `annotationOverwrite: false` को 400 के साथ अस्वीकार करते हैं।

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

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

```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
```

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

#### Task स्थिति पोल करें

एक `GET` को भेजें `/:workspace/upload/zip/:taskId`.

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

प्रतिक्रिया मानक का अनुसरण करती है [Async Tasks](https://docs.roboflow.com/reference/platform/rest-api/async-tasks) रूप। जब task पूरा हो जाता है, `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 key अनुपस्थित या अमान्य है।
- 404 - workspace, project, या task मौजूद नहीं है, या किसी अन्य workspace का है।
```

## CLI

आप Roboflow CLI का उपयोग करके छवियों और/या एनोटेशन वाले डेटासेट अपलोड कर सकते हैं।

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

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

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

उपयोग करें `roboflow image upload` एक directory path के साथ, प्रति-छवि समांतर अपलोड्स के साथ डेटासेट को बल्क-अपलोड करने के लिए:

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

या संक्षिप्त alias का उपयोग करें:

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

CLI स्वतः पहचान लेता है कि path फ़ाइल है, डायरेक्टरी है, या `.zip` फ़ाइल। यदि आप `--zip-upload`.

#### विकल्प

| फ़्लैग                | विवरण                                                  |
| --------------------- | ------------------------------------------------------ |
| `-p`, `--project`     | प्रोजेक्ट आईडी (आवश्यक)                                |
| `-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 uploads का उपयोग करें। Zip uploads Roboflow के asynchronous zip upload flow का उपयोग करते हैं। डिफ़ॉल्ट रूप से, CLI zip फ़ाइल अपलोड करता है और प्रोसेसिंग समाप्त होने तक प्रतीक्षा करता है।

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

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

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

क्लाइंट-साइड पर एक स्थानीय डायरेक्टरी को zip करने और उसे async zip flow के साथ अपलोड करने के लिए, उपयोग करें `--zip-upload` मुख्य कमांड के साथ:

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

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

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

Zip upload विकल्पों के साथ उदाहरण:

```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 प्रतिक्रिया में 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 के लिए सामान्य प्रति-छवि upload flow का उपयोग करें।

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

आप निम्नलिखित प्रोजेक्ट प्रकारों के लिए डेटा अपलोड कर सकते हैं:

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

### समर्थित data.yaml फ़ॉर्मेट

CLI डेटासेट अपलोड के दौरान `data.yaml` फ़ाइलों में सूची-शैली और key-value pair फ़ॉर्मेट वाली class name mappings दोनों का समर्थन करता है:

```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 में केवल छवियाँ होती हैं, इसलिए labels दूसरे चरण में सहेजे जाते हैं।

<table data-search="false"><thead><tr><th width="290">टूल</th><th>विवरण</th></tr></thead><tbody><tr><td><code>image_upload</code></td><td>zip के माध्यम से किसी प्रोजेक्ट में स्थानीय image files अपलोड करें। केवल 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>

## अगले चरण

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