# Image Metadata

Metadata आपको अपने Roboflow workspace में छवियों के साथ कस्टम की-वैल्यू जोड़े संलग्न करने देता है। Metadata का उपयोग अपने चित्रों के साथ संरचित जानकारी संग्रहीत करने के लिए करें — जैसे कैप्चर शर्तें, डिवाइस आइडेंटिफायर्स, गुणवत्ता स्कोर, या किसी भी डोमेन-विशिष्ट गुण — और फिर उन गुणों के आसपास अपने डेटा को खोजें, फ़िल्टर करें और व्यवस्थित करें।

## अवलोकन

प्रत्येक छवि में किसी भी संख्या में metadata प्रविष्टियाँ हो सकती हैं। एक प्रविष्टि एक **key** (एक नाम जैसे `camera_id`) जो कि एक के साथ जोड़ा जाता है **value** (एक string, number, या boolean).

| Value type | Examples                                    |
| ---------- | ------------------------------------------- |
| String     | `location: "warehouse-3"`, `shift: "night"` |
| Number     | `temperature: 72.5`, `quality_score: 95`    |
| Boolean    | `reviewed: true`, `is_night: false`         |

### उपयोग के मामले

* **कैप्चर संदर्भ** — कैमरा ID, GPS निर्देशांक, मौसम, प्रकाश की स्थिति रिकॉर्ड करें
* **गुणवत्ता ट्रैकिंग** — confidence स्कोर, समीक्षा स्थिति, annotator IDs संलग्न करें
* **डेटा स्लाइसिंग** — लक्षित प्रशिक्षण सेट बनाने के लिए किसी भी गुण के आधार पर अपने डेटासेट को फ़िल्टर करें
* **बाहरी सिस्टम लिंकिंग** — ऐसे पहचानकर्ता संग्रहीत करें जो छवियों को आपके आंतरिक उपकरणों से जोड़ते हैं

## Metadata जोड़ना

आप वेब UI, Python SDK, REST API, या S3 Bucket Mirror के माध्यम से स्वचालित रूप से छवियों में metadata जोड़ सकते हैं।

### वेब एप्लिकेशन

{% stepper %}
{% step %}

### एक छवि खोलें

अपने प्रोजेक्ट में किसी भी छवि को खोलें।
{% endstep %}

{% step %}

### Key और value डालें

Metadata सेक्शन में, पहले इनपुट में एक **key** दूसरे इनपुट में एक **value** डालें।
{% endstep %}

{% step %}

### जोड़ें

दबाएँ **Enter** सहेजने के लिए या Add पर क्लिक करें
{% endstep %}
{% endstepper %}

Values को स्वतः प्रकार के अनुसार पार्स किया जाता है:

| डाला गया मान     | स्टोर किया गया रूप         |
| ---------------- | -------------------------- |
| `front`          | `"front"` (string)         |
| `95`             | `95` (number)              |
| `3.14`           | `3.14` (number)            |
| `true` / `false` | `true` / `false` (boolean) |

<figure><img src="https://2698615118-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fh7L2L0c22TIzCxjxuiU1%2Fimage.png?alt=media&#x26;token=3f3eba92-e194-43b4-bd98-801a038836ff" alt=""><figcaption><p>Annotation Tool का metadata संपादक</p></figcaption></figure>

### Python SDK

जब किसी छवि को अपलोड करते समय एक `metadata` डिक्शनरी पास करें:

```python
import roboflow

rf = roboflow.Roboflow(api_key="YOUR_API_KEY")
project = rf.workspace("your-workspace").project("your-project")

project.upload(
    image_path="image.jpg",
    metadata={
        "camera_id": "cam001",
        "location": "warehouse-3",
        "temperature": 72.5,
        "is_night": False
    }
)
```

### REST API

#### अपलोड के दौरान metadata जोड़ें

एक `metadata` field (JSON-stringified) को multipart form data में शामिल करें जब छवि अपलोड कर रहे हों:

```bash
curl -X POST "https://api.roboflow.com/dataset/your-dataset/upload?api_key=YOUR_API_KEY" \
  -F "name=image.jpg" \
  -F "split=train" \
  -F "file=@image.jpg" \
  -F 'metadata={"camera_id":"cam001","temperature":72.5}'
```

### S3 Bucket Mirror

जब आप [Bucket Mirror](https://docs.roboflow.com/roboflow/roboflow-hi/datasets/adding-data/broken-reference) का उपयोग S3 बकेट से छवियाँ सिंक करने के लिए करते हैं, तो आप प्रत्येक छवि के समान बेस नाम के साथ एक `.json` फाइल प्रत्येक छवि के साथ रखकर metadata संलग्न कर सकते हैं:

```
my-bucket/
  images/
    photo_001.jpg
    photo_001.json      # photo_001.jpg के लिए metadata
    photo_002.jpg
    photo_002.json      # photo_002.jpg के लिए metadata
```

JSON फ़ाइल में आपकी metadata key-value जोड़ों के रूप में होती है:

```json
{
    "camera_id": "cam001",
    "location": "warehouse-3",
    "capture": { "temperature": 72.5, "humidity": 45 }
}
```

**Nested objects स्वतः dot notation का उपयोग करके flatten कर दिए जाते हैं** उपरोक्त उदाहरण से उत्पन्न होता है:

| Key                   | Value           |
| --------------------- | --------------- |
| `camera_id`           | `"cam001"`      |
| `location`            | `"warehouse-3"` |
| `capture.temperature` | `72.5`          |
| `capture.humidity`    | `45`            |

#### Metadata फ़ाइल सीमाएँ

* अधिकतम फ़ाइल आकार: **256 KB**
* वैध JSON होना चाहिए
* `null` और `undefined` मूल्य फ़िल्टर कर दिए जाते हैं

#### अपडेट रणनीतियाँ

Bucket Mirror विभिन्न रणनीतियों का समर्थन करता है कि सिंक की गई metadata उस metadata के साथ कैसे इंटरैक्ट करती है जिसे आपने UI में मैन्युफ़ैक्चर्ड या API के माध्यम से सेट किया है:

| रणनीति                           | व्यवहार                                                                                                                 |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **`mergeBucketWins`** (डिफ़ॉल्ट) | दोनों स्रोतों को मर्ज करता है। की संघर्ष होने पर, बकेट का मान विजयी होता है।                                            |
| **`mergeUserWins`**              | दोनों स्रोतों को मर्ज करता है। की संघर्ष होने पर, उपयोगकर्ता द्वारा सेट किया गया मान विजयी होता है।                     |
| **`overwrite`**                  | बकेट metadata पूरी तरह से सभी मौजूदा metadata को प्रतिस्थापित कर देता है।                                               |
| **`untilFirstChange`**           | जब तक उपयोगकर्ता मैन्युअल रूप से metadata संपादित नहीं करता, तब तक बकेट से सिंक करता है, फिर अपडेट करना बंद कर देता है। |
| **`append`**                     | केवल बकेट से नए की जोड़ता है। कभी भी मौजूदा कीज़ को ओवरराइट नहीं करता।                                                  |

## Metadata द्वारा खोज

Metadata को index किया जाता है और खोज के लिए उपलब्ध है [Asset Library](https://docs.roboflow.com/roboflow/roboflow-hi/datasets/adding-data/broken-reference). खोज बार का उपयोग metadata मानों द्वारा छवियों को फ़िल्टर करने के लिए करें:

```
metadata.camera_id:"cam001"
metadata.quality_score>80
metadata.reviewed:true
```

आप अन्य खोज फ़िल्टरों के साथ metadata फ़िल्टरों को जोड़ सकते हैं:

```
metadata.location:"warehouse-3" AND class:forklift
```

Asset Library आपके workspace में मौजूद चीज़ों के आधार पर metadata कीज़ और मानों के लिए autocomplete भी प्रदान करता है।

## Key नामकरण नियम

Metadata कीज़ को निम्न नियमों का पालन करना चाहिए:

| नियमन        | विवरण                                                            |
| ------------ | ---------------------------------------------------------------- |
| अनुमत वर्ण   | अक्षर (`a-z`, `A-Z`), संख्या (`0-9`), अंडरस्कोर (`_`), डॉट (`.`) |
| पहला वर्ण    | एक अक्षर, संख्या, या अंडरस्कोर होना चाहिए                        |
| निषिद्ध वर्ण | फॉरवर्ड स्लैशेज़ (`/`) की अनुमति नहीं है                         |

वैध कीज़: `camera_id`, `capture.temperature`, `_internal_ref`, `v2_score`

अमान्य कीज़: `camera/id` (शामिल है `/`), `.starts_with_dot` (dot से शुरू होता है `.`), `has spaces` (स्पेस शामिल है)

## Metadata बनाम Tags

दोनों metadata और [tags](https://docs.roboflow.com/roboflow/roboflow-hi/datasets/adding-data/broken-reference) आपको छवियों को व्यवस्थित करने में मदद करते हैं, लेकिन वे अलग उद्देश्यों की सेवा करते हैं:

|                             | Tags                                 | Metadata                                   |
| --------------------------- | ------------------------------------ | ------------------------------------------ |
| **संरचना**                  | सरल लेबल                             | की-वैल्यू जोड़े                            |
| **मूल्य**                   | कोई मूल्य नहीं, सिर्फ़ एक नाम        | String, number, या boolean                 |
| **सबसे अच्छा उपयोग के लिए** | श्रेनीकरण, वर्कफ़्लो स्थिति          | संरचित गुण, माप                            |
| **उदाहरण**                  | `reviewed`, `v2`, `needs-annotation` | `temperature: 72.5`, `camera_id: "cam001"` |

आप एक ही छवि पर दोनों का उपयोग कर सकते हैं। उदाहरण के लिए, किसी छवि को टैग करें `reviewed` और साथ ही इसे स्टोर भी करें `reviewer: "alice"` और `confidence: 0.95` को metadata के रूप में।
