next up previous contents
次へ: ウィジット 上へ: テストベッド・プログラム 戻る: テストベッド・プログラム   目次

Subsections

テストベッド・プログラム(本体)

本節では、テストベッド・プログラムの本体部分を構成するへッダファイルおよびソース ファイルについての解説を行なう。ただし個々のウィジットクラスの親クラスに 相当するMacaoPartsおよび同じくマウスハンドラクラスの親クラスに相当するMacaoHandler クラスの説明を含む。これらは抽象クラスとして定義され、個別の実装は 実際にはサブライブラリに含まれる各クラスが提供する。

メインプログラム

概要

テストベッド・プログラムのメインプログラムであり、プログラムmacaoのエン トリポイントを与える。現時点での実装では、プログラムmacaoはコマンドライ ン引数をとらず、単独で実行が行なわれるように設定されている(全ての設定 は、ユーザのホームディレクトリ直下に隠しファイルとして用意される設定ファ イルに記述する内容で指定される)。

ソースファイル

テストベッド・プログラムの本体を成すメインプログラムは、ソースファイルmacao.cで記述 される。

paragraph関数 本ファイルで定義される関数の詳細を以下に示す。

main (int argc, char* argv[])
引数
本関数は以下の引数をとる。
int argc
コマンドライン引数の数である。使用しない。
char* argv[]
コマンドライン引数テーブルへのポインタ。使用しない。
返値
正常に実行が終了した場合には0を、問題が生じた場合はそれ以 外の値を返す。
概要
テストベッド・プログラムmacaoの処理の概略は、以下の手順で 行なわれる。
  1. GTK+、MAlibなど必要なライブラリの初期化を行なう。
  2. MAlibフレームワークを利用した、処理オブジェクトの生 成と処理手順リンクの作成を行なう。
  3. 関数 macao_gui_new によるGUI設定を行なう。
  4. MAlib - GTK+ のメインループに移行する。
マウス操作による教師信号の入力やモードの選択などの対話的処 理は、GTK+ により提供されるイベントハンドリングの仕組みを利 用したイベント駆動型プログラミングとして実現されている。

MacaoGui

概要

テストベッド・プログラムのGUI設定を行なうクラスである。 ユーザ・インタフェースを提供するGUI部品の調整と、イベントハンドリングの 設定によるイベント駆動処理の準備が主な機能である。

ヘッダファイル

ヘッダファイル gui.h では、MacaoGuiに関するマクロ定義、 列挙型、構造体の定義、それらに関する型定義、およびソースファイル gui.c で定義され外部に公開される関数のプロトタイプ宣言が記述される。

マクロ定義

本ファイルで定義されるマクロ定義の詳細を以下に示す。
MACAO_GUI_MENUPATH_FILE
Fileメニューを表すメニューパス文字列である。
MACAO_GUI_MENUPATH_LOAD
File → Load Training Data メニューを表すメニューパス文字列である(未使用)。
MACAO_GUI_MENUPATH_SAVE
File → Save Training Data メニューを表すメニューパス文字列である(未使用)。
MACAO_GUI_MENUPATH_QUIT
File → Quitメニューを表すメニューパス文字列である。
MACAO_GUI_WARN_LOAD_TRAINING_DATA
トレーニングデータ の読み込みに失敗した場合の警告メッセージ文字列である(未使用)。
MACAO_GUI_WARN_SAVE_TRAINING_DATA
トレーニングデータ の書き込みに失敗した場合の警告メッセージ文字列である(未使用)。
MACAO_GUI_LOAD_ERROR
パラメータ の読み込みに失敗した場合のエラーメッセージ文字列である。
MACAO_GUI_SAVE_ERROR
パラメータ の書き込みに失敗した場合のエラーメッセージ文字列である。

列挙型

本ファイルで定義される列挙型の詳細を以下に示す。
MacaoGuiMode
テストベッド・プログラムの実行モードの種別を表す列挙型である。 現在は未使用の列挙型で、将来の予約用である。
MACAO_GUI_MODE_RUN
テストベッドの認識実行モードを示す(現在は未使用)。
MACAO_GUI_MODE_TEACH
テストベッドの学習実行モードを示す(現在は未使用)。
MACAO_GUI_MODE_NUM
MacaoGuiMode の要素数を表す。

構造体

本ファイルで定義される構造体の詳細を以下に示す。
MacaoGui
GUI設定に関する情報を記録する構造体である。 作成されたオブジェクトに関して明示的な保存は行なわれないが、GTK+のシグナ ル配送の枠組みを利用して間接的に参照され続けることに注意する。
MalibGtkDisplay** displays
表示用のMalibGtkDisplayオブジェクト へのポインタを格納した配列へのポインタ(ポインタのポインタ) を示す。
MacaoTrack* track
GUIに埋め込まれる顔領域抽出クラスへの ポインタを格納する。
MacaoRecog* recog
同じくGUIに埋め込まれる顔認識クラスへの ポインタを格納する。
GtkWidget* window
GUIを表示するウィンドウウィジットへのポインタ である。
GtkWidget* mode_menu
モードメニューウィジットへのポインタ(現在 のところ未使用)。
GtkWidget* pause
PAUSEボタンウィジットへのポインタである。
GtkWidget* entry
ENTRYボタンウィジットへのポインタである。
MacaoHandler* handler
マウス操作ハンドラであるMacaoHandlerオブ ジェクトへのポインタである。

ソースファイル

MacaoGuiの各機能を実現する関数群は、ソースファイルgui.cで記述 される。

関数

本ファイルで定義される関数の詳細を以下に示す。
macao_gui_new (MalibGtkDisplay** displays, MacaoTrack* track, MacaoRecog* recog)
引数
本関数は以下の引数をとる。
MalibGtkDisplay** displays
結果を表示するMalibGtkDisplayオブ ジェクト配列(ポインタの配列)へのポインタ。
MacaoTrack* track
対象とするMacaoTrackオブジェクトへのポインタ。
MacaoRecog* recog
対象とするMacaoRecogオブジェクトへのポインタ。
返値
生成されたMacaoGuiオブジェクトへのポインタ。
概要
MacaoGuiのコンストラクタである。 メモリ領域の確保の他、各パラメータの読み込みによるオブジェ クトの初期化、GUI部品の配置と設定まで、GUIの初期化に関する 全ての処理を担当する。

macao_gui_redraw_screen (MacaoGui* gui, int index)
引数
本関数は以下の引数をとる。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
int index
書き換えを行なう対象のMalibGtkDisplay番号。 インデクスの対応は以下に示すとおりである。
番号 対象
0 入力画像(ハーフサイズ)
1 MacaoTrack出力
2 MacaoRecog出力
返値
なし。
概要
出力画像の再描画を行なう。ポーズ時に教師信号を入力するため のマウスハンドラ関数から利用される。

macao_gui_setup (MacaoGui* gui, MalibGtkDisplay** displays, GtkWidget** panels, MacaoHandler* handler)
引数
本関数は以下の引数をとる。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
MalibGtkDisplay** displays
結果を表示するMalibGtkDisplayオブ ジェクト配列(ポインタの配列)へのポインタ。
GtkWidget** panels
パラメータ設定領域用パネルウィジットの配列 (MacaoTrack、MacaoRecogに対応する2個のオブジェクトから成 る配列である)へのポインタ。
MacaoHandler* handler
マウスイベントハンドラオブジェクトへの ポインタ。
返値
なし。
概要
GUIウィジットのセットアップを行なう。

macao_gui_create_left_panel (MacaoGui* gui, GtkWidget** widgets)
引数
本関数は以下の引数をとる。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
GtkWidget** widgets
中に含むウィジット配列(各ウィジットへのポ インタを格納する配列)へのポインタ。
返値
左側のパネルを表すGtkWidgetオブジェクトへのポインタを返す。
概要
テストベッド・プログラムは大きく左右のパネルに分割できる。 本関数は左側のパネルを設定し、そのパネルウィジットへのポイ ンタを返す。

macao_gui_create_right_panel (MacaoGui* gui, GtkWidget** widgets)
引数
本関数は以下の引数をとる。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
GtkWidget** widgets
中に含むウィジット配列(各ウィジットへのポ インタを格納する配列)へのポインタ。
返値
右側のパネルを表すGtkWidgetオブジェクトへのポインタを返す。
概要
テストベッド・プログラムは大きく左右のパネルに分割できる。 本関数は右側のパネルを設定し、そのパネルウィジットへのポイ ンタを返す。

macao_gui_create_controller (MacaoGui* gui)
引数
本関数は以下の引数をとる。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
返値
コントローラ領域を表すGtkWidgetオブジェクトへのポインタを返す。
概要
右上に設置されるコントロールパネルを構成するウィジェットを 作成する。

macao_gui_create_panel (MacaoTrack* track)
引数
本関数は以下の引数をとる。
MacaoTrack* track
対応するMacaoTrackオブジェクトへのポインタ。
返値
パラメータ設定パネルを表すGtkWidgetオブジェクトへのポインタを返す。
概要
引数で示すMacaoTrackオブジェクトの持つパラメータを解析し、 対応するウィジット部品を順番に構成、パラメータ設定パネルへと並べる。

macao_gui_create_parts (MacaoParam* param)
引数
本関数は以下の引数をとる。
MacaoParam* param
生成するウィジットの対象とするMacaoParamオブジェクトへのポインタ。
返値
ウィジットクラスが提供するGtkWidgetオブジェクトへのポインタを返す。
概要
パラメータ設定パネルに埋め込むべきウィジットを作成する。 作成されるウィジットは、引数で与えるパラメータクラスに対応 するウィジットである。実際には、ウィジットコンストラクタテー ブルを検索して得られるウィジットのコンストラクタを用いて MacaoPartsのサブクラスとなるウィジットクラスを生成し、その後で、 そのウィジットが持つGTK+ウィジットによる部品へのポインタを返す。

macao_gui_create_frame (GtkWidget* widget, unsigned char* label)
引数
本関数は以下の引数をとる。
GtkWidget* widget
フレームを作成する対象となるGTK+ウィジットへのポインタ。
unsigned char* label
フレームのラベルを表す文字列へのポインタ。
返値
作成したフレーム付きGtkWidgetオブジェクトへのポインタを返す。
概要
引数で与えるオブジェクトに、ラベル付きのフレームを与える。

macao_gui_create_aspect_frame (GtkWidget* widget, unsigned char* label)
引数
本関数は以下の引数をとる。
GtkWidget* widget
アスペクトフレームを作成する対象となるGTK+ウィジットへのポインタ。
unsigned char* label
アスペクトフレームのラベルを表す文字列へのポインタ。
返値
作成したアスペクトフレーム付きGtkWidgetオブジェクトへのポインタを返す。
概要
引数で与えるオブジェクトに、ラベル付きのアスペクトフレームを与える。

macao_gui_toggle_start_stop (GtkWidget* button, MacaoGui* gui)
引数
本関数は以下の引数をとる。
GtkWidget* button
PAUSEボタンウィジットへのポインタが設定される。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
返値
なし。
概要
PAUSEボタンによる処理のトグル動作を実現するための、コール バック関数である。PAUSEボタンのクリックによりコールバックされ、 MalibSinkの処理停止・再開機能を利用して処理のトグル動作を実 現する。

macao_gui_entry_clicked (GtkWidget* button, MacaoGui* gui)
引数
本関数は以下の引数をとる。
GtkWidget* button
ENTRYボタンウィジットへのポインタが設定される。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
返値
常にTRUEを返す。
概要
ENTRYボタン操作に対応するコールバック関数を定義する。 教師信号を発生し、学習処理を呼び出す。

macao_gui_teach_event_handle (GtkWidget* widget, GdkEvent* event, MacaoGui* gui)
引数
本関数は以下の引数をとる。
GtkWidget* widget
マウスイベントを入力するGTK+ウィジットが設 定される。
GdkEvent* event
マウスイベントオブジェクトへのポインタが与え られる。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
返値
処理が正しく行なわれた場合はTRUEを、そうでない場合、 マウスハンドラが提供する機能がある場合にはその処理結果を返 す。
概要
教師信号を与えるマウス操作に関し、そのマウスイベントの取り 扱いを定義する。マウスイベントのコールバック関数である。

macao_gui_exit (GtkWidget* widget, MacaoGui* gui)
引数
本関数は以下の引数をとる。
GtkWidget* widget
シグナルを発生したGTK+ウィジットへのポインタ。
MacaoGui* gui
対象とするMacaoGuiオブジェクトへのポインタ。
返値
なし。
概要
プログラムを正常終了する。GTK+のメインループを終了し、 パラメータファイルへ現在確保されているパラメータの値を 全て保存した後で終了する。

MacaoHandler

概要

マウス操作により教師信号を入力するための処理を提供する クラスである。本クラスは抽象クラスであり、個々の実装は、 個別の教師クラスに対応する本クラスのサブクラスとして実装される。

ヘッダファイル

ヘッダファイル handler.h では、MacaoHandlerに関するマクロ定義、 列挙型、構造体の定義、それらに関する型定義、およびソースファイル handler.c で定義され外部に公開される関数のプロトタイプ宣言が記述される。

マクロ定義

本ファイルで定義されるマクロ定義の詳細を以下に示す。
MACAO_HANDLER_VFUNC_TBL(obj)
MacaoHandler の持つバーチャル 関数テーブルを取得するためのアクセサである。
macao_handler_motion(handler, widget, event, gui)
MacaoHandler の持つバーチャル 関数テーブルにおけるメンバ(motion)へのアクセサである。見かけ上のバーチャル関数を定義する。
macao_handler_entry(handler, gui)
MacaoHandler の持つバーチャル 関数テーブルにおけるメンバ(entry)へのアクセサである。見かけ上のバーチャル関数を定義する。

構造体

本ファイルで定義される構造体の詳細を以下に示す。
MacaoHandlerTableEntry
マウスハンドラ生成のために用いる 関数テーブルのエントリを定義する構造体である。本テーブルは教師クラスIDをキーとして、 マウス操作ハンドラ関数を検索するために用いる。テーブルの実体は、 ソースファイルhandler.cにおいて本構造体の配列として定義される 静的オブジェクトとして実装される。
MacaoTeacherID id
テーブルのキーとなる教師クラスIDである。
MacaoHandlerFunc func
指定するキーに対応するマウス操作ハンドラ 関数の関数ポインタを格納する。
MacaoHandlerClass
マウス操作により教師信号を入力するための 処理を提供するクラスのバーチャル関数テーブルである。 MacaoHandlerはMalibObjectを継承する。マウス操作に関する処理を記述するバー チャル関数が追加される。
MalibObjectClass super
親クラスの内容を継承する。
int (* motion) (MacaoHandler* handler, GtkWidget* widget, GdkEventMotion* event,
                                MacaoGui* gui)
本関数ではマウス操作に関する 処理を記述する。
MacaoHandler
マウス操作により教師信号を入力するための 処理を提供するクラスの本体を定義する構造体である。
MalibObject super
親クラスの内容を継承する。
MacaoTeacher* teacher
対応する教師クラスへのポインタを保持する。
MacaoTeacherArg* arg
教師信号を格納するデータ領域へのポインタである。

ソースファイル

MacaoHandlerの各機能を実現する関数群は、ソースファイルhandler.cで記述 される。

関数

本ファイルで定義される関数の詳細を以下に示す。
macao_handler_delete (MacaoHandler* handler)
引数
本関数は以下の引数をとる。
MacaoHandler* handler
対象とするMacaoHandler(実体はそのサブクラス) オブジェクトへのポインタ。
返値
なし。
概要
マウスイベントハンドラオブジェクトを削除する。

macao_handler_get_creator (MacaoTeacherID id)
引数
本関数は以下の引数をとる。
MacaoTeacherID id
教師クラスID。
返値
対応するマウスイベントハンドラのコンストラクタに相当する関 数の関数ポインタ。
概要
マウスイベントハンドラのコンストラクタテーブルを検索し、 引数で与える教師クラスIDに対応するマウスイベントハンドラを 取得する。なおマウスイベントハンドラのコンストラクタが 格納されるテーブルは、handler.c の静的変数として定義される。

macao_handler_init (MacaoHandler* handler, MacaoTeacher* teacher, gpointer arg)
引数
本関数は以下の引数をとる。
MacaoHandler* handler
対象とするMacaoHandler(実体はそのサブクラス) オブジェクトへのポインタ。
MacaoTeacher* teacher
そのMacaoHandlerのサブクラスに対応する MacaoTeacherサブクラスのオブジェクトへのポインタ。
gpointer arg
教師信号データを格納するデータ領域へのポインタ。
返値
なし。
概要
マウスイベントハンドラオブジェクトを初期化する。

macao_handler_get_teacher (MacaoHandler* handler)
引数
本関数は以下の引数をとる。
MacaoHandler* handler
対象とするMacaoHandler(実体はそのサブクラス) オブジェクトへのポインタ。
返値
そのMacaoHandlerのサブクラスに対応する MacaoTeacherサブクラスのオブジェクトへのポインタを返す。
概要
そのMacaoHandlerのサブクラスが持つ、 MacaoTeacherサブクラスのオブジェクトへのポインタを取得する。

macao_handler_get_arg (MacaoHandler* handler)
引数
本関数は以下の引数をとる。
MacaoHandler* handler
対象とするMacaoHandler(実体はそのサブクラス) オブジェクトへのポインタ。
返値
教師信号を表すデータへのポインタを返す。
概要
教師信号を表す教師データへのポインタを汎用ポインタ形式で取 得する。整数型、実数型などプリミティブなデータ形式の場合は、 それらの変数へのポインタとして取扱う必要がある。

MacaoParts

概要

MacaoTrackが持つ個々のパラメータを調整するために、GUIインタフェースの パラメータ調整パネルに並べられるウィジットを生成するためのクラスである。 本クラスは抽象クラスであり実際には個々のウィジットクラス(MacaoPartsのサ ブクラス)に対応する具象クラスが本クラスのサブクラスとして定義される。

またこれらのサブクラスでは操作の実体も定義する。

ヘッダファイル

ヘッダファイル parts.h では、MacaoPartsに関するマクロ定義、 列挙型、構造体の定義、それらに関する型定義、およびソースファイル parts.c で定義され外部に公開される関数のプロトタイプ宣言が記述される。

構造体

本ファイルで定義される構造体の詳細を以下に示す。
MacaoPartsTableEntry
ウィジット生成のために用いる関数 テーブルのエントリを定義する構造体である。本テーブルはパラメータタイプをキーとして、 ウィジット生成関数を検索するために用いる。テーブルの実体は、 ソースファイルparts.cにおいて本構造体の配列として定義される 静的オブジェクトとして実装される。
MacaoParamType type
テーブルのキーとなるパラメータタイプである。
MacaoPartsFunc func
指定するキーに対応するウィジット生成関数の 関数ポインタを格納する。
MacaoParts
GUIインタフェースのパラメータ調整パネルに並べられる ウィジット生成クラスの本体を定義する構造体である。
MacaoParam* param
対応するパラメータオブジェクトへのポインタを 保持する。
GtkWidget* widget
パラメータ調整パネル上に並べられるウィジット へのポインタである。

ソースファイル

MacaoPartsの各機能を実現する関数群は、ソースファイルparts.cで記述 される。

関数

本ファイルで定義される関数の詳細を以下に示す。
macao_parts_get_creator (MacaoParamType type)
引数
本関数は以下の引数をとる。
MacaoParamType type
作成する部品に対するパラメータタイプ。
返値
対応するウィジットのコンストラクタを表す関数ポインタを返す。
概要
引数で指定するパラメータタイプに対応するウィジットのコンス トラクタを検索する。検索されたコンストラクタである関数を実 行すると、ウィジットクラスが生成される。ウィジットの コンストラクタが格納されるテーブルは、parts.c の静的変数と して定義される。

macao_parts_init (MacaoParts* parts, MacaoParam* param, GtkWidget* widget)
引数
本関数は以下の引数をとる。
MacaoParts* parts
対象とするMacaoPartsオブジェクト(実体はそのサ ブクラス)へのポインタ。
MacaoParam* param
対応するパラメータオブジェクトへのポインタ。
GtkWidget* widget
生成したGTK+ウィジットへのポインタ。
返値
なし。
概要
MacaoPartsオブジェクト(のサブクラス)を初期化する。

macao_parts_get_param (MacaoParts* parts)
引数
本関数は以下の引数をとる。
MacaoParts* parts
対象とするMacaoPartsオブジェクト(実体はそのサ ブクラス)へのポインタ。
返値
対応するMacaoParamオブジェクトへのポインタを返す。
概要
そのウィジットに対応するパラメータクラスのオブジェクトへの ポインタを取得する。

macao_parts_get_widget (MacaoParts* parts)
引数
本関数は以下の引数をとる。
MacaoParts* parts
対象とするMacaoPartsオブジェクト(実体はそのサ ブクラス)へのポインタ。
返値
作成したGtkWidgetオブジェクトへのポインタ。
概要
そのウィジットが生成したGTK+ウィジットへの ポインタを取得する。


next up previous contents
次へ: ウィジット 上へ: テストベッド・プログラム 戻る: テストベッド・プログラム   目次
Jun IIO 平成15年5月27日