【備忘録】openFrameworks + Realsense + Nuitrack SDKでLicense例外が出た時の対処

前置き

これまでnoteは読み物っぽい記事をかくところにしようと思ってたんですが、実際にインタラクティブ系のプログラミングの記事や備忘録も書く場所が欲しいなあと思いつつ、思い立ったその時に書かないと永遠に書かないということが分かったのでこういった具体的なティップスもnoteに書いていくことにしました。

最初はQiitaにしようと思ったんだけれど、最近はプログラマーの人もnoteに書く人も増えてるっぽいし、あんまりツールが増えるのが好きではないので、noteでいいんではなかろうかと。というわけで、noteでは今後インタラクティブエンジニアとしてのリアルな記事が増えていくと思われます。


本題

前置きはこのくらいにして、本題。openFrameworks + Intel Realsense D435 + Nuitrackでスケルトンデータをとってみたかったので、PYRAMID FILM QUADRA INC.さんが公開されている下記の記事を参考に試してみたところ詰まったこと。(いきなりえらいピンポイントですが、インタラクティブエンジニアのリアルな備忘録ってそういうものですよね。)

”Intel RealSense Depth Camera D435とNuitrackを使って骨格情報検出してみる。”

念のため言っておきますが、詰まったのはこちらの記事が不正確だからではないです。とっても参考になるありがたーい記事です。Nuitrack本体のほうにトラップがあった。

〇開発環境
・Windows 10 Home
・CPU: Intel Core i7
・RAM: 8GB
・GPU: NVIDIA GTX1050i
・IDE: Visual Studio Community 2017

RealSenseのドライバーやopenFrameworks、Nuitrack自体は入れてあったのですが、前段階として、Nuitrack Online Proのライセンスを取得して、ちゃんとNuitrackのactivation_toolに入っているNuitrack.exeでライセンスのアクティベーションもして、無事動くことを確認しました。

画像1

トライアル版だと3分でこれが止まりますが、アクティベーションできてれば動き続けます。


無事Nuitrackのアクティベーションできたので、SDKをダウンロードして、Visual Studioでプロパティ設定をして(もちろん各パスは自分の環境に合わせて書き換えて)記事のコードをコピペして動かしたところ、まず下記のエラーが。

Configuration file ( D:/Nuitrack/nuitrack/nuitrack/data/nuitrack.config ) error: <unspecified file>(1): expected value

コピペして全然コード見ないでそのまま動かしたので、ofApp.cppの34行目

	Nuitrack::init("D:/Nuitrack/nuitrack/nuitrack/data/nuitrack.config");

init()のところでconfigファイルのパスの指定が自分の環境に合わせてなかったのでエラーがでました。まあ、これは当たり前ですね。
自分の場合は、CドライブのProgram FilesにNuitrack本体入れていたので、init()のパスを

Nuitrack::init("C:/Program Files/Nuitrack/nuitrack/nuitrack/data/nuitrack.config");

として、はい、これで動くっしょ、とRunしてみたら、動いた…あれっ!?LicenseNotAcuiredExceptionっていう例外を吐いて止まりました。

画像2

どういう事だ、ちゃんとライセンス買ってアクティベーションしたぞ…?


ということで、nuitrack.configファイルを見てみました。すると一番下のほうに、

"LicenseFile": "../license.json",

とライセンスファイルを指定しているところがある。相対パスで指定している。うむ、どうやらこいつが怪しい。
恐らくは、oFの実行ファイルの位置からこの相対パス読もうとして、無い!!って言っているのではなかろうか。

対処法

〇対処法その1
相対パスをフルパスに書き換えてしまいます。自分の環境ではこう。

"LicenseFile": "C:/Program Files/Nuitrack/nuitrack/nuitrack/data/license.json",

これで一応動きました。Nuitrack.exeのほうもちゃんと動く。

〇対処法その2
nuitrack.configファイルでのパス指定は相対パスのまま、oFの実行ファイルに合わせてlicense.jsonをコピーします。oFの実行ファイルは、例えば、nuitrack_testというプロジェクトを作った場合はapps>myApps>nuitrack_test>binの中に入ってますので、ここから、1階層上、つまりapps>myApps>nuitrack_testの中にlicense.jsonを突っ込めばよい。これでも動きました。
どうやら推理は当たりのようです。

動いたときはこんな感じ。(※コードをちょろっと弄ってジョイントの〇の色変えたり、ジョイントの番号を表示させてます。)

画像4

付録

とりあえずの解決をみた後、いろいろ検索してみたら、Nuitrackのフォーラムで同じような事例が見つかりました。
これとかこれ

一つ目の事例では、

If you setup the NUITRACK_HOME environment variable and dont use a custom nuitrack.config in the Init() call then this is not an issue.
Otherwise - yes you need to manually edit the path in the LicenceFile key

とか言ってるんだけれど、ちゃんと環境変数も設定してあるので解せぬ…。oFではディレクトリがらみのエラーは結構経験してるので、oF特有の問題なのでしょうか。

二つ目はちゃんと全部は読んでないんですが、とても重要なことが書かれている。

If you use a custom .config file you need to change a couple of the paths inside the config file as well.

The moment you change the path in the init() … the system also wants to start using that new path as the basis for the location of all the elements the system needs to access.

As such u will need to also have the /data/ and /middleware/ paths in locations relative to the same place … AND you may also need to make sure your licence.json file is in the correct relative location - OR edit the config file manually to make sure all the paths are correct.

You may be better off just using the nuitrack default path so that all the references work correctly.

つまりは、license.jsonの位置だけじゃなくって、/dataと/middlewareのパスもconfigファイルに書いてるから、それらの位置も合わせないとだめだぞ、ということですね。

とりあえずデバッグプログラムは走るけどな~、とか思ってoFプログラムウィンドウを×で閉じたところ、出ました。例外。

画像3

"NuitrackModule.dllで例外がスローされました。"と出てるので、上述の"/middleware"関連でしょうね。/middlewareの中にNuitrackModule.dllが入っているので。


というわけで、今回はlicenseの例外に対処してとりあえずプログラム動いたところまで。おそらくは/dataと/middlewareのパスもフルパスにすれば大丈夫なのでしょうけれど検証はまた後程。
検証出来たら続きを書きますね。
Nuitrack + oFの記事は結構少ないので、少しでも誰かの参考になれば幸いです。

この記事が気に入ったらサポートをしてみませんか?