2016/11/03

NyARToolKitCSを使ってみる

カメラ画像からマーカーの位置検出を行いたいので、C#で利用できるARライブラリを探してみました。

いろいろあるみたいですが、ARToolKitのC#版であるNyARToolKitCSを利用することにしました。

HPは下です。
NyARToolkit project
http://nyatla.jp/nyartoolkit/wp/

ソースをGithubで公開しているみたいなので、ダウンロードします。
Masterを利用してもいいのですが、キチンとReleaseされたVerのものをダウンロードします。
Releases · nyatla/NyARToolkitCS · GitHub
https://github.com/nyatla/NyARToolkitCS/releases

現時点では、Ver5.0.8がLatest releaseみたいです。
ここではじめはVer5.0.8を使ってみたのですが、エラーが出てしまい、私の力ではビルドできませんでした。
ですので、ここではVer4.1.1の使い方を説明します。
なので、Ver4.1.1をダウンロードします。

ダウンロードしたフォルダの下記ファイルをVisual Studio で開きます。
今回はVisual Studio 2012を使用します。
NyARToolkitCS-4.1.1\NyARToolkitCS-4.1.1\forFW2.0\NyARToolkitCS.sln

次にサンプルプログラムを動かしてみたいと思います。
まずは「CaptureTest」を右クリックして、「スタートアッププロジェクトに追加」します。

そして、ソシューションをリビルドします。
そうすると、下のようにエラーが出てしまいます。。。


ダウンロードしたソースのReadmeをよく見ると。
NyARToolkitCS-4.1.1\readme.ja.txt
「sandboxは実験的なものを集めてあるので、コンパイルできないかもしれません。」とあります。

なので、
sandboxはビルドの対象から外しましょう。
NyARToolKitCS.sandboxを右クリックして、プロジェクトのアンロードをします。

これでおkなので、もう一度ソリューションのビルドをしましょう。
エラーは出なくなったはずです。

それではデバッグで実行しましょう。
これで動くかと思いきや、エラーが出てしまいました。


 これが出る直接的な原因はわかりませんが、
 これはソリューションのプラットフォームを「AnyCPU」から「x86」にするとおkです。

 よし!じゃあ、こんどこそデバッグで実行。
 でも、またまたエラーが出ます。


「camera_para.datが見つからない」っていってます。
これは、先ほどの修正でAnyCPUからx86にしたので、実行ファイルが生成されるフォルダが変わってしまったことが原因です。
AnyCPUであれば、ここに実行ファイルができますが、
NyARToolkitCS-4.1.1\forFW2.0\sample\CaptureTest\bin\Debug
x86はここにできます。フォルダが一階層深いんですね。
NyARToolkitCS-4.1.1\forFW2.0\sample\CaptureTest\bin\x86\Debug

なので、相対パスで指定しているdatファイルの位置がずれて、見つけられなくなっています。
なので、Form1.csの下記コードの部分に赤字を追加します。

        private const String AR_CODE_FILE = "../../../../../../data/patt.hiro";
        private const String AR_CAMERA_FILE = "../../../../../../data/camera_para.dat";

3度目の正直で、もう一度実行します。
今度はきちんと実行されましたね。




このプロジェクトはシンプルでいいんですが、マーカーが表示されたときにグラフィックが描画されません。

次は描画されるやつをビルドします。「SimpleLiteD3d」です。
先ほどと同じように、スタートアップに設定して、
SimpleLiteD3d.cs内のコードも同じように ../ を追加します。

で、ビルドすると成功すると思うので、実行してください。
はい。毎度のことエラーになりましたね(笑)


このエラーをググると下のサイトにあたるので、この対処を行います。
NKY-TECH. ソフトウェア開発部: .NET Framework 4.0で混合モードのアセンブリを読み込めない旨のエラー
http://nky-tech-sdt.blogspot.jp/2010/02/net-framework-40.html

app.configを設定するといいようです。
でも、プロジェクト内にapp.configが見当たりませんので、作る必要があるようです。

作成するときのいい方法が簡単には見つからなかったので、下のようにして作ります。
SimpleLiteD3dプロジェクトを右クリックで「プロパティ」。下のように、適当に値を追加します。
これ自体はどうでもいい変更ですが、変更することでapp.configが作成されるようです。
 


そうするとプロジェクトにapp.configができるので、下をapp.configの2行目と3行目の間に挿入します。

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>

そして実行です。

おkでしたね。

長かったですが、これでマーカー検出とグラフィックのサンプルを実行できました。


0 件のコメント:

コメントを投稿