> 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, वैकल्पिक) - इन अपलोड्स को एक नामित बैच के अंतर्गत समूहित करें। लेबलिंग राउंड के स्रोत को ट्रैक करने के लिए उपयोगी।
* `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
```

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

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

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

## REST API

### डेटासेट ज़िप अपलोड करें

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

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

#### प्रवाह

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

#### अपलोड आरंभ करें

एक `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, वैकल्पिक) - train, valid, या test में से एक। डिफ़ॉल्ट train है।
- batchName (string, वैकल्पिक) - अपलोड की गई छवियों को इस नाम के बैच के अंतर्गत समूहित करें।
- annotationOverwrite (boolean, वैकल्पिक) - प्रोजेक्ट में पहले से मौजूद छवियों पर एनोटेशन बदल दें। डिफ़ॉल्ट false है।
```

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

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

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

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

#### ज़िप अपलोड करें

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

प्रतिक्रिया मानक [Async Tasks](https://docs.roboflow.com/reference/platform/rest-api/async-tasks) आकार का अनुसरण करती है। जब कार्य पूरा हो जाता है, `परिणाम` में प्रति-छवि सारांश के साथ-साथ पार्सिंग के दौरान मिली कोई भी चेतावनी या त्रुटियाँ शामिल होती हैं।

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

अधिकतम 100 प्रति-छवि त्रुटियाँ और 100 चेतावनियाँ रिपोर्ट की जाती हैं। zip के अंदर मौजूद videos और PDFs को असमर्थित-फ़ॉर्मेट चेतावनियों के रूप में दिखाया जाता है और छोड़ दिया जाता है।

#### सीमाएँ

* अधिकतम zip आकार: 2 GB
* प्रति zip अधिकतम फ़ाइलें: 10,000

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

```
- 400 - zip गलत तरीके से बना है या आकार या फ़ाइल संख्या सीमाओं से अधिक है।
- 401 - API key गायब है या अमान्य है।
- 404 - workspace, project, या task मौजूद नहीं है, या किसी अन्य workspace से संबंधित है।
```

## CLI

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

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

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

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

उपयोग करें `roboflow image upload` किसी directory path के साथ parallel प्रति-छवि 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` फ़ाइल है। directory बल्क import को parallel प्रति-छवि uploads के साथ ट्रिगर करती है, जब तक कि आप `--zip-upload`.

#### विकल्प

| फ़्लैग                | विवरण                                                |
| --------------------- | ---------------------------------------------------- |
| `-p`, `--project`     | 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 फ़ाइल अपलोड करें

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

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

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

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

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

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

#### Zip अपलोड्स के लिए विकल्प

| फ़्लैग            | विवरण                                                                                 |
| ----------------- | ------------------------------------------------------------------------------------- |
| `-p`, `--project` | Project ID (आवश्यक)                                                                   |
| `--zip-upload`    | किसी directory को client-side zip करें और उसे async zip upload flow के साथ अपलोड करें |
| `--no-wait`       | प्रोसेसिंग समाप्त होने की प्रतीक्षा करने के बजाय zip अपलोड होते ही तुरंत लौट आएँ      |
| `-b`, `--batch`   | अपलोड्स को समूहित करने के लिए बैच का नाम                                              |
| `-s`, `--split`   | Split set: 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 अपलोड्स समर्थन नहीं करते `--is-prediction`। prediction uploads के लिए नियमित प्रति-छवि upload flow का उपयोग करें।

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

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

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

### समर्थित data.yaml प्रारूप

CLI डेटासेट अपलोड्स के दौरान `data.yaml` फ़ाइलों में सूची-शैली और key-value जोड़ी प्रारूपित 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) से कनेक्ट करें, और वह इन टूल्स के साथ एक डेटासेट अपलोड कर सकता है: ज़िप में केवल छवियाँ होती हैं, इसलिए लेबल दूसरे चरण में सहेजे जाते हैं।

<table data-search="false"><thead><tr><th width="290">टूल</th><th>विवरण</th></tr></thead><tbody><tr><td><code>image_upload</code></td><td>एक zip के माध्यम से स्थानीय इमेज फ़ाइलें प्रोजेक्ट पर अपलोड करें। केवल छवियाँ, कोई annotation फ़ाइल नहीं।</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>पहले से अपलोड की गई छवि के लिए एक annotation सहेजें।</td></tr></tbody></table>

## अगले चरण

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