次へ: ウィジット
上へ: テストベッド・プログラム
戻る: テストベッド・プログラム
  目次
Subsections
本節では、テストベッド・プログラムの本体部分を構成するへッダファイルおよびソース
ファイルについての解説を行なう。ただし個々のウィジットクラスの親クラスに
相当するMacaoPartsおよび同じくマウスハンドラクラスの親クラスに相当するMacaoHandler
クラスの説明を含む。これらは抽象クラスとして定義され、個別の実装は
実際にはサブライブラリに含まれる各クラスが提供する。
テストベッド・プログラムのメインプログラムであり、プログラムmacaoのエン
トリポイントを与える。現時点での実装では、プログラムmacaoはコマンドライ
ン引数をとらず、単独で実行が行なわれるように設定されている(全ての設定
は、ユーザのホームディレクトリ直下に隠しファイルとして用意される設定ファ
イルに記述する内容で指定される)。
テストベッド・プログラムの本体を成すメインプログラムは、ソースファイルmacao.cで記述
される。
paragraph関数 本ファイルで定義される関数の詳細を以下に示す。
- 引数
- 本関数は以下の引数をとる。
- int argc
- コマンドライン引数の数である。使用しない。
- char* argv[]
- コマンドライン引数テーブルへのポインタ。使用しない。
- 返値
- 正常に実行が終了した場合には0を、問題が生じた場合はそれ以
外の値を返す。
- 概要
- テストベッド・プログラムmacaoの処理の概略は、以下の手順で
行なわれる。
- GTK+、MAlibなど必要なライブラリの初期化を行なう。
- MAlibフレームワークを利用した、処理オブジェクトの生
成と処理手順リンクの作成を行なう。
- 関数 macao_gui_new によるGUI設定を行なう。
- MAlib - GTK+ のメインループに移行する。
マウス操作による教師信号の入力やモードの選択などの対話的処
理は、GTK+ により提供されるイベントハンドリングの仕組みを利
用したイベント駆動型プログラミングとして実現されている。
テストベッド・プログラムのGUI設定を行なうクラスである。
ユーザ・インタフェースを提供するGUI部品の調整と、イベントハンドリングの
設定によるイベント駆動処理の準備が主な機能である。
ヘッダファイル gui.h では、MacaoGuiに関するマクロ定義、
列挙型、構造体の定義、それらに関する型定義、およびソースファイル
gui.c で定義され外部に公開される関数のプロトタイプ宣言が記述される。
本ファイルで定義されるマクロ定義の詳細を以下に示す。
Fileメニューを表すメニューパス文字列である。
File → Load Training Data
メニューを表すメニューパス文字列である(未使用)。
File → Save Training Data
メニューを表すメニューパス文字列である(未使用)。
File → Quitメニューを表すメニューパス文字列である。
トレーニングデータ
の読み込みに失敗した場合の警告メッセージ文字列である(未使用)。
トレーニングデータ
の書き込みに失敗した場合の警告メッセージ文字列である(未使用)。
パラメータ
の読み込みに失敗した場合のエラーメッセージ文字列である。
パラメータ
の書き込みに失敗した場合のエラーメッセージ文字列である。
本ファイルで定義される列挙型の詳細を以下に示す。
テストベッド・プログラムの実行モードの種別を表す列挙型である。
現在は未使用の列挙型で、将来の予約用である。
- MACAO_GUI_MODE_RUN
- テストベッドの認識実行モードを示す(現在は未使用)。
- MACAO_GUI_MODE_TEACH
- テストベッドの学習実行モードを示す(現在は未使用)。
- MACAO_GUI_MODE_NUM
- MacaoGuiMode の要素数を表す。
本ファイルで定義される構造体の詳細を以下に示す。
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で記述
される。
本ファイルで定義される関数の詳細を以下に示す。
- 引数
- 本関数は以下の引数をとる。
- MalibGtkDisplay** displays
- 結果を表示するMalibGtkDisplayオブ
ジェクト配列(ポインタの配列)へのポインタ。
- MacaoTrack* track
- 対象とするMacaoTrackオブジェクトへのポインタ。
- MacaoRecog* recog
- 対象とするMacaoRecogオブジェクトへのポインタ。
- 返値
- 生成されたMacaoGuiオブジェクトへのポインタ。
- 概要
- MacaoGuiのコンストラクタである。
メモリ領域の確保の他、各パラメータの読み込みによるオブジェ
クトの初期化、GUI部品の配置と設定まで、GUIの初期化に関する
全ての処理を担当する。
- 引数
- 本関数は以下の引数をとる。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- int index
- 書き換えを行なう対象のMalibGtkDisplay番号。
インデクスの対応は以下に示すとおりである。
| 番号 |
対象 |
| 0 |
入力画像(ハーフサイズ) |
| 1 |
MacaoTrack出力 |
| 2 |
MacaoRecog出力 |
- 返値
- なし。
- 概要
- 出力画像の再描画を行なう。ポーズ時に教師信号を入力するため
のマウスハンドラ関数から利用される。
- 引数
- 本関数は以下の引数をとる。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- MalibGtkDisplay** displays
- 結果を表示するMalibGtkDisplayオブ
ジェクト配列(ポインタの配列)へのポインタ。
- GtkWidget** panels
- パラメータ設定領域用パネルウィジットの配列
(MacaoTrack、MacaoRecogに対応する2個のオブジェクトから成
る配列である)へのポインタ。
- MacaoHandler* handler
- マウスイベントハンドラオブジェクトへの
ポインタ。
- 返値
- なし。
- 概要
- GUIウィジットのセットアップを行なう。
- 引数
- 本関数は以下の引数をとる。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- GtkWidget** widgets
- 中に含むウィジット配列(各ウィジットへのポ
インタを格納する配列)へのポインタ。
- 返値
- 左側のパネルを表すGtkWidgetオブジェクトへのポインタを返す。
- 概要
- テストベッド・プログラムは大きく左右のパネルに分割できる。
本関数は左側のパネルを設定し、そのパネルウィジットへのポイ
ンタを返す。
- 引数
- 本関数は以下の引数をとる。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- GtkWidget** widgets
- 中に含むウィジット配列(各ウィジットへのポ
インタを格納する配列)へのポインタ。
- 返値
- 右側のパネルを表すGtkWidgetオブジェクトへのポインタを返す。
- 概要
- テストベッド・プログラムは大きく左右のパネルに分割できる。
本関数は右側のパネルを設定し、そのパネルウィジットへのポイ
ンタを返す。
- 引数
- 本関数は以下の引数をとる。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- 返値
- コントローラ領域を表すGtkWidgetオブジェクトへのポインタを返す。
- 概要
- 右上に設置されるコントロールパネルを構成するウィジェットを
作成する。
- 引数
- 本関数は以下の引数をとる。
- MacaoTrack* track
- 対応するMacaoTrackオブジェクトへのポインタ。
- 返値
- パラメータ設定パネルを表すGtkWidgetオブジェクトへのポインタを返す。
- 概要
- 引数で示すMacaoTrackオブジェクトの持つパラメータを解析し、
対応するウィジット部品を順番に構成、パラメータ設定パネルへと並べる。
- 引数
- 本関数は以下の引数をとる。
- MacaoParam* param
- 生成するウィジットの対象とするMacaoParamオブジェクトへのポインタ。
- 返値
- ウィジットクラスが提供するGtkWidgetオブジェクトへのポインタを返す。
- 概要
- パラメータ設定パネルに埋め込むべきウィジットを作成する。
作成されるウィジットは、引数で与えるパラメータクラスに対応
するウィジットである。実際には、ウィジットコンストラクタテー
ブルを検索して得られるウィジットのコンストラクタを用いて
MacaoPartsのサブクラスとなるウィジットクラスを生成し、その後で、
そのウィジットが持つGTK+ウィジットによる部品へのポインタを返す。
- 引数
- 本関数は以下の引数をとる。
- GtkWidget* widget
- フレームを作成する対象となるGTK+ウィジットへのポインタ。
- unsigned char* label
- フレームのラベルを表す文字列へのポインタ。
- 返値
- 作成したフレーム付きGtkWidgetオブジェクトへのポインタを返す。
- 概要
- 引数で与えるオブジェクトに、ラベル付きのフレームを与える。
- 引数
- 本関数は以下の引数をとる。
- GtkWidget* widget
- アスペクトフレームを作成する対象となるGTK+ウィジットへのポインタ。
- unsigned char* label
- アスペクトフレームのラベルを表す文字列へのポインタ。
- 返値
- 作成したアスペクトフレーム付きGtkWidgetオブジェクトへのポインタを返す。
- 概要
- 引数で与えるオブジェクトに、ラベル付きのアスペクトフレームを与える。
- 引数
- 本関数は以下の引数をとる。
- GtkWidget* button
- PAUSEボタンウィジットへのポインタが設定される。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- 返値
- なし。
- 概要
- PAUSEボタンによる処理のトグル動作を実現するための、コール
バック関数である。PAUSEボタンのクリックによりコールバックされ、
MalibSinkの処理停止・再開機能を利用して処理のトグル動作を実
現する。
- 引数
- 本関数は以下の引数をとる。
- GtkWidget* button
- ENTRYボタンウィジットへのポインタが設定される。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- 返値
- 常にTRUEを返す。
- 概要
- ENTRYボタン操作に対応するコールバック関数を定義する。
教師信号を発生し、学習処理を呼び出す。
- 引数
- 本関数は以下の引数をとる。
- GtkWidget* widget
- マウスイベントを入力するGTK+ウィジットが設
定される。
- GdkEvent* event
- マウスイベントオブジェクトへのポインタが与え
られる。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- 返値
- 処理が正しく行なわれた場合はTRUEを、そうでない場合、
マウスハンドラが提供する機能がある場合にはその処理結果を返
す。
- 概要
- 教師信号を与えるマウス操作に関し、そのマウスイベントの取り
扱いを定義する。マウスイベントのコールバック関数である。
- 引数
- 本関数は以下の引数をとる。
- GtkWidget* widget
- シグナルを発生したGTK+ウィジットへのポインタ。
- MacaoGui* gui
- 対象とするMacaoGuiオブジェクトへのポインタ。
- 返値
- なし。
- 概要
- プログラムを正常終了する。GTK+のメインループを終了し、
パラメータファイルへ現在確保されているパラメータの値を
全て保存した後で終了する。
マウス操作により教師信号を入力するための処理を提供する
クラスである。本クラスは抽象クラスであり、個々の実装は、
個別の教師クラスに対応する本クラスのサブクラスとして実装される。
ヘッダファイル handler.h では、MacaoHandlerに関するマクロ定義、
列挙型、構造体の定義、それらに関する型定義、およびソースファイル
handler.c で定義され外部に公開される関数のプロトタイプ宣言が記述される。
本ファイルで定義されるマクロ定義の詳細を以下に示す。
MacaoHandler の持つバーチャル
関数テーブルを取得するためのアクセサである。
MacaoHandler の持つバーチャル
関数テーブルにおけるメンバ(motion)へのアクセサである。見かけ上のバーチャル関数を定義する。
MacaoHandler の持つバーチャル
関数テーブルにおけるメンバ(entry)へのアクセサである。見かけ上のバーチャル関数を定義する。
本ファイルで定義される構造体の詳細を以下に示す。
マウスハンドラ生成のために用いる
関数テーブルのエントリを定義する構造体である。本テーブルは教師クラスIDをキーとして、
マウス操作ハンドラ関数を検索するために用いる。テーブルの実体は、
ソースファイルhandler.cにおいて本構造体の配列として定義される
静的オブジェクトとして実装される。
- MacaoTeacherID id
- テーブルのキーとなる教師クラスIDである。
- MacaoHandlerFunc func
- 指定するキーに対応するマウス操作ハンドラ
関数の関数ポインタを格納する。
マウス操作により教師信号を入力するための
処理を提供するクラスのバーチャル関数テーブルである。
MacaoHandlerはMalibObjectを継承する。マウス操作に関する処理を記述するバー
チャル関数が追加される。
- MalibObjectClass super
- 親クラスの内容を継承する。
- int (* motion) (MacaoHandler* handler, GtkWidget* widget, GdkEventMotion* event,
- MacaoGui* gui)
- 本関数ではマウス操作に関する
処理を記述する。
マウス操作により教師信号を入力するための
処理を提供するクラスの本体を定義する構造体である。
- MalibObject super
- 親クラスの内容を継承する。
- MacaoTeacher* teacher
- 対応する教師クラスへのポインタを保持する。
- MacaoTeacherArg* arg
- 教師信号を格納するデータ領域へのポインタである。
MacaoHandlerの各機能を実現する関数群は、ソースファイルhandler.cで記述
される。
本ファイルで定義される関数の詳細を以下に示す。
- 引数
- 本関数は以下の引数をとる。
- MacaoHandler* handler
- 対象とするMacaoHandler(実体はそのサブクラス)
オブジェクトへのポインタ。
- 返値
- なし。
- 概要
- マウスイベントハンドラオブジェクトを削除する。
- 引数
- 本関数は以下の引数をとる。
- MacaoTeacherID id
- 教師クラスID。
- 返値
- 対応するマウスイベントハンドラのコンストラクタに相当する関
数の関数ポインタ。
- 概要
- マウスイベントハンドラのコンストラクタテーブルを検索し、
引数で与える教師クラスIDに対応するマウスイベントハンドラを
取得する。なおマウスイベントハンドラのコンストラクタが
格納されるテーブルは、handler.c の静的変数として定義される。
- 引数
- 本関数は以下の引数をとる。
- MacaoHandler* handler
- 対象とするMacaoHandler(実体はそのサブクラス)
オブジェクトへのポインタ。
- MacaoTeacher* teacher
- そのMacaoHandlerのサブクラスに対応する
MacaoTeacherサブクラスのオブジェクトへのポインタ。
- gpointer arg
- 教師信号データを格納するデータ領域へのポインタ。
- 返値
- なし。
- 概要
- マウスイベントハンドラオブジェクトを初期化する。
- 引数
- 本関数は以下の引数をとる。
- MacaoHandler* handler
- 対象とするMacaoHandler(実体はそのサブクラス)
オブジェクトへのポインタ。
- 返値
- そのMacaoHandlerのサブクラスに対応する
MacaoTeacherサブクラスのオブジェクトへのポインタを返す。
- 概要
- そのMacaoHandlerのサブクラスが持つ、
MacaoTeacherサブクラスのオブジェクトへのポインタを取得する。
- 引数
- 本関数は以下の引数をとる。
- MacaoHandler* handler
- 対象とするMacaoHandler(実体はそのサブクラス)
オブジェクトへのポインタ。
- 返値
- 教師信号を表すデータへのポインタを返す。
- 概要
- 教師信号を表す教師データへのポインタを汎用ポインタ形式で取
得する。整数型、実数型などプリミティブなデータ形式の場合は、
それらの変数へのポインタとして取扱う必要がある。
MacaoTrackが持つ個々のパラメータを調整するために、GUIインタフェースの
パラメータ調整パネルに並べられるウィジットを生成するためのクラスである。
本クラスは抽象クラスであり実際には個々のウィジットクラス(MacaoPartsのサ
ブクラス)に対応する具象クラスが本クラスのサブクラスとして定義される。
またこれらのサブクラスでは操作の実体も定義する。
ヘッダファイル parts.h では、MacaoPartsに関するマクロ定義、
列挙型、構造体の定義、それらに関する型定義、およびソースファイル
parts.c で定義され外部に公開される関数のプロトタイプ宣言が記述される。
本ファイルで定義される構造体の詳細を以下に示す。
ウィジット生成のために用いる関数
テーブルのエントリを定義する構造体である。本テーブルはパラメータタイプをキーとして、
ウィジット生成関数を検索するために用いる。テーブルの実体は、
ソースファイルparts.cにおいて本構造体の配列として定義される
静的オブジェクトとして実装される。
- MacaoParamType type
- テーブルのキーとなるパラメータタイプである。
- MacaoPartsFunc func
- 指定するキーに対応するウィジット生成関数の
関数ポインタを格納する。
GUIインタフェースのパラメータ調整パネルに並べられる
ウィジット生成クラスの本体を定義する構造体である。
- MacaoParam* param
- 対応するパラメータオブジェクトへのポインタを
保持する。
- GtkWidget* widget
- パラメータ調整パネル上に並べられるウィジット
へのポインタである。
MacaoPartsの各機能を実現する関数群は、ソースファイルparts.cで記述
される。
本ファイルで定義される関数の詳細を以下に示す。
- 引数
- 本関数は以下の引数をとる。
- MacaoParamType type
- 作成する部品に対するパラメータタイプ。
- 返値
- 対応するウィジットのコンストラクタを表す関数ポインタを返す。
- 概要
- 引数で指定するパラメータタイプに対応するウィジットのコンス
トラクタを検索する。検索されたコンストラクタである関数を実
行すると、ウィジットクラスが生成される。ウィジットの
コンストラクタが格納されるテーブルは、parts.c の静的変数と
して定義される。
- 引数
- 本関数は以下の引数をとる。
- MacaoParts* parts
- 対象とするMacaoPartsオブジェクト(実体はそのサ
ブクラス)へのポインタ。
- MacaoParam* param
- 対応するパラメータオブジェクトへのポインタ。
- GtkWidget* widget
- 生成したGTK+ウィジットへのポインタ。
- 返値
- なし。
- 概要
- MacaoPartsオブジェクト(のサブクラス)を初期化する。
- 引数
- 本関数は以下の引数をとる。
- MacaoParts* parts
- 対象とするMacaoPartsオブジェクト(実体はそのサ
ブクラス)へのポインタ。
- 返値
- 対応するMacaoParamオブジェクトへのポインタを返す。
- 概要
- そのウィジットに対応するパラメータクラスのオブジェクトへの
ポインタを取得する。
- 引数
- 本関数は以下の引数をとる。
- MacaoParts* parts
- 対象とするMacaoPartsオブジェクト(実体はそのサ
ブクラス)へのポインタ。
- 返値
- 作成したGtkWidgetオブジェクトへのポインタ。
- 概要
- そのウィジットが生成したGTK+ウィジットへの
ポインタを取得する。
次へ: ウィジット
上へ: テストベッド・プログラム
戻る: テストベッド・プログラム
  目次
Jun IIO
平成15年5月27日