Struktur von Sequenzdateien

Aufnahmesequenzdateien sind im JSON-Format definiert, haben jedoch die Dateiendung „.seq“. Jede spezifische Aufnahmesequenz, die für eine Konfiguration verfügbar sein soll, erfordert eine eigene Sequenzdatei.

Die Aufnahmesequenz muss durch ein Array von „Spuren“ (lanes) angegeben werden. Eine Spur definiert eine Sequenz von „Aktionen“ für eine bestimmte Bildquelle. Somit wird jede Bildquelle in ihrer eigenen Spur in der Aufnahmesequenz konfiguriert. MERLIC unterstützt derzeit verschiedene Arten von Aktionen: für einen Bildeinzug, zum Einstellen einzelner Kameraparameter, zum Einstellen einer Verzögerung und zum Einstellen einer Schranke für Synchronisierungszwecke.

Jede Spur definiert auch einen Parametersatz für die Kamera oder das Peripheriegerät, der beim Aktivieren der Aufnahmesequenz in das Gerät geladen werden soll. Hierbei kann es sich entweder um den primären Parametersatz handeln, der für jede Bildquelle implizit ist, oder um einen alternativen Parametersatz, der mit dem MERLIC RTE Setup gespeichert werden kann. Im Folgenden finden Sie ausführlichere Informationen.

Dateiversion

Das Dateiformat der Aufnahmesequenz ist versioniert. Die Dateiversion besteht aus einer Haupt- und einer Nebenversion.

MERLIC 5.8 verwendet die Hauptdateiversion 2. Wenn Sie Aufnahmesequenzdateien in MERLIC 5.4 oder 5.5 verwendet haben, wurde die Hauptversion 1 verwendet. Wenn Sie MERLIC 5.8 oder neuer zum ersten Mal starten, werden die vorhandenen Sequenzdateien, die mit der Hauptdateiversion 1 definiert sind, automatisch auf die Dateiversion 2 aktualisiert.

Aktualisierte Dateien sind nicht abwärtskompatibel, sodass Sie sie nicht mit früheren Versionen von MERLIC verwenden können. Für den Fall, dass Sie ein manuelles Downgrade durchführen müssen, werden automatisch Sicherungskopien der Sequenzdateien der Version 1 mit der Dateiendung „.seq.1“ erstellt.

Die Nebendateiversion wird in zukünftigen Versionen von MERLIC verwendet, um Erweiterungen des Dateiformats auf abwärtskompatible Weise zu ermöglichen.

JSON-Schema- und Editor-Unterstützung

MVTec hostet JSON-Schema-Definitionen für das Dateiformat der Aufnahmesequenz. Die Verwendung eines modernen Texteditors mit JSON-Schema-Unterstützung kann den Prozess der Erstellung von Sequenzdateien auf verschiedene Weise vereinfachen:

  • Der Editor kann Schlüssel und Attribute in der JSON-Datei entsprechend der Schema-Definition automatisch vervollständigen.
  • Der Editor kann Beschreibungen anzeigen, die im Schema angegeben sind, beispielsweise wenn Sie mit der Maus über Schlüssel und Attribute in der JSON-Datei fahren.
  • Beim Erstellen der Sequenzdateien können viele häufige Fehler frühzeitig erkannt werden, beispielsweise fehlende obligatorische Schlüssel, ungültige Werte oder falsche Datentypen.

Um die Vorteile des JSON-Schemas nutzen zu können, fügen Sie den folgenden Schlüssel in das oberste Objekt der Sequenzdatei ein:

Kopieren
"$schema": "http://download.mvtec.com/acquisition-sequence-v2.0.schema.json",

Dadurch wird dem Editor mitgeteilt, wo er die Schemadefinition finden kann. Möglicherweise müssen Sie Ihrem Editor außerdem mitteilen, dass er „.seq“-Dateien als JSON behandeln soll. Hierzu klicken Sie beispielsweise unter Visual Studio Code in der Statusleiste des Editorfensters auf den Dateityp, normalerweise „Plain Text“, und wählen stattdessen „JSON“ aus.

Spuren

Die Aufnahmesequenz wird durch ein Array von „Spuren“ in der Sequenzdatei definiert. Pro Bildquelle kann eine Spur konfiguriert werden. Es ist jedoch nicht zwingend erforderlich, in der Bildquellen-Konfiguration für jede Bildquelle eine Spur zu definieren. Eine Spur enthält einen bestimmten Satz von Informationen.

Attribut

Beschreibung

DeviceType

Definiert den Typ der Bildquelle. Derzeit muss dieser Wert immer auf „ImageSource“ gesetzt sein.

DeviceId

Definiert den Namen der Bildquelle, für die die Spur konfiguriert ist.

Actions

Definiert die Reihe von „Aktionen“, die auf die jeweilige Bildquelle angewendet werden, beispielsweise einen Bildeinzug.

Die Aktionen einer Spur werden einzeln nacheinander ausgeführt, wenn die Aufnahmesequenz ausgeführt wird. Folgende Aktionen können ausgeführt werden:

AlternativeParameterSet

Gibt den Namen des Parametersatzes an, der bei der Ausführung der Sequenz mit der Bildquelle verwendet werden soll, oder „null“, um den primären Parametersatz zu verwenden.

Bei jeder Ausführung der Aufnahmesequenz werden die Spuren parallel ausgeführt.

Die Grundstruktur einer Sequenzdatei könnte wie folgt aussehen:

Kopieren
{
    "$schema": "http://download.mvtec.com/acquisition-sequence-v2.0.schema.json",
    "Version": "2.0",
    "Lanes": [
        {
            "DeviceType": "ImageSource",
            "DeviceId": "Cam1",
            "AlternativeParameterSet": null,
            "Actions": []
        },
        {
            "DeviceType": "ImageSource",
            "DeviceId": "Cam2",
            "AlternativeParameterSet": null,
            "Actions": []
        }
    ]
}

Beim Erstellen oder Bearbeiten einer Aufnahmesequenzdatei können Sie das Schlüsselwort „$schema“ verwenden, um auf das für Aufnahmesequenzen definierte JSON-Schema zu verweisen:

Kopieren
{
    "$schema": "http://download.mvtec.com/acquisition-sequence-v2.0.schema.json",
    "Version": "2.0",
    "Lanes": [
        ...
    ]
}

Mithilfe des Schemas können Sie überprüfen, ob das Format gültig ist. Darüber hinaus können Zusatzfunktionen wie Code-Vervollständigung und die Anzeige von Informationen zu den Parametern genutzt werden, sofern diese Funktionen in der IDE oder dem Texteditor Ihrer Wahl unterstützt werden.

Verfügbare „Actions

AcquireImage

Diese Aktion kann verwendet werden, um ein Bild aus der Bildquelle einzuziehen. Sie enthält nur ein Attribut, „ImageName“, das den Namen des Bildes definiert. Der Name muss innerhalb der Aufnahmesequenz eindeutig sein. Dies ist auch der Name, der im Bildquelle-Tool in der MVApp angezeigt wird, wenn das in der MVApp zu verwendende Bild ausgewählt wird.

Wenn Sie eine Aufnahmesequenz für eine bereits vorhandene MVApp konfigurieren, müssen Sie darauf achten, entweder denselben Namen für das Bild zu definieren, der bereits in der MVApp festgelegt ist, oder die MVApp an den neuen Namen in der Aufnahmesequenz anpassen. Andernfalls kann ein Fehler auftreten.

Ein Fehler tritt auch auf, wenn diese Aktion für Nicht-Streaming-Geräte verwendet wird. Sie ist für die Verwendung mit normalen Kamerageräten vorbehalten.

Beispiel
Kopieren
{
    "Type": "AcquireImage",
    "Attributes": {
         "ImageName": "Image1"
    }
}  

SetParameter

Diese Aktion kann verwendet werden, um einen Parameter eines Kamerageräts festzulegen. Der Name und der Wert des Parameters müssen in den Attributen „ParameterName“ und „ParameterValue“ übergeben werden.

Sie können sowohl Werte für Kameraparameter als auch für die MVTec EasyParams festlegen. Für beide Parametertypen muss der jeweilige interne Name des Parameters im Attribut „ParameterName“ angegeben werden. Der interne Name wird vom Hersteller definiert und kann sich vom Anzeigenamen unterscheiden, der auf der Registerkarte „Bildquellen“ des MERLIC RTE Setups angezeigt wird. Der interne Name eines Kameraparameters kann beispielsweise ein zusätzliches Präfix aufweisen oder bis auf Leerzeichen mit dem Anzeigenamen übereinstimmen. Sie entsprechen den Parameternamen, die von HALCON in den Operatoren get_framegrabber_param und set_framegrabber_param verwendet werden. Sie können den internen Namen jedoch auch über das MERLIC RTE Setup abrufen.

Internen Parameternamen abrufen

  1. Öffnen Sie das MERLIC RTE Setup und wählen Sie die Registerkarte „Bildquellen“ aus.
  2. Wählen Sie die entsprechende Bildquellen-Konfiguration und das Kameragerät aus. Stellen Sie sicher, dass die Konfiguration aktiv ist.
  3. Öffnen Sie die Parameter-Registerkarte auf der rechten Seite, wo der gewünschte Kameraparameter aufgeführt ist:
    • Öffnen Sie für einen EasyParam die Registerkarte „EasyParams“.
    • Öffnen Sie für alle anderen Kameraparameter die Registerkarte „Alle Parameter“.
  4. Finden Sie den gewünschten Parameter in der Parameterliste.
  5. Klicken Sie mit der rechten Maustaste auf den Parameternamen und kopieren Sie den internen Namen über das Kontextmenü.
  6. Sie können den Namen nun in die Sequenzdatei einfügen.

Die internen Namen der EasyParams lauten wie folgt:

EasyParam

Interner Name / „ParameterName“ für Sequenzen

Automatic Exposure Control

[Consumer]exposure_auto

Exposure Time

[Consumer]exposure

Automatic Gain Control

[Consumer]gain_auto

Gain

[Consumer]gain

Trigger Method

[Consumer]trigger

Trigger Activation

[Consumer]trigger_activation

Trigger Delay

[Consumer]trigger_delay

Beispiel
Kopieren
{
    "Type": "SetParameter",
    "Attributes": {
        "ParameterName": "[Consumer]exposure",
        "ParameterValue": 200.0
    }
}

Standardmäßig wird der geänderte Parameter nach jeder Ausführung der Sequenz auf seinen vorherigen Wert zurückgesetzt. Dieses Verhalten kann optional deaktiviert werden, indem das Attribut „ExcludeFromRollback“ auf „true“ gesetzt wird. Diese Option sollte jedoch mit Vorsicht verwendet werden, da sie zu unerwarteten Kamerakonfigurationen führen kann. Dies ist insbesondere dann der Fall, wenn Kameraparameter mit Abhängigkeiten zu anderen Werten eingestellt werden und mehrere Aufnahmesequenzen verwendet werden.

Delay

Diese Aktion kann verwendet werden, um die Ausführung der Spur für eine bestimmte Dauer in Millisekunden zu verzögern. Die Verzögerung muss im Attribut „Milliseconds“ definiert werden.

Beispiel
Kopieren
{
    "Type": "Delay",
    "Attributes": {
        "Milliseconds": 2000
    }
}

Barrier

Die Spuren verschiedener Bildquellen werden parallel ausgeführt. Diese Aktion kann verwendet werden, um die Ausführung von zwei oder mehr Spuren zu synchronisieren. Wenn die Ausführung einer Spur an einer Schranke ankommt, wartet sie, bis alle anderen Spuren ebenfalls an ihrer entsprechenden Schranke angekommen sind, d. h. an der Schranke mit dem gleichen Attribut „BarrierName“.

Beispiel
Kopieren
{
    "Type": "Barrier",
    "Attributes": {
        "BarrierName": "barrier1"
    }
}