> 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/deployment/hi/monitoring-and-analytics/vision-events/create-a-vision-event.md).

# एक Vision Event बनाएँ

अपने डिप्लॉय किए गए model से एक observation लॉग करने के लिए HTTP API के माध्यम से एक single Vision Event रिकॉर्ड करें।

## के बारे में

एक [विज़न इवेंट](/deployment/hi/monitoring-and-analytics/vision-events.md) आपके तैनात कंप्यूटर विज़न मॉडल द्वारा देखी गई किसी चीज़ का एक समय-चिह्नित रिकॉर्ड है — उदाहरण के लिए, कोई पहचाना गया दोष या इन्वेंट्री गिनती — साथ ही वैकल्पिक छवियाँ, भविष्यवाणियाँ, और कस्टम मेटाडेटा। यह पेज दिखाता है कि एकल इवेंट को कैसे रिकॉर्ड किया जाए, ताकि वह आपके खोजने योग्य, फ़िल्टर करने योग्य उत्पादन इतिहास का हिस्सा बन जाए। एक बार में कई इवेंट ingest करने के लिए, [बैच में विज़न इवेंट बनाएँ](/deployment/hi/monitoring-and-analytics/vision-events/batch-create-vision-events.md)का उपयोग करें। यदि आपकी deployment का क्लाउड तक कोई रास्ता नहीं है, तो देखें [एक विज़न इवेंट बंडल अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-bundle.md).

## HTTP API

अपने कंप्यूटर विज़न deployment से एक observation रिकॉर्ड करने के लिए एकल विज़न इवेंट बनाएँ।

**आवश्यक scope:** `vision-events:write` या `device:update`

{% openapi src="/files/84d8c4861456d267a4e6a39f6a1609041832d8bb" path="/vision-events" method="post" %}
[openapi.yaml](https://2297977984-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FoksNmwps1HmYr8TqHDnX%2Fuploads%2Fgit-blob-dca3d4f164ead71d7f0d6953b9ac101065bf210f%2Fopenapi.yaml?alt=media)
{% endopenapi %}

### उदाहरण अनुरोध

```bash
curl -X POST "https://api.roboflow.com/vision-events" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "eventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "eventType": "quality_check",
    "useCaseId": "a1b3c8e1",
    "timestamp": "2024-01-15T10:30:00Z",
    "eventData": {
      "result": "fail",
      "externalId": "batch-001"
    },
    "customMetadata": {
      "line": "A1",
      "operator": "John Doe",
      "temperature": 72.5
    }
  }'
```

### अनुरोध बॉडी पैरामीटर

{% hint style="info" %}
प्रत्येक इवेंट के पास एक वैश्विक रूप से अद्वितीय `eventId`होना चाहिए। हम टकराव से बचने के लिए UUID (v4) का उपयोग करने की सलाह देते हैं। डुप्लिकेट event IDs पहले ingest किए गए इवेंट्स को अधिलेखित कर देंगे।
{% endhint %}

**आवश्यक फ़ील्ड्स:**

* **`eventId`** (string, max 256 characters): इवेंट के लिए वैश्विक रूप से अद्वितीय पहचानकर्ता। UUID (v4) का उपयोग करें।
* **`eventType`** (string): इनमें से एक: `quality_check`, `inventory_count`, `safety_alert`, `custom`, या `operator_feedback`.
* **`useCaseId`** (string, max 256 characters): वह use case जिससे यह इवेंट संबंधित है। देखें [यूज़ केस](/deployment/hi/monitoring-and-analytics/vision-events/use-cases.md) यह जानने के लिए कि use cases कैसे बनाए और प्रबंधित करें।
* **`timestamp`** (string, ISO 8601): जब इवेंट हुआ था। यह एक साल पहले से लेकर कल तक के बीच होना चाहिए।
* **`eventData`** (object): प्रकार-विशिष्ट इवेंट डेटा। देखें [इवेंट डेटा स्कीमाएँ](#event-data-schemas) नीचे प्रत्येक इवेंट प्रकार के लिए आवश्यक संरचना दी गई है।

**वैकल्पिक फ़ील्ड्स:**

* **`deviceId`** (string, max 256): उस डिवाइस का पहचानकर्ता जिसने इवेंट बनाया।
* **`streamId`** (string, max 256): वीडियो स्ट्रीम का पहचानकर्ता।
* **`workflowId`** (string, max 256): उस workflow का पहचानकर्ता जिसने इवेंट बनाया।
* **`workflowVersion`** (string, max 64): workflow का संस्करण।
* **`images`** (array, max 1000): एनोटेशन वाली image objects की array। देखें [छवि ऑब्जेक्ट्स](#image-objects) नीचे।
* **`displayImagePosition`** (number, 0-999): image array में वह index स्थिति जिसे primary display image के रूप में उपयोग करना है। उदाहरण के लिए, `images` पहली छवि के लिए, `0` दूसरी के लिए, `1` और इसी तरह।
* **`videos`** (array, max 4): इवेंट से संलग्न वीडियो क्लिप्स। देखें [वीडियो ऑब्जेक्ट्स](#video-objects) नीचे।
* **`customMetadata`** (object, max 100 keys): कस्टम मेटाडेटा के लिए key-value pairs। देखें [कस्टम मेटाडेटा](#custom-metadata) नीचे।
* **`comment`** (string, max 1000): इवेंट के बारे में एक नोट। With `operator_feedback`, इसमें समीक्षक का नोट होता है।

### इवेंट डेटा स्कीमाएँ

की संरचना `eventData` पर निर्भर करती है `eventType`:

{% tabs %}
{% tab title="quality\_check" %}

```json
{
  "result": "pass",
  "externalId": "batch-001"
}
```

* **`result`** (string, optional): `"pass"` या `"fail"`.
* **`externalId`** (string, max 1000, optional): बाहरी संदर्भ ID।
  {% endtab %}

{% tab title="inventory\_count" %}

```json
{
  "location": "warehouse-a",
  "itemCount": 42,
  "itemType": "pallets",
  "externalId": "inv-2024-001"
}
```

* **`location`** (string, max 1000, optional): गिनती कहाँ ली गई थी।
* **`itemCount`** (integer, >= 0, optional): गिने गए आइटमों की संख्या।
* **`itemType`** (string, max 1000, optional): गिने गए आइटम का प्रकार।
* **`externalId`** (string, max 1000, optional): बाहरी संदर्भ ID।
  {% endtab %}

{% tab title="safety\_alert" %}

```json
{
  "alertType": "no_hardhat",
  "severity": "high",
  "description": "Zone B3 में आवश्यक PPE के बिना एक श्रमिक का पता चला।",
  "externalId": "alert-2024-001"
}
```

* **`alertType`** (string, max 256, optional): चेतावनी का प्रकार (अक्षरांकीय, underscores, और dashes)।
* **`severity`** (string, optional): `"low"`, `"medium"`, या `"high"`.
* **`description`** (string, max 10000, optional): चेतावनी का विवरण।
* **`externalId`** (string, max 1000, optional): बाहरी संदर्भ ID।
  {% endtab %}

{% tab title="custom" %}

```json
{
  "value": "कस्टम इवेंट डेटा as a string",
  "externalId": "custom-2024-001"
}
```

* **`value`** (string, max 10000, optional): मुक्त-रूप इवेंट डेटा।
* **`externalId`** (string, max 1000, optional): बाहरी संदर्भ ID।
  {% endtab %}

{% tab title="operator\_feedback" %}

```json
{
  "relatedEventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "feedback": "incorrect"
}
```

* **`relatedEventId`** (string, required): उस इवेंट का event ID (UUID), जिसके बारे में यह फ़ीडबैक है।
* **`feedback`** (string, required): `"correct"`, `"incorrect"`, या `"inconclusive"`.

समीक्षक का नोट शीर्ष-स्तरीय `comment` फ़ील्ड में जाता है, न कि `eventData`.
{% endtab %}
{% endtabs %}

### छवि ऑब्जेक्ट्स

इवेंट में छवियाँ संलग्न करने के लिए, आपको पहले प्रत्येक छवि को [विज़न इवेंट इमेज अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-image.md#http-api) एंडपॉइंट का उपयोग करके अपलोड करना होगा ताकि एक `sourceId`प्राप्त हो सके। `images` array में प्रत्येक image object एक एनोटेटेड (output) छवि का प्रतिनिधित्व करता है। यदि आप मूल बिना-एनोटेशन वाली (input) छवि को भी संबद्ध करना चाहते हैं, तो उसे अलग से अपलोड करें और उसका `sourceId` को `inputSourceId`.

```json
{
  "label": "inspection-photo",
  "sourceId": "img-source-123",
  "inputSourceId": "camera-1",
  "objectDetections": [
    {
      "class": "defect",
      "x": 100,
      "y": 200,
      "width": 50,
      "height": 30,
      "confidence": 0.95
    }
  ],
  "classifications": [
    {
      "class": "damaged",
      "confidence": 0.87
    }
  ],
  "instanceSegmentations": [
    {
      "class": "crack",
      "x": 100,
      "y": 200,
      "width": 50,
      "height": 30,
      "confidence": 0.92,
      "points": [[100, 200], [120, 210], [110, 230]]
    }
  ],
  "metadata": {
    "verdict": "pass",
    "angle": 42.5
  },
  "keypoints": [
    {
      "class": "joint",
      "x": 100,
      "y": 200,
      "width": 50,
      "height": 30,
      "confidence": 0.88,
      "keypoints": [
        { "id": 0, "x": 105, "y": 205, "occluded": false },
        { "id": 1, "x": 115, "y": 215 }
      ]
    }
  ]
}
```

**छवि फ़ील्ड्स:**

* **`label`** (string, optional): छवि के लिए एक लेबल।
* **`sourceId`** (string, optional): वह `sourceId` जो [एनोटेटेड छवि अपलोड करने पर लौटाया जाता है](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-image.md#http-api).
* **`inputSourceId`** (string, optional): वह `sourceId` मूल बिना-एनोटेशन वाली (input) छवि अपलोड करने पर लौटाया जाता है।
* **`objectDetections`** (array, max 1000, optional): bounding box detections साथ `class`, `x`, `y`, `width`, `height`, और `confidence` (0-1).
* **`classifications`** (array, max 1000, optional): classification परिणाम साथ `class` और `confidence` (0-1).
* **`instanceSegmentations`** (array, max 1000, optional): segmentation परिणाम जिनमें bounding box फ़ील्ड्स के साथ `points` (array of `[x, y]` जोड़े, न्यूनतम 3).
* **`keypoints`** (array, max 1000, optional): keypoint detections जिनमें bounding box फ़ील्ड्स के साथ `keypoints` (ऐसे objects की array जिनमें `id`, `x`, `y`, और वैकल्पिक `occluded`, प्रति detection न्यूनतम 1 keypoint).
* **`metadata`** (object, max 100 keys, optional): इस एक छवि के बारे में key-value pairs। देखें [छवि मेटाडेटा](#image-metadata) नीचे।

### छवि मेटाडेटा

का उपयोग करें `metadata` को image object पर उन मानों को रिकॉर्ड करने के लिए जो केवल उसी छवि से संबंधित हैं, जैसे pass/fail verdict, serial number, या camera angle. मान इवेंट detail view में छवि के साथ दिखाए जाते हैं। पूरे इवेंट का वर्णन करने वाले मान संलग्न करने के लिए, इसके बजाय [कस्टम मेटाडेटा](#custom-metadata) का उपयोग करें।

**सीमाएँ:**

* कुंजियाँ इस पैटर्न से मेल खानी चाहिए `[a-zA-Z0-9_ -]+` (अक्षर, अंक, अंडरस्कोर, हाइफ़न, और स्पेस), अधिकतम 128 वर्ण।
* प्रति छवि अधिकतम 100 कुंजियाँ, और प्रति इवेंट अधिकतम 200 अलग-अलग कुंजियाँ।
* मान string (अधिकतम 1000 वर्ण), number, या boolean होने चाहिए। Nested objects और arrays अस्वीकार किए जाते हैं।

जो कुंजियाँ इन नियमों का उल्लंघन करती हैं, उन्हें हटा दिया जाता है और `warnings` array में रिपोर्ट किया जाता है। छवि का शेष भाग फिर भी संग्रहीत रहता है।

यह देखने के लिए कि आपके इवेंट किन कुंजियों का उपयोग करते हैं, कॉल करें [छवि मेटाडेटा स्कीमा प्राप्त करें](/deployment/hi/monitoring-and-analytics/vision-events/get-image-metadata-schema.md)। Image metadata प्रदर्शन और discovery के लिए है। आप इसमें फ़िल्टर नहीं कर सकते [इवेंट क्वेरीज़](/deployment/hi/monitoring-and-analytics/vision-events/query-events.md) अभी तक।

### वीडियो ऑब्जेक्ट्स

वीडियो क्लिप संलग्न करने के लिए, पहले इसे अपलोड करें [विज़न इवेंट वीडियो अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-video.md#http-api) ताकि एक `videoId`प्राप्त हो सके। आप वीडियो के अभी भी प्रोसेस होने के दौरान इवेंट बना सकते हैं।

```json
{
  "videos": [
    { "sourceId": "Kq4vX8mNp2RtY6wZ1bCd", "label": "line-3 camera" }
  ]
}
```

**वीडियो फ़ील्ड्स:**

* **`sourceId`** (string, required, max 256): वह `videoId` जो आपने upload तैयार करते समय प्राप्त किया था।
* **`label`** (string, optional, max 256): इवेंट detail view में वीडियो के साथ दिखाया गया पाठ। इसके बिना, dashboard क्लिप्स का नाम "Clip 1", "Clip 2", और इसी तरह रखता है।

एक इवेंट में अधिकतम 4 वीडियो होते हैं। अतिरिक्त entries, मान्य `sourceId`बिना entries, और अन्य फ़ील्ड्स (जैसे: `duration`) हटा दिए जाते हैं और `warnings` array में रिपोर्ट किए जाते हैं। एक `sourceId` जो आपके workspace में Vision Events के लिए तैयार किए गए वीडियो से मेल नहीं खाता, रखा जाता है, लेकिन एक `entity_not_found` चेतावनी लौटाता है और नहीं चलता।

### कस्टम मेटाडेटा

आप प्रत्येक इवेंट में अधिकतम 100 key-value pairs की कस्टम मेटाडेटा संलग्न कर सकते हैं। कस्टम मेटाडेटा [विज़न इवेंट्स क्वेरी करें](/deployment/hi/monitoring-and-analytics/vision-events/query-events.md#http-api) एंडपॉइंट के माध्यम से queryable है।

**सीमाएँ:**

* कुंजियाँ इस पैटर्न से मेल खानी चाहिए `[a-zA-Z0-9_ -]+` (अक्षर, अंक, अंडरस्कोर, हाइफ़न, और स्पेस), अधिकतम 100 वर्ण।
* स्ट्रिंग मान 1000 वर्ण तक सीमित हैं।
* संख्यात्मक मान 6 decimal places तक समर्थित हैं।
* Boolean मान समर्थित हैं।

```json
{
  "customMetadata": {
    "production_line": "A1",
    "shift": "morning",
    "temperature": 72.5,
    "is_overtime": false
  }
}
```

### उदाहरण प्रतिक्रिया

{% tabs %}
{% tab title="201" %}

```json
{
  "eventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "created": true
}
```

{% endtab %}

{% tab title="400" %}

```json
{
  "error": "eventType is required"
}
```

{% endtab %}

{% tab title="403" %}

```json
{
  "error": "इस संसाधन के लिए अपर्याप्त अनुमतियाँ।"
}
```

{% endtab %}
{% endtabs %}

### मान्यकरण और चेतावनियाँ

Vision Events API eager ingestion का उपयोग करता है। केवल चार आवश्यक फ़ील्ड्स (`eventId`, `eventType`, `useCaseId`, `timestamp`) को सख्ती से मान्य किया जाता है। यदि ये पास हो जाएँ, तो इवेंट हमेशा स्वीकार और संग्रहीत किया जाता है, भले ही अन्य फ़ील्ड्स में त्रुटियाँ हों।

गैर-आवश्यक फ़ील्ड्स से संबंधित कोई भी समस्या प्रतिक्रिया में `warnings` array के रूप में लौटाई जाती है, अस्वीकृति का कारण बनने के बजाय। इसमें शामिल है:

* के भीतर आवश्यक फ़ील्ड्स का अभाव `eventData` (जैसे, `relatedEventId` के लिए `operator_feedback`)
* के लिए अमान्य मान `eventData` फ़ील्ड्स (जैसे, के लिए गलत enum value `severity`)
* अपरिचित फ़ील्ड्स जो स्कीमा का हिस्सा नहीं हैं

जब चेतावनियाँ मौजूद होती हैं, तो अमान्य `eventData` को एक खाली object के रूप में संग्रहीत किया जाता है `{}`, लेकिन इवेंट स्वयं फिर भी बनाया जाता है।

```json
{
  "eventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "created": true,
  "warnings": [
    {
      "type": "any.required",
      "path": "eventData.relatedEventId",
      "value": null,
      "valueType": "object"
    }
  ]
}
```

प्रतिक्रिया में एक `deprecations` array भी शामिल हो सकता है यदि deprecated फ़ील्ड नामों का उपयोग किया गया हो।

## Python SDK

अपने कंप्यूटर विज़न deployment से एक observation रिकॉर्ड करने के लिए एकल विज़न इवेंट बनाएँ।

```python
import roboflow

roboflow.login()

rf = roboflow.Roboflow()
ws = rf.workspace()

ws.write_vision_event({
    "eventId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "eventType": "quality_check",
    "useCaseId": "a1b3c8e1",
    "timestamp": "2024-01-15T10:30:00Z",
    "eventData": {
        "result": "fail",
        "externalId": "batch-001",
    },
    "customMetadata": {
        "line": "A1",
        "operator": "John Doe",
        "temperature": 72.5,
    },
})
```

इवेंट payload को बिना client-side validation के सीधे सर्वर को भेजा जाता है, इसलिए नए इवेंट प्रकार और फ़ील्ड्स SDK अपडेट के बिना काम करते हैं।

**आवश्यक फ़ील्ड्स:**

* **`eventId`** (string, max 256 characters): वैश्विक रूप से अद्वितीय पहचानकर्ता। UUID (v4) का उपयोग करें।
* **`eventType`** (string): इनमें से एक: `quality_check`, `inventory_count`, `safety_alert`, `custom`, या `operator_feedback`.
* **`useCaseId`** (string): वह use case जिससे यह इवेंट संबंधित है।
* **`timestamp`** (string, ISO 8601): जब इवेंट हुआ था।

**वैकल्पिक फ़ील्ड्स:**

* **`eventData`** (dict): प्रकार-विशिष्ट इवेंट डेटा।
* **`deviceId`**, **`streamId`**, **`workflowId`** (string): संदर्भ पहचानकर्ता।
* **`images`** (list): annotations वाली image objects। देखें [विज़न इवेंट इमेज अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-image.md#python-sdk).
* **`videos`** (list): वीडियो objects। प्रत्येक `sourceId` से [विज़न इवेंट वीडियो अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-video.md#http-api).
* **`customMetadata`** (dict): कस्टम मेटाडेटा के अधिकतम 100 key-value pairs।
* **`comment`** (string): इवेंट के बारे में एक नोट, मुख्य रूप से `operator_feedback`.

पूर्ण event schema, प्रति प्रकार event data संरचनाएँ, और image annotation formats के लिए, देखें [REST API संदर्भ](#http-api).
