IC Imaging Control (.NET C#/Visual Basic)

  • サンプルプログラムトップページ
  • デバイスのオープンとハンドリング
    • C# VB.NET カメラの映像を既存のアプリケーションに組み込む方法
    • C# VB.NET デバイスを開く
    • C# VB.NET デバイスの開閉
    • C# VB.NET ダイアログボックスを使用してデバイスを開く
    • C# VB.NET 複数のデバイスを開く
    • C# VB.NET デバイスのシリアル番号を読み取る
    • C# VB.NET ICImagingControlの標準プロパティダイアログの使用
    • C# VB.NET デバイスプロパティ設定の保存と復元
  • ライブ表示
    • C# VB.NET ライブ表示のリサイズ
    • C# VB.NET フルスクリーン表示
    • C# VB.NET 十字マークのオーバーレイ
    • C# VB.NET WFPでvideoWindowを使ったビデオ表示
  • フレームフィルタ
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その1
    • C# VB.NET 低輝度、高輝度ピクセルの強調 その2
  • ライブ表示とマルチプロセス
    • C# VB.NET ライブ表示のみ
    • C# VB.NET 静止画保存
    • C# VB.NET 任意のタイミングで画像処理と静止画保存を同時に処理
    • C# VB.NET 録画しながら任意のタイミングで静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存
    • C# VB.NET 全フレームリアルタイム画像処理しながら
             NG判定を静止画保存、同時に録画
  • イメージの取得
    • C# VB.NET イメージデータの取得
    • C# VB.NET 静止画ファイル保存(BMP)
    • C# VB.NET 静止画ファイル保存(JPEG)
    • C# VB.NET 静止画ファイルの連番保存
    • C# VB.NET カメラ画像保存&FTPで任意のサーバーに転送する
    • C# VB.NET リングバッファを使用したイメージシーケンスの取得と再生
    • C# VB.NET 静止画とAVI動画保存
    • C# VB.NET メモリーレコーディング
             (高速カメラで撮影した現象をRAMメモリー領域に保存)
    • C# VB.NET ソフトウェアトリガーで画像を表示・保存
    • C# VB.NET 録画時間を指定したAVIファイル保存
    • C# VB.NET 外部トリガーで録画の開始
    • C# VB.NET 取得したイメージの輝度値をCSV形式で出力する
             (16bit対応)
  • 画像処理
    • C# VB.NET イメージデータへのアクセス
    • C# VB.NET コントラストの強調 - Part 1
    • C# VB.NET コントラストの強調 - Part 2
    • C# VB.NET コントラストの強調 - Part 3
    • C# VB.NET レーザーポインタの位置を特定する
    • C# VB.NET OpenCVの画像処理
             (アナログタコメーターのデジタル化)
    • C# VB.NET AIモデルを使ったリアルタイム処理
  • Version 3.5サンプル
    • C# VB.NET 関心領域の画像更新
      Advanced Image Processing
    • C# VB.NET 2値化
      Binarization
    • C# VB.NET 明るさの調整
      BrightnessProperty
    • C# VB.NET 動画保存(MediaStreamSink)
      Capturing a Video File
    • C# VB.NET 動画保存(AviStartCapture)
      Capturing an AVI File
    • C# VB.NET 共通ファイル
      Common
    • C# VB.NET オーバーレイの作成
      Creating an Overlay
    • C# VB.NET デモアプリ
      demoapp
    • C# VB.NET VCDプロパティ:GPIOプロパティ編
      DigitalIO
    • C# VB.NET コールバック関数を使ってバッファを表示させる
      Display Buffer
    • C# VB.NET フィルターの適用
      Filter Inspector
    • C# VB.NET 静止画をキャプチャし保存する
      Grabbing an Image
    • C# VB.NET イメージバッファの輝度値を読み込み、輝度反転処理を施す
      Image Processing
    • C# VB.NET VCDプロパティ:全プロパティ一覧を表示する編
      List VCDProperties
    • C# VB.NET デバイス設定ダイアログの作成
      Making Device Settings
    • C# VB.NET イメージバッファにアクセスする
      Pixelformat
    • C# VB.NET コーデックのプロパティを保存する
      Saving Codec Properties
    • C# VB.NET スクロールとズーム
      croll And Zoom
    • C# VB.NET VCDプロパティ:露光とゲイン編
      StandardProperties
    • C# VB.NET VCDプロパティ:ストロボアウト編
      Strobe
    • C# VB.NET VCDプロパティ:
             プロパティダイアログ画面のカスタマイズ編
      VCD Property Page
    • C# VB.NET VCDプロパティ:明るさとホワイトバランス編
      VCD Simple Property
    • C# VB.NET VCDプロパティ:オートフォーカス編
    • C# VB.NET デバイスの再接続方法とフレーム落ちの確認
  • リンク集

    ICImagingControl WEB APIリファレンスマニュアル/サンプルプログラム

    :日本語対応済み :日本語化準備中
    開発言語 APIリファレンスマニュアル サンプルプログラム
    C 4.0
    ()
    - - 4.0
    ()
    - -
    C++ 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5 3.4
    ()
    C#/VB.NET 4.0
    ()
    3.5
    ()
    3.4
    ()
    4.0
    ()
    3.5
    ()
    3.4
    ()
    Python 4.0
    ()
    3.5 3.4
    ()
    4.0
    ()
    3.5 3.4
    ()

デバイスの再接続方法とフレーム落ちの確認

概要

ここではライブストリーミングが停止した場合のカウント方法とPCから接続が切れた(デバイスロストした)時に自動的に復帰する方法と、接続したデバイスから送信したフレームがどの部分でフレーム落ちしているのか確認するための方法についても記載しています。

サンプルプログラム

Software IC Imaging Control 3.5, Visual Studio™ 2019
サンプル(C#) reconnect_camera_cs_3.5.zip

実行結果

デバイスの再接続方法とフレーム落ちの確認

Form1_Loadイベント

private void Form1_Load(object sender, EventArgs e)
{
    //デバイスロストのカウントの初期化
    count = 0;

    if ( !icImagingControl1.LoadShowSaveDeviceState("lastSelectedDeviceState.xml") )
    {
        MessageBox.Show("No device was selected.", "Reconnect Camera", MessageBoxButtons.OK, MessageBoxIcon.Information);
        this.Close();
    }
    else
    {
        //呼び出したデバイスの設定情報を保存
        icImagingControl1.SaveDeviceStateToFile("device.xml");
    }

}

フォームを立ち上げた時の処理として、まず初めにグローバル変数として宣言したcountを初期化します。その後、LoadShowSaveDeviceStateメソッドを使ってデバイスダイアログを呼び出します。

クラスライブラリリファレンス:ICImagingControl.LoadShowSaveDeviceState Method
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル


デバイスダイアログでエラーなく呼び出した場合にはSaveDeviceStateToFileメソッドを使って、オープンしたデバイス情報をxmlファイルに保存します。このxmlファイルはデバイスロストしたときにカメラを自動的にオープンするために使用します。

クラスライブラリリファレンス:ICImagingControl.SaveDeviceStateToFile Method
IC Imaging Control_Ver3.5(C#/VB.NET) APIリファレンスマニュアル

DeviceListChangedイベント

private void IcImagingControl1_DeviceListChanged(object sender, EventArgs e)
{
    try
    {
        // デバイスが動作中であれば停止します。
        if (icImagingControl1.LiveVideoRunning)
            icImagingControl1.LiveStop();


        // コンフィギュレーションファイルを Load します。
        icImagingControl1.LoadDeviceStateFromFile("device.xml", true);

        // ライブビデオを再開します。
        if (icImagingControl1.DeviceValid)
            icImagingControl1.LiveStart();

        //デバイスロストの回数をカウント
        count++;

        label1.Text = "デバイスロスト: " + count + "回";
    }
    catch 
    {
        label1.Text = "デバイスロスト";
    }
}

DeviceListChangedイベントはDevicesで得られる有効なデバイスに変化があったときに発火するイベントです。 例えば、デバイスロストやデバイスが追加されたタイミングで発火しますので、このイベントハンドラー内にデバイスロストしたときの処理と再開するときの処理をロジックに組み込めばいいことになります。 上記の例ではForm_Loadイベント内で保存したxmlファイルを読み込み、xmlファイルに保存されているファイルがない場合にはtry-catchの例外処理として処理されるようにし、上手く読み込めた場合にはLiveStardtで自動的に開始するロジックとなっています。そうすることで、カメラがPCで認識できなくなった場合(例えば、USBケーブルやイーサネットのケーブルが抜けた場合)、再度ケーブルを指し直すことでソフトウェアのボタンをクリックするなどのGUIを操作することなく、自動的にライブスタートを再開することができます。

フレーム落ちの検出

private void Timer1_Tick(object sender, EventArgs e)
{
    if (icImagingControl1.DeviceValid)
    { 
        //DirectShow/ICImagingControlに引き渡される前のドライバに送出されたフレーム数
        ulong _framesDelivered = icImagingControl1.DriverFrameDropInformation.FramesDelivered;
        //アプリケーション側でドロップしたフレーム数。コールバック中にドライバからアプリケーションのバッファへのコピーに時 間がかかる事が主な要因です。
        ulong _framesDroppedDueToApplicationQueue = icImagingControl1.DriverFrameDropInformation.FramesDroppedDueToApplicationQueue;
        //データ転送途中にドロップしたフレーム数。受信したデータが不完全であったり、データ帯域幅が十分でないことが原因とし て考えられます。
        ulong _framesDroppedDueToPacketLoss = icImagingControl1.DriverFrameDropInformation.FramesDroppedDueToPacketLoss;
        //ドライバでドロップしたフレーム数。取得したフォーマットを出力するフォーマットに画像を変換するのが間にあっていない ことが考えらえます。
        ulong _framesDroppedDueToTransforms = icImagingControl1.DriverFrameDropInformation.FramesDroppedDueToTransforms;
        //原因が特定できないドロップしたフレーム数。ドライバがフレームドロップ情報を提供していない事が考えられます。
        ulong _framesDroppedDueUnspecified = icImagingControl1.DriverFrameDropInformation.FramesDroppedDueUnspecified;

        label7.Text = _framesDelivered.ToString() + "回";
        label8.Text = _framesDroppedDueToApplicationQueue.ToString() + "回";
        label9.Text = _framesDroppedDueToPacketLoss.ToString() + "回";
        label10.Text = _framesDroppedDueToTransforms.ToString() + "回";
        label11.Text = _framesDroppedDueUnspecified.ToString() + "回";
    }

}

IC Imaging Control3.5からデバイスドライバにどのくらいドロップアウト(フレーム落ち)したのかアクセスできるプロパティ機能が追加されています。ドライバが送信したフレーム数、ドロップしたフレーム数、またパイプライン内でのドロップが発生した場所についての情報が含まれます。 DriverFrameDropInformationDataクラスの各プロパティの説明は下記の通りです。

プロパティ 説明
FramesDelivered DirectShow/ICImagingControlに引き渡される前のドライバに送出されたフレーム数(トータルのフレーム数)
FramesDroppedDueToApplicationQueue アプリケーション側でドロップしたフレーム数。コールバック中にドライバからアプリケーションのバッファへのコピーに時間がかかる事が主な要因です。(通信品質)
FramesDroppedDueToPacketLoss データ転送途中にドロップしたフレーム数。受信したデータが不完全であったり、データ帯域幅が十分でないことが原因として考えられます。(PCの性能)
FramesDroppedDueToTransforms ドライバでドロップしたフレーム数。取得したフォーマットを出力するフォーマットに画像を変換するのが間にあっていないことが考えらえます。(アプリ起因)
FramesDroppedDueUnspecified 原因が特定できないドロップしたフレーム数。ドライバがフレームドロップ情報を提供していない事が考えられます。
▲ このページの先頭に戻る

Copyright © ARGO Corporation. All Rights Reserved.