Skip to main content
Version: V3.2

Vision Pipeline Setup in Capture

Vision Pipeline Setup in Capture

Before iOPTIQ can show a single inspection, the vision data has to arrive in Capture and be stored in the right places. This guide walks through that Capture-side setup, in the order you should do it:

  1. Create the databases that hold your metadata, your images and your predictions, and link them together.
  2. Set up the edge device that logs the vision data into those databases.

Once both steps are done, you can create your iOPTIQ project and map the data to the interface — see Configuration.

info

If you are not yet familiar with what iOPTIQ does with this data, read the Overview first.

The three databases

A vision pipeline writes to three Capture databases. Each one holds a different part of the inspection:

DatabaseTypeHolds
Main databaseInflux or TimescaleThe metadata and the references to your images and predictions
Blob databaseBlobThe image files themselves, in your own Azure container
Predictions databaseTimescale onlyThe predictions produced by your vision model

The main database is the entry point: iOPTIQ connects to it, and from there it follows the references to the images in the blob database and to the predictions in the predictions database. That is why all three have to exist and be linked before the application can show anything.

The three databases of a vision pipeline in Storage Hub

Step 1 — Create the databases

All three databases are created in the Storage Hub app, using the + button to open the Add Capture Storage wizard.

The wizard itself is documented in full on the Databases page. The sections below only cover what matters for a vision pipeline.

1.1 Main database

Create the main database first — it is the one everything else attaches to.

  1. Open Storage Hub and click +.
  2. In General, fill in a DB name and pick Influx or Timescale as the Type.
  3. In Retention(s), add the retention policy the vision data should be written to (for example oneYear, 365 days).
  4. Set the Permissions and finish the wizard.
info

Remember the name of the retention policy you created here. It is the policy you will attach the blob and predictions links to in step 1.4, and the one you will select on the edge device in step 2.

1.2 Blob database

The blob database is a link to an Azure Blob Storage container that you own. Capture uploads the inspection images into that container and reads them back when iOPTIQ displays an inspection — the files themselves never leave your own Azure subscription.

  1. Open Storage Hub and click +.
  2. In General, fill in a DB name and select Blob as the Type.
  3. Paste your Blob SAS URL into the URL field.
  4. Optionally enable Retention and enter a number of days. Files older than that are automatically removed from the container.
  5. Finish the wizard.

Add Capture Storage - Blob database

info

The Azure side is a prerequisite. You need an existing Storage Account, a Container inside it, and a SAS URL for that container with at least Read, Create and Write permissions. If you also want Capture to clean up older images through the Retention setting, the SAS needs Delete and List as well.

A SAS URL has an expiry date. Once it expires, Capture can no longer read or write images — paste a freshly issued URL into the blob database to restore access.

1.3 Predictions database

The predictions database stores everything your model detected on each image: the bounding boxes, masks and keypoints, together with their labels and confidence. What it holds and why it is a separate database is described on the Predictions database page.

  1. Open Storage Hub and click +.
  2. In General, fill in a DB name and select Timescale as the Type.
  3. Add a retention policy and set the permissions, exactly as you did for the main database.
  4. Finish the wizard.

Add Capture Storage - Predictions database

warning

The predictions database must be Timescale. Influx is not an option here.

iOPTIQ filters inspections on the predictions found in each image, and that filtering relies on the Timescale schema. A predictions database on Influx cannot serve those filters.

The three databases only work together once the main database knows where its images and predictions live. Both links are made on the retention policy of the main database.

  1. Open Storage Hub and select your main database.
  2. Go to the Settings tab.
  3. Find the retention policy you created in step 1.1, in the Retentions table.
  4. In the Link to Blob column, select your blob database.
  5. In the Link to Predictions DB column, select your predictions database.
  6. Save.

Linking the blob and predictions databases to the main database

info

Both links live on the retention policy, not on the database as a whole. If your main database has several retention policies, set the links on the policy that the vision data is actually written to — the same one you select on the edge device in the next step. In the screenshot above, only the oneYear retention is linked; autogen is left empty.

Step 2 — Set up the edge device that logs the data

With the databases in place, you need an edge gateway (or logger) that sends the vision data into Capture.

Onboarding a gateway is covered in Add Edge Gateways. Follow that guide, and when you reach the Retentions step:

  • Select only the retention policy of your main database.

That is the only storage target the device needs.

info

You do not select the blob or predictions database on the device. Images and predictions are routed to them automatically through the links you configured in step 1.4 — the device writes to the main retention, and Capture distributes the data from there.

Collector configuration

Selecting the retention is not enough — the collector also has to be told what the vision object looks like. This is done in the collector configuration of your device, on the connection that receives the vision data.

Log the vision object on a single variable

The whole vision object arrives as one payload, so you log it as one variable on one measurement. Create a measurement for your vision data and add a single variable to it that maps to the source of the object:

SettingValue
NameThe variable name, for example VisionPipelines
Collect typeOn change
ConditionAlways
MappingThe address the vision object is published on, for example vintecc/capture/VisionPipelinesObject

The vision object logged on a single measurement and variable

Adding measurements and variables is documented in full on the Measurements page.

Declare the predictions as an additional property

The vision object carries the predictions in a nested object — captureVisionPredictions — that sits outside the tags and fields. The collector does not recognise such an object by default and will silently drop it, which means your predictions never reach the predictions database.

To keep it, declare it as an additional property in the configuration. This cannot be done from the UI:

  1. Open the collector configuration of your device and click edit config to open the JSON editor.
  2. Search for collectorSettings.
  3. Add the following to its additionalProperties tag:
[
{
"id": 1,
"propertyName": "captureVisionPredictions"
}
]
  1. Save the configuration and sync it to the device.
warning

Without this entry, everything else can be configured correctly and the inspections will still arrive without their predictions. If iOPTIQ shows images but no bounding boxes, masks or keypoints, check this setting first.

info

The id is a short, unique identifier used internally between collecting and syncing. The value itself does not matter, but it must be unique within additionalProperties and should not be changed afterwards.

Additional properties are a general collector mechanism, not something specific to vision. See Capture Object With additional properties for the full description and the rules that apply.

Data format

The device has to send its vision data in the shape Capture expects, so that the images end up in the blob database and the predictions in the predictions database.

Below is an example of the data an edge device should send:

{
"Name": "CaptureVisionTestApp",
"Timestamp": 1787143509786528698,
"Tags": {},
"Fields": {
"image": "data:image/jpeg;ext=jpg;dstPath=CaptureVisionTestApp/2026_08_19/01a01a0d-d71a-7040-8521-8cc56c8fba6b... (217746 chars)",
"uuid": "01a01a0d-d71a-7040-8521-8cc56c8fba6b",
"width": 1224,
"height": 1024
},
"captureVisionPredictions": {
"detections": {
"time": 1787143509.7656584,
"image_width": 1224,
"image_height": 1024,
"bbs": [
{
"category_id": null,
"label": "Other",
"conf": null,
"metadata": null,
"xtl_r": 0.26338235294117646,
"ytl_r": 0.41392578125,
"xbr_r": 0.35827614379084965,
"ybr_r": 0.5478515625,
"image_width": 1224,
"image_height": 1024
}
],
"keypoints": null,
"contours": null,
"classification": null,
"height": 1024,
"width": 1224,
"other": {}
}
}
}

Next steps

Your Capture setup is now complete: the databases exist, they are linked, and the device is logging into them.

Continue with Configuration to create your iOPTIQ project, connect it to the main database, and upload the source configuration that maps your data to the interface.