文書番号 :PHB004 Revision :1.00
Photonfocus 社インテリジェントカメラ
SM2 シリーズチュートリアル
株式会社アプロリンク
文書番号 :PHB004 Revision :1.00
目次
はじめに ........................................................................................................................................................................... 2 1 概要 ............................................................................................................................................................................. 3 1-1 プロジェクトウィンドウ ........................................................................................................................................ 3 1-2 フレームワーク ..................................................................................................................................................... 4 1-2-1 ユーザークラス ............................................................................................................................................ 4 2 サンプル 1 .................................................................................................................................................................... 5 2-1 コンストラクタ ..................................................................................................................................................... 5 2-2 デストラクタ ........................................................................................................................................................ 6 2-3 OnUserIO() ........................................................................................................................................................... 6 2-4 OnImage() ............................................................................................................................................................ 7 3 サンプル 2 .................................................................................................................................................................... 8 3-1 コンストラクタ ..................................................................................................................................................... 8 3-2 デストラクタ ........................................................................................................................................................ 8 3-3 OnUserIO() ........................................................................................................................................................... 8 3-4 OnImage() ............................................................................................................................................................ 9 4 サンプル 3 .................................................................................................................................................................. 10 4-1 コンストラクタ ................................................................................................................................................... 11 4-2 デストラクタ ...................................................................................................................................................... 11 4-3 OnUserIO() ......................................................................................................................................................... 11 4-4 OnImage() .......................................................................................................................................................... 12 5 その他のサンプル ........................................................................................................................................................ 13 改定履歴 ......................................................................................................................................................................... 14
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
1
文書番号 :PHB004 Revision :1.00
はじめに この度は株式会社アプロリンク取り扱い製品をご使用いただき誠にありがとうございます。ご使用の前に、この資料をお読みい ただき、正しくお使い下さい。 ・
本書は、お客様が Windows/MAC の基本操作に習熟している事を前提にしております。
・
本書内で使用されている表示画面、イラスト等は説明用に作成されたものです。お客様の環境により実際の表示画像と違う 場合がございます。
・
ご使用のパソコン・周辺機器・オペーレーティングソフトなどお客様のご利用環境により正常に動作しない場合があります。
・
本書に使用する内容の一部、または全部は、株式会社アプロリンクによる許可なく転載することはできません。
・
本書の内容について、万一不審な点や記載漏れなどお気付きの点がありましたら、ご連絡下さい。
・
本書の内容に疑問点などが生じた場合は、メーカー発行の英文技術資料および英文マニュアルを正しい情報として下さい。
・
本書の内容は予告なしに変更する場合がありますのでご了承ください。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
2
文書番号 :PHB004 Revision :1.00
1
概要 このドキュメントは Photonfocus 社インテリジェントカメラ SM2 シリーズのソフトウェアフレームワークの基本コンセプトを 紹介するものです。Texas Instruments(TI)社 Code Composer Studio(CCS)開発キットの基礎知識(プロジェクトのオー プン、コンパイル、ターゲット DSP へのロード)は含んでおりません。 Code Composer Studio(CCS)のサポートについては、Texas Instruments(TI)社製品販売店にお問い合わせください。
1-1 プロジェクトウィンドウ プロジェクトをオープンした後、各プロジェクトの各種ファイルはプロジェクトファイル一覧ウィンドウで表示されます。
図 1-1 プロジェクトファイル一覧 ファイルの種類:
DSP/BIOS コンフィグファイル DSP/BIOS マルチタスクカーネルコンフィグファイルを利用して、実行時に DSP / BIOS API で使用するためのオブジェク トとプロパティを設定することができます。これらのオブジェクトは、スレッド、スレッドの優先順位、I / O ストリーム、 イベントログ、メモリ、割り込みハンドラが含まれています。
生成ファイル DSP/BIOS で自動生成されたファイルです。
インクルードファイル ビルドプロセスでプログラムが自動的にインクルードファイルを検索しますので、手動で追加する必要がありません。 プロジェクトをビルドした後、インクルードファイルがプロジェクトウィンドウで表示されます。
ライブラリ プリコンパイル関数ライブラリ
ソース ユーザーソースコードファイル
CMD リンカーコマンドファイル プログラムとデータセクションをメモリにマッピングするファイルです。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
3
文書番号 :PHB004 Revision :1.00
1-2 フレームワーク SM2 シリーズカメラ用のソフトウェアは、ソースコード、プリコンパイルされたライブラリ(Framework.lib)として提供され ているフレームワークに構成されています。下記機能の各種 C++クラスが含まれています:
カメラセンサーから DSP メモリへ画像転送
カメラパラメータの変更、ロードと保存
イーサネットインターフェイスの提供
ユーザー入力の取り扱い
グラフィカルユーザー·インターフェース(GUI)
1-2-1 ユーザークラス ユーザーで実装するアプリケーションのクラスは、: アプリケーションダイアログクラス CDlgApp です。 ヘッダファイル CDlgApp.hpp と実装ファイル CDLgApp.cpp で構成されており、このクラスで画面の左側にダイアログを生成 し、カメラ取得画像へのアクセスを提供します。 このクラスは以下の 4 つの関数を宣言します:
コンストラクタ(CDlgApp()) -
クラスの構築
-
ユーザー変数の初期化など
デストラクタ(〜CDlgApp()) -
クラスのクリーンアップ
-
メモリの解放など
OnUserIO() -
この関数は自動的にフレームワークによって呼び出されます。
-
キーボードやマウス等のユーザー入力の処理に使用されます。
OnImage() -
画像取得後この関数はフレームワークによって呼び出されます。
-
画像処理に使用されます。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
4
文書番号 :PHB004 Revision :1.00
2 サ ンプル 1 このサンプルはカメラのライブ画像を表示し、ユーザー入力を処理するサンプルです。
図 2-1 サンプル1
2-1 コンストラクタ コンストラクタで関数 ReadIcon("B_BACK.PNG", 98, 98)で micro SD カードからアイコンイメージをロードし、アプリケーシ ョンダイアログ(GUI_DlgAddIconButton())にアイコンボタンを追加しました。 このボタンが識別子 DLG_ABORT を取得し、ボタンをクリックするとダイアログから出て、メインダイアログに戻ります。
CDlgApp::CDlgApp(CPSApp *pHApp, int x, int y, int Width, int Height) :CDlg(pHApp, x, y, Width, Height) { SetID(DLG_APP); // Set Id of dialog GUI_DlgSetTitle(&m_Dlg, "Example 1"); // Change title of dialog // Add cancel button int iHeight = m_pA->m_Icon[ICON_BACK].Height; GUI_DlgAddIconButton(&m_Dlg, 110, Height - (iHeight + 8), 98, 98, "_Back", &m_pA->m_Icon[ICON_BACK], DLG_ABORT); }
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
5
文書番号 :PHB004 Revision :1.00
2-2 デストラクタ GUI_DlgFree(&m_Dlg)を利用して、ダイアログのメモリを解放します。
CDlgApp::~CDlgApp() { GUI_DlgFree(&m_Dlg); }
2-3 OnUserIO() この関数は、最初にダイアログにアプリケーションのフォーカスにあるかどうかをチェックします。即ちこのダイアログは、プ ログラムのアクティブダイアログであり、ユーザ入力を処理することを指しています。 次に関数 GUI_DlgWork()が呼び出されます。 ユーザーが Constructor(ID = DLG_ABORT)で作成されたボタンを選択した場合、フォーカスはアプリケーションのメインダ イアログに戻ります。 ユーザー入力後、ダイアログは GUI_DlgRefresh()で画面上に描画されます。
int CDlgApp::OnUserIO(int nKey) { m_Activity = 0; if ((*m_DlgFocus == m_ID) && (*m_DlgNewFocus == m_ID)) { // m_Activity contains an event ID of the last user input m_Activity = GUI_DlgWork(&m_Dlg, nKey); switch (m_Activity) { case DLG_ABORT: // Return focus to main dialog *m_DlgNewFocus = DLG_MAIN; pDlgMain->Enable(1); // Enable DlgMain again m_pA->m_View = m_pA->m_ViewOld; m_Visible = 0; // Hide example dialog break; } if (m_Activity) // Update dialog after user interaction GUI_DlgRefresh(&m_Dlg); } return m_Activity; }
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
6
文書番号 :PHB004 Revision :1.00
2-4 OnImage() カメラからのグレー画像を RGB 画像にコピー・変換します。
int CDlgApp::OnImage(YIMAGE *pSrc, CIMAGE *pDst) { // Copy the image from pSrc to pDst GUI_CopyYArea2RGB(pSrc, pDst, 0, 0, pSrc->Width, pSrc->Height, 0, 0); return 0; }
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
7
文書番号 :PHB004 Revision :1.00
3 サ ンプル 2 このサンプルはサンプル 1 をベースとしたものであり、シンプルな画像処理とより多くのユーザー入力を処理します。
図 3-1 サンプル2
3-1 コンストラクタ このコンストラクタはサンプル 1 をベースにしています。スライダーダイアログ項目に割り当てられている新しいメンバー変数 m_Thresh を追加しています。
… m_Thresh = 128; … // Create dialog edit slider GUI_DlgAddEditSlider(&m_Dlg, 8, 32, Width-16, "_Threshold", &m_Thresh, 0, 255, 1);
3-2 デストラクタ サンプル 1 と同様です。
3-3 OnUserIO() サンプル 1 をベースとしています。m_Thresh の値が自動的に GUI_DlgWork()関数で変更されます。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
8
文書番号 :PHB004 Revision :1.00
3-4 OnImage() カメラ画像に二値化処理を追加します。画像の各画素を閾値と比較され、大きい値は、白(255)に、より小さい値が黒(0)に 設定されています。
int CDlgApp::OnImage(YIMAGE *pSrc, CIMAGE *pDst) { unsigned char *restrict pY = pSrc->pY; // Shortcut to camera image pointer // Threshold image for (int i=0; i<pSrc->Width*pSrc->Height; i++) pY[i] = (pY[i]>m_Thresh) ? 255 : 0; // Copy the image from pSrc to pDst GUI_CopyYArea2RGB(pSrc, pDst, 0, 0, pSrc->Width, pSrc->Height, 0, 0); return 0; }
注意 これは DSP 用の最速の二値化アルゴリズムではありません。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
9
文書番号 :PHB004 Revision :1.00
4 サ ンプル 3 このサンプルもサンプル 1 をベースとしたものであり、カメラのパラメータを変更するサンプルです。
図 4-1 サンプル3
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
10
文書番号 :PHB004 Revision :1.00
4-1 コンストラクタ このコンストラクタもサンプル 1 をベースにしています。新しいメンバー変数 m_ExposureTime を追加し、編集スライダは、 露光時間の値の範囲に、より良い適応を取得するために対数モードに切り替えられます。 露出機能へのポインタは、アプリケーションのメインクラス(m_pA - > m_pExposureTime)からメンバーをアクセスするこ とで生成します。現在のカメラパラメータ値が GetValue()で、最小値と最大値が GetMin()や GetMax()で読み込まれます。 SetValue()関数は新しい値を設定します。
… CFeature *pExposureTime = m_pA->m_pExposureTime; // Shortcut to exposure feature m_ExposureTime = pExposureTime->GetValue(); // Copy value of exposure into member variable … // Create dialog buttons GUI_DlgAddButton(&m_Dlg, 8, 32, Width-16, 24, "Exposure _10000", 1); GUI_DlgAddButton(&m_Dlg, 8, 64, Width-16, 24, "Exposure _20000", 2); // Create dialog edit slider DLG_ITEMD *pItem = GUI_DlgAddEditSlider(&m_Dlg, 8, 96, Width-16, "_Exp", &m_ExposureTime, pExposureTime->GetMin(), pExposureTime->GetMax(), 3); GUI_DlgSetEditSliderType(pItem, DLG_ES_LOGARITHMIC); …
4-2 デストラクタ サンプル 1 と同様です。
4-3 OnUserIO() この関数は GUI_DlgWork()で、他のユーザー入力イベントを処理します。 ボタン 1 又は 2 を選択して露光時間を指定します。。 スライダを移動した場合、GUI_DlgWork()の戻り値は DLG_VALUE_になります。この場合、GUI_GetSelectedID()でアクティ ブ項目の識別子を決定します。戻り値の Id が一致した場合、露光時間が変更されます。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
11
文書番号 :PHB004 Revision :1.00
int CDlgApp::OnUserIO(int nKey) { CFeature *pExposureTime = m_pA->m_pExposureTime; // Shortcut m_Activity = 0; if ((*m_DlgFocus == m_ID) && (*m_DlgNewFocus == m_ID)) { m_Activity = GUI_DlgWork(&m_Dlg, nKey); // m_Activity contains an event ID of the last user input switch (m_Activity) { case 1: // Button 1 pExposureTime->SetValue(10000); m_ExposureTime = 10000; break; case 2: // Button 2 pExposureTime->SetValue(20000); m_ExposureTime = 20000; break; case DLG_VALUE_CHANGED: // Slider value has changed if (GUI_DlgGetSelectedID(&m_Dlg) == 3) // Exposure edit slider pExposureTime->SetValue(m_ExposureTime); break; case DLG_ABORT: *m_DlgNewFocus = DLG_MAIN; pDlgMain->Enable(1); m_pA->m_View = m_pA->m_ViewOld; m_Visible = 0; break; } if (m_Activity) GUI_DlgRefresh(&m_Dlg); } return m_Activity; }
4-4 OnImage() サンプル 1 と同様です。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
12
文書番号 :PHB004 Revision :1.00
5 そ の 他 の サンプル prj_imagelib プロジェクトは、TI 社の高度に最適化された画像ライブラリの一部の機能へのアクセスを提供します。 ユーザーは SDK プロジェクトとライブラリ(IMG_thr_gt2max()、IMG_thr_le2min()、IMG_perimeter()、IMG_sobel ())から異なるエッジ検出機能の切り替え、ROI を選択することができます。
図 5-1 Image LIB と Halcon のサンプル もう一つのサンプル(prj_halcon)が、プロジェクトに Halcon ライブラリを統合する方法を示しています。 画像処理ステップは、閾値、セグメンテーション、モフォロジと物体の特徴の検出です。
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
13
文書番号 :PHB004 Revision :1.00
改定履歴 日 2013.7
付
内
容
初版
[Photonfocus 社インテリジェントカメラ SM2 シリーズチュートリアル]
Revision 1.00
14