OpenPool設置に興味を持って頂きありがとうございます!
まず、OpenPoolはDIYプロジェクトだという点をご了承下さい。DIY精神を持ってチャレンジして頂き、もし問題にぶつかったら、自分自身で解決できるだけの技術的知識やスキルも必要となります。
ひと通り全体に目を通してから、STEP1から始めましょう!
STEP1. 環境を確認する
1-1. 天井高
台と天井までの距離が180cm程度必要です(9フィート台の場合)。
またプロジェクタやKinect等を天井に設置する必要が有るため、その点も事前に確認して下さい。
1-2. 明るさ
日光が差し込まず、かつ照明をoffにできる部屋を推奨しています。通常のプロジェクターを使う場合と同様にお考え下さい(暗い方が良い)。
1-3. 配線・電源
Kinect 2 はUSB3.0を使いますが、USB3.0は延長できる長さには限りがあります。また、電源の位置(必要であればワット数)も確認して下さい。
※ビリヤード台をこれから調達する場合
ビリヤード台も一緒に導入する場合は、次の2点も先に確認しておきましょう。
・空間
通常、ビリヤードをプレイするためには、下記の広さを確保する必要があります。
詳細は「ビリヤード 広さ」などで検索してみてください。
- 9 ft : 590cm × 460cm (台: 290cm × 160cm + キュー: 約150cm × 両側)
- 7 ft : 520cm x 425cm (台: 220cm × 125cm + キュー: 約150cm × 両側)
・重さ
多くの場合問題ありませんが、一般的なビリヤード台の重さは下記となります。9フィート台でグランドピアノと同程度と言われています。
- 9 ft : 約400kg
- 7 ft : 約200-250kg
STEP2. 必要なものを準備する
2-1. ビリヤード関係
・ビリヤード台
9フィート台にかぎらず、7フィートや8フィートでもOpenPoolは動きます。
なお、OpenPoolでは、Brunswick Gold Crown 3の9フィート台を使用していました。
・ラシャ
ラシャの色は重要です。推奨はグレーです。
すでに持っているビリヤード台を使おうとする場合、ラシャがグリーンやレッドであるケースが多いかと思いますが、その場合もラシャだけはグレーへの変更を推奨しています。
・ボール、キュー、チョークその他のアイテム
一般的なものであれば、どんなものでも問題ありません。
2-2. Kinect 2 for Windows
Xbox用では動かないのでご注意下さい。
2-3. プロジェクタ
どんなものでも構いませんが、当然明るければ明るい方がベターです。
天井が低い場合は単焦点のものが必要になります。
OpenPoolチームではBenQのものを利用していました。
http://www.benq.us/product/projector/mw817st/
※プロジェクタ用マウンタ
天井に取り付けられされすれば何でも大丈夫です。OpenPoolチームでは「スパイダー」を使用していました。
http://theaterhouse.co.jp/p_spider/exp/spec.html
2-4. PC本体
おすすめのPCはIntel NUC D54250WYKです。
米国にお住いなら、こちらのショップをおすすめしています。
http://shop.magicboxsolutions.com/ultra-small-form-factor/
Kinect 2の要求するスペックは下記のとおりです。
・Kinect 2の推奨スペック
- OS: Windows 8.1
- メモリ: 4GB 以上
- Core i7 CPU 2.5GHz 以上
- USB 3.0ポート (Intel または Renesas チップセット)
- DX11対応グラフィックアダプタ (下記参照)
・Kinect2が推奨するグラフィックアダプタ
- Intel HD 4000 integrated display adapter (or better)
- ATI Radeon HD 5400 Series
- ATI Radeon HD 6570
- ATI Radeon HD 7800 (256bit GDDR5 2GB/1000MHz)
- NVidia Quadro 600
- NVidia GeForce GT 640
- NVidia GeForce GTX 660
- NVidia Quadro K1000M
・USB 3.0 Host Adapterについて
USB3.0を(PCI Expressで)増設している場合は、Gen-2に対応していることを確認して下さい。また、使える帯域がUSBスロットごとに変わってくるので、どのスロットにKinect2を接続するのが一番良いが、いくつか試して見てください(グラフィックカードのあるスロットに繋げるのが良い場合が多いようです)。
2-5. PC周辺機器
・キーボード・マウス (ワイヤレス推奨)
PCの設置場所にもよりますが、ワイヤレスのものを用意しておくことを推奨します。
・モニタ
プロジェクタがビリヤード台に投影するので必須ではないですが、モニタもあったほうが良いでしょう。手持ちに余っているモニタがあれば、それで全く問題ありません。
・スピーカー
サンプルエフェクトには音は付属していませんので、必須ではありません。音の出るエフェクトを作りたい場合などには用意しましょう。
STEP3. PCに必要なものをインストールする
上記STEP2 で用意したPCに、必要なソフトウェアをインストールしましょう。
3-1. Kinect SDK 2.0
下記のリンクからインストールします。
http://www.microsoft.com/en-us/download/details.aspx?id=43661
3-2. OpenCV
OpenCVをダウンロードします。動作確認をしているバージョンは OpenCV 2.4.9 となります。
http://opencv.org/downloads.html
ダウンロードしたら、.exeファイルを実行します。フォルダを選ぶと解凍が始まるので、しばらく待ちます。
出来たopencvフォルダを、適当な場所に設置します。
今回はCドライブ直下に設置しました。
次に、
C:\OPENCV\BUILD\X64\VC11\BIN
にパスを通します。
“path”と検索するとシステムのプロパティにアクセスできます。
「環境変数」から、「システム環境変数」の「Path」を「編集」していきます。
一番最後に、セミコロンで区切った後、
C:\OPENCV\BUILD\X64\VC10\BIN
を追記して下さい。
3-3. OpenPool Core GUI
下記のリンクからダウンロードして、デスクトップに設置します。
https://www.dropbox.com/s/zu7o841w9ypvhh0/OpenPoolCoreGUI-x64.zip
※32bit版Windowsを使用している場合、こちらをダウンロードしてください:
https://www.dropbox.com/s/587297rarqd7eia/OpenPoolCoreGUI-x86.zip
3-5. サンプルエフェクト
サンプルエフェクトを下記のリンクからダウンロードして、デスクトップに設置します。
https://dl.dropboxusercontent.com/u/47108695/OpenPool/UnityModule-x64.zip
※32bit版Windowsを使用している場合、こちらをダウンロードしてください:
https://dl.dropboxusercontent.com/u/47108695/OpenPool/UnityModule-x86.zip
3-6. PoolController
下記のリンクからダウンロードして、デスクトップに設置します。
https://dl.dropboxusercontent.com/u/47108695/OpenPool/PoolController-x64.zip
※32bit版Windowsを使用している場合、こちらをダウンロードしてください:
https://dl.dropboxusercontent.com/u/47108695/OpenPool/PoolController-x86.zip
STEP4. 設置する
4-1. ビリヤード台
ビリヤード台の設置はプロに任せましょう。ビリヤード台は完璧な水平を保つ必要があるなど、設置にはプロの技が必要です。
4-2. Kinect
Kinectは、台のちょうど中央の真上につけるのが理想です。高さが足りているかどうか不安な場合は、実際にKinectが捉えている画像を表示させることで確認することができます。(STEP5 で説明するOpenPool Core GUIを起動することで見られます)
4-3. プロジェクタ
天井の適当な場所に設置します。
プロジェクタを普通に使い際は、テーブルに置いた場合は上方向へ、天井につけた場合は壁に向かって下方向へ投影することになると思います。そのため、今回のように真下を照らす場合も、どちらかに偏った位置に設置する必要があります。実際に光を出しながら、設置場所を調整して下さい。ビリヤード台全体に投影できていればOKです。
4-4. PC
PCを適当な位置に設置して、プロジェクタ、Kinectと接続して下さい。
4-5. Pocket Detector
ポケットデテクタというポケットに取り付けて落球を検知する装置を自作することもできます。(ただし、ハンダ付けなどの知識が必要です。現状ではご自身で作成して頂く必要があります。)
https://github.com/openpool/openpool-boost-pocket
STEP5. キャリブレーションをする
5-1. OpenPool Core GUIを起動
起動すると下記のような画面が表示されます。基本的にはそのままGoを押してOKです。(別のマシンでエフェクトを動かす場合は、送信先のマシンのIPとポートを指定できます。)
※起動時にopencv146.dllがないというエラーが出た場合、OpenCVにPATHが通っていない可能性があります。上記STEP4の3-2 「PATHの通し方」を参照して下さい。
※その他起動しない場合は、.NET Frameworkの未インストールが原因の可能性があります。下記からインストールを試して下さい。
http://www.microsoft.com/ja-jp/download/details.aspx?id=17851
カメラ位置の調整
左上の画面内をドラッグすることで、キャプチャする領域を指定できます。ビリヤード台のプレイエリアにあわせて範囲指定をして下さい。
下のプレビュー画面には、選択した範囲を切り出した画像が表示されます。
・キャリブレーションのパラメータ調整
パラメーターは上から順に
・スレッショルドの値(近いほう)
・スレッショルドの値(遠いほう)
・Blob size(最小値)
・Blob size(最大値)
・ノイズ削減
・ボールスムージング
・直前のボールとみなす距離の値
となっています。下記で順番に説明します。
・スレッショルド
スレッショルドの近いほうと遠いほうの間の距離にあるオブジェクトのみを検出します。ビリヤード台表面ぎりぎりからボールの高さくらいまでの間のみを検出領域にすることで、ボールだけを検出することができます。
・Blob size
スレッショルドを設定すると、それに基づいて距離データを処理し、物体の塊検出を行います。検出された塊は全体プレビュー画面上では赤い枠で囲まれて表示されます。
これらの検出された塊のうち、ボールだとみなす最小値と最大値をこのBlob size設定で設定します。これにより、最小値以下の塊や最大値以上の塊は無視され、指定した範囲内の塊がボールだとみなされ、緑の丸で表示されます。
・ノイズ削減
この機能は、キネクトのノイズを減らすために、画像処理の二値化処理でよく使用されるErode / Dilateによる高周波成分の除去を行います。値を大きくするほど小さなノイズがなくなりますが、全体的に形状がぼんやりしてしまいます。
・スムージング
この機能は、直前の数フレームの情報をもとにボールの座標を平滑化する機能です。もともとは、ボールが止まっていても、Kinectの特性のせいで、検出されるボールの位置がプルプルと微妙に振動してしまい、最終的なエフェクトの見た目に影響があるという問題を解決するために作られました。
smoothingのスライダーで、何フレーム前のボールの位置まで参考にしてスムージングするかを決めます。値が多いほどボール座標の振動が抑えられますが、ボールが移動したときには検出座標がよりボールの後ろからついてくるようになります。全体プレビュー画面内では、参照しているボールの座標が白い線でつながって見えます。
このスムージングを行う際に、直前のフレームのなかにあるボールのうち、現在のボールから一番近いボールを同じボールとみなしています。ただし、いくら一番近いものを選ぶといっても、ある程度距離には限度を設けておかないと、誤認識をする恐れが大きくなります。それを設定するのが、最後のスライダーです。
値を小さくすればするほど、直前のボールと判定する距離が短く厳しくなるので、ボールが早く移動するとスムージングが効かなくなります。値を大きくすると早く移動していてもスムージングが効くようになりますが、代わりに本来違うボールを直前のボールとして誤認識する確率も上がります。
・無視領域の設定
全体プレビュー画面をドラッグするとボールが検出されていても無視する領域を設定できます。何度もドラッグすればたくさん領域をセットできます。全部リセットしたいときはResetボタン、直前の一個だけ無視したいときはundoボタンを押して下さい。
以下の領域のセッティングは、プログラム終了時にconfig.xmlというファイルに自動的に保存されます。
・左右のカメラのエリア指定領域
・右側のトラックバーたちの設定値
無視領域とIPアドレス、ポート番号については現状保存されません。
5-2. サンプルエフェクトを起動
ダウンロードしたサンプルエフェクトを起動します。
Screen Resolutionは、適宜合わせて下さい。
Windowedはチェックを外して下さい。
するとエフェクトが起動します。
続いて、PoolControllerでエフェクトの調整を行います。
5-3. PoolControllerを起動
PoolControllerは、Unityカメラのポジション (X,Y,Z)、回転 (X,Y,Z)、トリム (X,Y,W,H)を指定します。
お疲れ様でした!無事OpenPoolが起動できたでしょうか?