> 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) एक टाइमस्टैम्प वाला रिकॉर्ड है जो आपके तैनात कंप्यूटर विज़न मॉडल द्वारा देखी गई किसी चीज़ का होता है — उदाहरण के लिए, एक पता किया गया दोष या इन्वेंटरी गिनती — साथ में वैकल्पिक छवियाँ, भविष्यवाणियाँ, और कस्टम मेटाडेटा। यह पेज दिखाता है कि एक एकल इवेंट कैसे रिकॉर्ड करें ताकि वह आपकी खोजने योग्य, फ़िल्टर करने योग्य प्रोडक्शन हिस्ट्री का हिस्सा बन जाए। एक साथ कई इवेंट इनजेस्ट करने के लिए, उपयोग करें [बैच में विज़न इवेंट बनाएं](/deployment/hi/monitoring-and-analytics/vision-events/batch-create-vision-events.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-dfdc1702ad3d1a62ad0a661e9609f6bbe2fc8d4c%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 ID पहले से इनजेस्ट किए गए इवेंट्स को ओवरराइट कर देंगे।
{% endhint %}

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

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

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

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

### Event Data Schemas

की संरचना निर्भर करती है `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": "कस्टम इवेंट डेटा एक स्ट्रिंग के रूप में",
  "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 %}

### Image Objects

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

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

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

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

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

```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 आवश्यक है"
}
```

{% 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 मान `severity`)
* अपरिचित फ़ील्ड जो schema का हिस्सा नहीं हैं

जब warnings मौजूद होती हैं, तब अमान्य `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 field names का उपयोग किया गया हो।

## 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 सीधे server को client-side validation के बिना भेजा जाता है, इसलिए नए event types और fields बिना SDK update के काम करते हैं।

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

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

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