> 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 का उपयोग करके कवर करता है। 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",                 # प्रोजेक्ट 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` ताकि एनोटेशन को ground truth के बजाय समीक्षा की प्रतीक्षा कर रहे मॉडल प्रेडिक्शन के रूप में अपलोड किया जा सके।

### अपेक्षित निर्देशिका संरचना

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 dedup (v1.3.6+) पर नोट

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

## REST API

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

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

यह endpoint Roboflow dataset upload tools (COCO, YOLO, Pascal VOC, आदि) द्वारा समर्थित किसी भी प्रारूप में images और annotations वाली zips स्वीकार करता है। 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` जब तक task पूरा न हो जाए, पोल करने के लिए।

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

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

जिन zips में एनोटेशन होते हैं, वे एक एनोटेशन जॉब में जाते हैं जिसका नाम होता है `batchName`या यदि आप इसे छोड़ देते हैं तो "Uploaded via API"। हर अपलोड का अपना अलग जॉब होता है, भले ही आप नाम दोबारा उपयोग करें। यदि workspace में [समीक्षा मोड](/datasets/hi/annotate/annotate/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
```

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

#### Task Status पोल करें

एक भेजें `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) रूप का अनुसरण करती है। जब task पूरा हो जाता है, `result` में प्रति-छवि सारांश के साथ-साथ parsing के दौरान मिली कोई भी चेतावनी या त्रुटियाँ शामिल होती हैं।

```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, प्रोजेक्ट, या task मौजूद नहीं है, या किसी अन्य workspace का है।
```

## CLI

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

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

{% 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 के asynchronous zip upload flow का उपयोग करते हैं। डिफ़ॉल्ट रूप से, CLI zip फ़ाइल अपलोड करता है और प्रोसेसिंग पूरी होने तक प्रतीक्षा करता है।

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

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

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

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

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

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

| ध्वज              | विवरण                                                                                     |
| ----------------- | ----------------------------------------------------------------------------------------- |
| `-p`, `--project` | प्रोजेक्ट ID (आवश्यक)                                                                     |
| `--zip-upload`    | किसी निर्देशिका को client-side पर 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 अपलोड समर्थन नहीं करते `--is-prediction`. prediction uploads के लिए नियमित प्रति-छवि अपलोड flow का उपयोग करें।

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

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

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

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

CLI dataset uploads के दौरान `data.yaml` फ़ाइलों में list-style और 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"}
```

## अगले चरण

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