> 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 बनाएँ

## बारे में

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

## HTTP API

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

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

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

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

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

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

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

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

* **`result`** (string, वैकल्पिक): `"pass"` या `"fail"`.
* **`externalId`** (string, अधिकतम 1000, वैकल्पिक): बाहरी संदर्भ ID।
  {% endtab %}

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

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

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

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

```json
{
  "alertType": "no_hardhat",
  "severity": "high",
  "description": "Worker detected without required PPE in zone B3.",
  "externalId": "alert-2024-001"
}
```

* **`alertType`** (string, अधिकतम 256, वैकल्पिक): अलर्ट का प्रकार (अक्षरांकीय, अंडरस्कोर और डैश)।
* **`severity`** (string, वैकल्पिक): `"low"`, `"medium"`, या `"high"`.
* **`description`** (string, अधिकतम 10000, वैकल्पिक): अलर्ट का विवरण।
* **`externalId`** (string, अधिकतम 1000, वैकल्पिक): बाहरी संदर्भ ID।
  {% endtab %}

{% tab title="custom" %}

```json
{
  "value": "Custom event data as a string",
  "externalId": "custom-2024-001"
}
```

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

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

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

* **`relatedEventId`** (string, आवश्यक): उस इवेंट का event ID (UUID) जिसके बारे में यह प्रतिक्रिया है।
* **`feedback`** (string, आवश्यक): `"correct"`, `"incorrect"`, या `"inconclusive"`.

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

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

किसी इवेंट में छवियाँ संलग्न करने के लिए, आपको पहले प्रत्येक छवि को उपयोग करके अपलोड करना होगा [एक विज़न इवेंट छवि अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-image.md#http-api) एंडपॉइंट से एक `sourceId`. में प्रत्येक छवि ऑब्जेक्ट `images` ऐरे एक एनोटेटेड (आउटपुट) छवि का प्रतिनिधित्व करता है। यदि आप मूल बिना एनोटेशन वाली (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, वैकल्पिक): छवि के लिए एक लेबल।
* **`sourceId`** (string, वैकल्पिक): वह `sourceId` से प्राप्त [एनोटेटेड छवि अपलोड करने पर](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-image.md#http-api).
* **`inputSourceId`** (string, वैकल्पिक): वह `sourceId` मूल बिना एनोटेशन वाली (input) छवि अपलोड करने पर प्राप्त।
* **`objectDetections`** (array, अधिकतम 1000, वैकल्पिक): बाउंडिंग बॉक्स डिटेक्शन, साथ में `class`, `x`, `y`, `width`, `height`, और `confidence` (0-1).
* **`classifications`** (array, अधिकतम 1000, वैकल्पिक): वर्गीकरण परिणाम, साथ में `class` और `confidence` (0-1).
* **`instanceSegmentations`** (array, अधिकतम 1000, वैकल्पिक): सेगमेंटेशन परिणाम, बाउंडिंग बॉक्स फ़ील्ड्स के साथ तथा `points` (ऐरे ऑफ़ `[x, y]` युग्म, न्यूनतम 3)।
* **`keypoints`** (array, अधिकतम 1000, वैकल्पिक): कीपॉइंट डिटेक्शन, बाउंडिंग बॉक्स फ़ील्ड्स के साथ तथा `keypoints` (इन ऑब्जेक्ट्स की ऐरे, जिनमें `id`, `x`, `y`, और वैकल्पिक `occluded`, प्रति डिटेक्शन न्यूनतम 1 कीपॉइंट)।
* **`metadata`** (object, अधिकतम 100 keys, वैकल्पिक): इस एक छवि के बारे में key-value जोड़े। देखें [छवि मेटाडेटा](#image-metadata) नीचे।

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

उपयोग करें `metadata` किसी छवि ऑब्जेक्ट पर ऐसे मान रिकॉर्ड करने के लिए जो केवल उसी छवि से संबंधित हों, जैसे पास/फेल निर्णय, सीरियल नंबर, या कैमरा कोण। मान इवेंट विवरण दृश्य में छवि के साथ दिखाए जाते हैं। पूरे इवेंट का वर्णन करने वाले मान संलग्न करने के लिए, उपयोग करें [कस्टम मेटाडेटा](#custom-metadata) इसके बजाय।

**प्रतिबंध:**

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

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

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

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

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

**प्रतिबंध:**

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

```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": "Insufficient permissions for this resource."
}
```

{% endtab %}
{% endtabs %}

### सत्यापन और चेतावनियाँ

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

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

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

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

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

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

## Python SDK

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

```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, अधिकतम 256 वर्ण): वैश्विक रूप से अद्वितीय पहचानकर्ता। 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): एनोटेशन सहित छवि ऑब्जेक्ट्स। देखें [एक विज़न इवेंट छवि अपलोड करें](/deployment/hi/monitoring-and-analytics/vision-events/upload-a-vision-event-image.md#python-sdk).
* **`customMetadata`** (dict): कस्टम मेटाडेटा के 100 तक key-value जोड़े।
* **`comment`** (string): इवेंट के बारे में एक नोट, मुख्यतः इसके साथ उपयोग किया जाता है `operator_feedback`.

पूर्ण इवेंट स्कीमा, प्रत्येक प्रकार के लिए इवेंट डेटा संरचनाएँ, और छवि एनोटेशन प्रारूपों के लिए देखें [REST API संदर्भ](#http-api).
