• 検索結果がありません。

目次 はじめに 概要 プロジェクトウィンドウ フレームワーク ユーザークラス サンプル コンストラクタ デストラクタ OnUserIO()

N/A
N/A
Protected

Academic year: 2021

シェア "目次 はじめに 概要 プロジェクトウィンドウ フレームワーク ユーザークラス サンプル コンストラクタ デストラクタ OnUserIO()"

Copied!
15
0
0

読み込み中.... (全文を見る)

全文

(1)

Photonfocus 社インテリジェントカメラ

SM2 シリーズチュートリアル

(2)

目次

はじめに ... 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

(3)

はじめに

この度は株式会社アプロリンク取り扱い製品をご使用いただき誠にありがとうございます。ご使用の前に、この資料をお読みい ただき、正しくお使い下さい。 ・ 本書は、お客様がWindows/MAC の基本操作に習熟している事を前提にしております。 ・ 本書内で使用されている表示画面、イラスト等は説明用に作成されたものです。お客様の環境により実際の表示画像と違う 場合がございます。 ・ ご使用のパソコン・周辺機器・オペーレーティングソフトなどお客様のご利用環境により正常に動作しない場合があります。 ・ 本書に使用する内容の一部、または全部は、株式会社アプロリンクによる許可なく転載することはできません。 ・ 本書の内容について、万一不審な点や記載漏れなどお気付きの点がありましたら、ご連絡下さい。 ・ 本書の内容に疑問点などが生じた場合は、メーカー発行の英文技術資料および英文マニュアルを正しい情報として下さい。 ・ 本書の内容は予告なしに変更する場合がありますのでご了承ください。

(4)

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 リンカーコマンドファイル プログラムとデータセクションをメモリにマッピングするファイルです。

(5)

1-2 フレームワーク

SM2 シリーズカメラ用のソフトウェアは、ソースコード、プリコンパイルされたライブラリ(Framework.lib)として提供され ているフレームワークに構成されています。下記機能の各種C++クラスが含まれています:  カメラセンサーからDSP メモリへ画像転送  カメラパラメータの変更、ロードと保存  イーサネットインターフェイスの提供  ユーザー入力の取り扱い  グラフィカルユーザー·インターフェース(GUI)

1-2-1

ユーザークラス

ユーザーで実装するアプリケーションのクラスは、: アプリケーションダイアログクラスCDlgApp です。 ヘッダファイルCDlgApp.hpp と実装ファイル CDLgApp.cpp で構成されており、このクラスで画面の左側にダイアログを生成 し、カメラ取得画像へのアクセスを提供します。 このクラスは以下の4 つの関数を宣言します:  コンストラクタ(CDlgApp()) - クラスの構築 - ユーザー変数の初期化など  デストラクタ(〜CDlgApp()) - クラスのクリーンアップ - メモリの解放など  OnUserIO() - この関数は自動的にフレームワークによって呼び出されます。 - キーボードやマウス等のユーザー入力の処理に使用されます。  OnImage() - 画像取得後この関数はフレームワークによって呼び出されます。 - 画像処理に使用されます。

(6)

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);

(7)

2-2 デストラクタ

GUI_DlgFree(&m_Dlg)を利用して、ダイアログのメモリを解放します。

2-3 OnUserIO()

この関数は、最初にダイアログにアプリケーションのフォーカスにあるかどうかをチェックします。即ちこのダイアログは、プ ログラムのアクティブダイアログであり、ユーザ入力を処理することを指しています。 次に関数GUI_DlgWork()が呼び出されます。 ユーザーがConstructor(ID = DLG_ABORT)で作成されたボタンを選択した場合、フォーカスはアプリケーションのメインダ イアログに戻ります。 ユーザー入力後、ダイアログはGUI_DlgRefresh()で画面上に描画されます。 CDlgApp::~CDlgApp() { GUI_DlgFree(&m_Dlg); }

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; }

(8)

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;

(9)

3 サンプル 2

このサンプルはサンプル1 をベースとしたものであり、シンプルな画像処理とより多くのユーザー入力を処理します。 図 3-1 サンプル2

3-1 コンストラクタ

このコンストラクタはサンプル1 をベースにしています。スライダーダイアログ項目に割り当てられている新しいメンバー変数 m_Thresh を追加しています。 … m_Thresh = 128; …

// Create dialog edit slider

(10)

3-4 OnImage()

カメラ画像に二値化処理を追加します。画像の各画素を閾値と比較され、大きい値は、白(255)に、より小さい値が黒(0)に 設定されています。

注意

これはDSP 用の最速の二値化アルゴリズムではありません。

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; }

(11)

4 サンプル 3

このサンプルもサンプル1 をベースとしたものであり、カメラのパラメータを変更するサンプルです。

(12)

4-1 コンストラクタ

このコンストラクタもサンプル1 をベースにしています。新しいメンバー変数 m_ExposureTime を追加し、編集スライダは、 露光時間の値の範囲に、より良い適応を取得するために対数モードに切り替えられます。

露出機能へのポインタは、アプリケーションのメインクラス(m_pA - > m_pExposureTime)からメンバーをアクセスするこ とで生成します。現在のカメラパラメータ値がGetValue()で、最小値と最大値が GetMin()や GetMax()で読み込まれます。 SetValue()関数は新しい値を設定します。

4-2 デストラクタ

サンプル1 と同様です。

4-3 OnUserIO()

この関数はGUI_DlgWork()で、他のユーザー入力イベントを処理します。 ボタン1 又は 2 を選択して露光時間を指定します。。 スライダを移動した場合、GUI_DlgWork()の戻り値は DLG_VALUE_になります。この場合、GUI_GetSelectedID()でアクティ ブ項目の識別子を決定します。戻り値のId が一致した場合、露光時間が変更されます。 …

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);

(13)

4-4 OnImage()

サンプル1 と同様です。

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; }

(14)

prj_imagelib プロジェクトは、TI 社の高度に最適化された画像ライブラリの一部の機能へのアクセスを提供します。

ユーザーはSDK プロジェクトとライブラリ(IMG_thr_gt2max()、IMG_thr_le2min()、IMG_perimeter()、IMG_sobel ())から異なるエッジ検出機能の切り替え、ROI を選択することができます。

図 5-1 Image LIB と Halcon のサンプル

もう一つのサンプル(prj_halcon)が、プロジェクトに Halcon ライブラリを統合する方法を示しています。 画像処理ステップは、閾値、セグメンテーション、モフォロジと物体の特徴の検出です。

(15)

改定履歴

日 付 内 容 Revision

図  1-1  プロジェクトファイル一覧  ファイルの種類:
図  4-1  サンプル3
図  5-1  Image LIB と Halcon のサンプル

参照

関連したドキュメント

次に、第 2 部は、スキーマ療法による認知の修正を目指したプログラムとな

ユーザ情報を 入力してくだ さい。必要に 応じて複数(2 つ目)のメー ルアドレスが 登録できます。.

(7)

1 昭和初期の商家を利用した飲食業 飲食業 アメニティコンダクツ㈱ 37 2 休耕地を利用したジネンジョの栽培 農業 ㈱上田組 38.

次に、14 ページの下の表を御覧ください。表 5.2-1 に計画建築物の概要を示してござい ます。区域面積は約 2.4ha、延床面積は約 42 万 m 2

ユーザ情報を 入力してくだ さい。必要に 応じて複数(2 つ目)のメー ルアドレスが 登録できます。.

ƒ 、または Arduinoのリセットボタン”oƒ、2 }~x してか らコマンド @2 しま Q*した Arduino す。 プログラムを Arduino に…き:む Äsについては「

2 次元 FEM 解析モデルを添図 2-1 に示す。なお,2 次元 FEM 解析モデルには,地震 観測時点の建屋の質量状態を反映させる。.