サンプルソース

アルゴリズムの実装はサンプルソースを改変することで行います. サンプルソースはこちらからダウンロードしてください. ダウンロードしたパッケージには以下のファイルが含まれています.

Makefile : メイクファイル
alcon2011.h : ヘッダファイル
alcon2011_main.c : 入出力系を実装したソースファイル
user_function.c : アルゴリズムを実装するソースファイル
sample.ppm : 最も単純なテスト画像
sample.tr : 上記テスト画像の正解データ

アルゴリズムをC言語で実装する場合は上記ファイルをそのまま使用します.C++で実装する場合は,Makefile中の``CC = gcc''を``CC = g++''に修正し, .c拡張子のファイルを.ccや.cpp等に変更して使用してください.ソースの内容はC/C++の両者に対応しますので修正する必要はありません. まずはサンプルソースをそのままにコンパイルし,以下を実行することで環境設定に不備がないことを確認してください.

$ ./実行ファイル名 -s:sample.ppm -i:result.ppm -g:sample.tr

正しく実行できれば,以下のように勝敗判定の結果および得点が表示され,result.ppmと言う名前の画像ファイルが作成されるはずです.

認識結果の出力例 認識結果の画像描画例

認識結果の出力例

認識結果の画像描画例

アルゴリズム実装方法

アルゴリズムは``user_function.c''中の``user_function()''関数中に実装します.

void user_function
(
IMAGE image, // target image
HAND* hands // hand data
);

image変数には読み込んだ画像ファイルのデータが格納されています.これをもとに手の検出・勝敗判定を行います. 画像データはIMAGE構造体で定義されています.

typedef struct IMAGE{
unsigned int width; // size of the image (width)
unsigned int height; // size of the image (height)
unsigned char *data; // image data
}IMAGE;

dataには画素を赤緑青(各々8bit)の三原色で表したデータが順に並んでいます. これは,RGBRGBRGBRGB...のような並びになっています.RGB1セットが1画素に対応し,それが画像中の画素の数だけあります. 画素の順は「画像の左上から横に走査し,右端まで到達したときには1画素分下にずれる」ラスタスキャン方式になっています. このデータ構造から特定の画素値(x,y)を取り出す場合は以下の様にします.

unsigned char r = data[ (width*y + x ) * 3 + 0 ];
unsigned char g = data[ (width*y + x ) * 3 + 1 ];
unsigned char b = data[ (width*y + x ) * 3 + 2 ];
データのイメージ

認識結果はhands変数に書き込こんでおきます. 必ず専用の関数``set_result()''を用いてください.

void set_result
(
HAND* hands, // pointer of hands data
unsigned int x, // detected hand position-x
unsigned int y, // detected hand position-y
RESULT r // recognition result
);

第一引数は必ず``hands''としてください.第二以降の引数は認識結果です.例えば,x=100,y=200の位置に勝ちの手がある,と認識された時は,

set_result(hands, 100, 200, RESULT_WIN);

のようにします.[負け/あいこ]の場合は,第四引数に[RESULT_LOSE/RESULT_EVEN]を指定します.

本サンプルソースでは設定できる手の最大数を20としています.入力画像中にこの数を越える手が出現することはありませんが,アルゴリズムによってはこれを越える数が検出される可能性があります. その際には,set_result関数がエラーを返しますので注意してください.

サンプルデータ

各レベル毎にサンプルデータを用意しています.評価にはこれらサンプルデータも使用されます. サンプルデータのダウンロードはこちらから行ってください.

サンプル1-1 サンプル1-2 サンプル1-3
サンプル2-1 サンプル2-2 サンプル2-3
サンプル3-1 サンプル3-2 サンプル3-3

開発用仮想環境

本コンテストでは,環境設定の煩雑さやプラットフォームの違いによるプログラム挙動の違いをできるだけ少なくするために,仮想開発環境の配布を行っています. OSを含めた計算機環境をまるごと仮想化することで,プラットフォームに依存せずに共通の計算機環境を配布することができます. 仮想環境の再生には適度な計算機資源が必要です.具体的には,10GB以上の空き容量があり,1GB以上のメモリが搭載されている計算機上で再生することを推奨します.

導入方法

VMwarePlayerの導入

仮想環境の配布・再生にはいつくかの方法がありますが,普及率や無償での利用が可能なことから本コンテストではVMwarePlayerを用います(VMwareServer等でも結構です). 入手はこちらから行ってください. 自身が利用しているプラットフォームに応じたバイナリをダウンロードし実行することでインストールが行われます.

仮想開発環境の入手

仮想開発環境は本コンテスト側で用意したものを使用してください. ダウンロードはこちらから行うことができます.計算機環境をまるごと仮想化していますのでダウンロードファイルの容量が大きくなっています.ダウンロード時間には注意してください. 仮想開発環境は以下のように構成されています.

OS
eco-linux 10.10 (Ubuntu-10.10)
コンパイラ
gcc-4.4.5 / g++-4.4.5
エディタ
emacs-23
画像処理ライブラリ
OpenCV-2.1.0 / MIST-1.6.0
Webブラウザ
Firefox
その他
ssh / samba / cmake など

仮想開発環境の再生

VMwarePlayerでダウンロードした仮想開発環境を再生します. VMwarePlayerの起動画面から,[ホーム] > [仮想マシンを開く] を選択するとファイルダイアログが開くので,ダウンロードした仮想開発環境のディレクトリ内にある``Alcon2011.vmx''を指定してください.

仮想開発環境の再生1

[ホーム]の下に[Alcon2011]というアイコンが追加されるはずです.それを選択し[仮想マシンの再生]を行うと仮想開発環境が再生されます.あとは通常のLinuxの操作と同様です. ユーザー名とパスワードに関してはダウンロードファイルの中のreadme.txtを参照してください.

仮想開発環境の再生2 仮想開発環境の再生3

仮想開発環境にはサンプルソース(~/contest/sample_code)とサンプルデータ(~/contest/sample_data)が既に含まれていますので,それらを新たにダウンロードする必要はありません.

-->