シーケンスファイルの構造

画像取得シーケンスファイルは JSON 形式で定義されますが、ファイル拡張子は「.seq」です。構成に利用する画像取得シーケンスのそれぞれを、個別の画像取得シーケンスファイルとして作成する必要があります。

画像取得シーケンスは、「レーン」 (lanes) の配列で指定する必要があります。レーンとは、特定の画像ソースに対する一連の「アクション」を定義するものです。したがって、画像取得シーケンスの中で、各画像ソースはそれぞれ個別のレーンで構成します。MERLIC は現在、画像の取得、個別のカメラパラメーターの設定、遅延の設定、同期のためのバリアの設定など、さまざまな種類のアクションをサポートしています。

各レーンでは、画像取得シーケンスを有効化するときにカメラまたは周辺デバイスに読み込む必要があるパラメーターセットも定義します。このパラメーターセットは、それぞれの画像ソースに対して暗黙的に使用されるプライマリパラメーターセット、または MERLIC RTE Setup で保存できる代替パラメーターセットのいずれかです。以下の項で、詳細について説明します。

ファイルバージョン

画像取得シーケンスのファイルフォーマットにはバージョンがあります。ファイルバージョンはメジャーバージョンとマイナーバージョンで構成されます。

MERLIC 26.03 はメジャーファイルバージョン 2 を使用します。MERLIC 5.4 または 5.5 で画像取得シーケンスファイルを使用したことがある場合、そちらはメジャーバージョン 1 を使用していました。MERLIC 26.03 以降を初めて起動したときに、メジャーファイルバージョン 1 で定義された既存のシーケンスファイルは、自動でファイルバージョン 2 にアップグレードされます。

アップグレード後のファイルは後方互換性がないため、以前のバージョンの MERLIC では使用できません。手動でのダウングレードが必要となる場合に備えて、バージョン 1 のシーケンスファイルのバックアップが、ファイル拡張子「.seq.1」で自動作成されます。

将来のバージョンの MERLIC では、後方互換性を維持しながらファイルフォーマットを容易に拡張できるよう、マイナーファイルバージョンが使用されます。

JSON スキーマとエディタのサポート

MVTec は、画像取得シーケンスファイルフォーマットの JSON スキーマ定義をホストしています。JSON スキーマをサポートしているモダンなテキストエディタを使用すると、シーケンスファイルの作成プロセスがさまざまな面でシンプルになります。

  • JSON ファイルの中のキーと属性を、スキーマ定義に従ってエディタが自動補完できます。
  • スキーマで指定されている説明をエディタが表示できます。たとえば、JSON ファイル内のキーと属性にカーソルを合わせたときに説明が表示されます。
  • シーケンスファイルを作成するときに、たとえば必須のキーの欠如、無効な値、誤ったデータタイプなど、一般的なエラーの多くを早期に発見できます。

JSON スキーマを活用するには、シーケンスファイルの最上位オブジェクトとして次のキーを指定します。

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

これにより、スキーマ定義の場所をエディタが把握できます。加えて、「.seq」ファイルを JSON として扱うようエディタに設定することが必要な場合があります。たとえば Visual Studio Code では、エディタウィンドウのステータスバーに表示されているファイルタイプ (通常は「Plain Text」) をクリックし、代わりに「JSON」を選択します。

レーン

画像取得シーケンスは、シーケンスファイル内の「レーン」の配列で定義します。1 つの画像ソースにつき、構成できるレーンは 1 つです。しかし、画像ソース構成に含まれるそれぞれの画像ソースに対してレーンを定義することは必須ではありません。レーンには、以下に示す情報のセットが定義されています。

属性

説明

DeviceType

画像ソースのタイプを定義します。現時点では、必ず「ImageSource」に設定する必要があります。

DeviceId

レーンを構成する対象の画像ソースの名前を定義します。

Actions

対象の画像ソースに適用される一連の「アクション」(たとえば画像の取得) を定義します。

レーンのアクションは、画像取得シーケンスを実行したときに、順番に 1 つずつ実行されます。以下のアクションを使用できます。

AlternativeParameterSet

画像ソースでシーケンスを実行するときに使用する必要があるパラメーターセットの名前を指定します。「null」と指定すると、プライマリパラメーターセットを使用します。

画像取得シーケンスが実行されるときには必ず、レーンは並列実行されます。

シーケンスファイルの基本構造は、たとえば次のようになっています。

コピー
{
    "$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": []
        }
    ]
}

画像取得シーケンスファイルを作成または編集するときに、「$schema」キーワードを使用して、画像取得シーケンス向けに定義されている JSON スキーマを参照できます。

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

スキーマは、フォーマットが有効かどうかの検証に使用できます。また、コード補完や、パラメーターに関する情報の表示などの付加機能も、スキーマによって実現されます。ただし、使用する IDE またはテキストエディタがこれらの機能をサポートしている必要があります。

利用できる「Actions

AcquireImage

このアクションは、画像ソースから画像を取得するために使用できます。属性は「ImageName」の 1 つのみで、画像の名前を定義します。この名前は画像取得シーケンスの中で一意である必要があります。また、MVApp で使用する画像を選択するときにも、MVApp画像ソース ツールにこの名前が表示されます。

既存の MVApp に対して画像取得シーケンスを構成する場合、画像に定義する名前は、MVApp ですでに設定されているものと同じにするか、または画像取得シーケンスで定義する新しい名前に合わせて MVApp 側を修正するかのどちらかとするよう留意する必要があります。それ以外の場合、エラーが発生することがあります。

このアクションを非ストリーミングデバイスに使用した場合も、エラーが発生します。このアクションは通常のカメラデバイスでのみ使用できます。

コピー
{
    "Type": "AcquireImage",
    "Attributes": {
         "ImageName": "Image1"
    }
}  

SetParameter

このアクションは、カメラデバイスのパラメーターを設定するために使用できます。パラメーターの名前と値を、属性「ParameterName」と「ParameterValue」で渡す必要があります。

カメラパラメーターの値と、MVTec EasyParams の値を設定できます。どちらのタイプのパラメーターについても、パラメーターに該当する内部名を「ParameterName」属性で指定します。内部名はメーカーによって定義されており、MERLIC RTE Setup の「画像ソース」タブに示される表示名とは異なる場合があります。たとえば、カメラパラメーターの内部名には接頭辞が付加されている場合や、表示名からスペースを抜いた形になっている場合があります。内部名は、演算子 get_framegrabber_param および set_framegrabber_paramHALCON によって使用されるパラメーター名に対応しています。しかし、内部名は MERLIC RTE Setup からも取得できます。

内部パラメーター名の取得

  1. MERLIC RTE Setup を開き、「画像ソース」タブに移動します。
  2. 対象の画像ソース構成とカメラデバイスを選択します。構成が有効であることを確認します。
  3. 目的のカメラパラメーターが示されている、右側のパラメータータブを開きます。
    • EasyParam の場合は、「EasyParams」タブを開きます。
    • その他のカメラパラメーターの場合は、「すべてのパラメーター」タブを開きます。
  4. パラメーターリストで目的のパラメーターを見つけます。
  5. パラメーター名を右クリックして、コンテキストメニューから内部名をコピーします。
  6. この名前をシーケンスファイルに貼り付けることができます。

EasyParams の内部名は次のとおりです。

EasyParam

内部名 / シーケンスの「ParameterName

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

コピー
{
    "Type": "SetParameter",
    "Attributes": {
        "ParameterName": "[Consumer]exposure",
        "ParameterValue": 200.0
    }
}

デフォルトでは、修正されたパラメーターは、シーケンスのそれぞれの実行後に、前の値にリセットされます。この動作は、属性「ExcludeFromRollback」を「true」に設定することにより、オプションで無効化できます。ただしこのオプションは、予期せぬカメラ構成につながることがあるため、使用には注意が必要です。特に、他の値に依存するカメラパラメーターを設定するときや、複数の画像取得シーケンスを使用するときに、そのようになる可能性があります。

Delay

このアクションは、指定したミリ秒の間、レーンの実行を遅らせるために使用できます。遅延の時間は属性「Milliseconds」で定義する必要があります。

コピー
{
    "Type": "Delay",
    "Attributes": {
        "Milliseconds": 2000
    }
}

Barrier

異なる画像ソースのレーンは並列実行されます。このアクションは、複数のレーンの実行を同期させるために使用できます。1 つのレーンの実行がバリアに到達すると、他のすべてのレーンが同じバリア、すなわち同じ「BarrierName」属性を持つバリアに到達するまで、レーンの実行は待機となります。

コピー
{
    "Type": "Barrier",
    "Attributes": {
        "BarrierName": "barrier1"
    }
}