スキップしてメイン コンテンツに移動

OpenCVをCMakeして64bit版OpenNIを使う方法

OpenCVをCMakeでコンパイルするときにWITH_OPENNIオプションを付加することになる。だが64bit版のOpenNI、PrimeSensorを使っているとCMakeでConfigureしたときに、OPENNI_LIB_DIR、OPENNI_PRIME_SENSOR_MODULE_BIN_DIRに値が入らない(何を入力しても空白になってしまう)。

どうやら64bit版を使うにはOpenCVFindOpenNI.cmakeの変更が必要でした。その手順メモとなります。

【環境、バージョン】
Windows7
OpenNI win64 1.5.2.23
PrimeSense win64 5.1.0.41
OpenCV 2.3.1
cmake 2.8.7 x86

【手順】

  1. Where is the source codeに設定してあるフォルダ配下にあるOpenCVFindNI.cmakeを開く。

  2. 以下の内容に合わせて二箇所修正する。

  3. 修正箇所は Finding OpenNI in windows 64bit OpenCVFindOpenNI.2.patch を参考にしました。

    ■20~21行目
    ・修正前


    find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS $ENV{OPEN_NI_INCLUDE} "/usr/include/ni" "/usr/include/openni" "c:/Program Files/OpenNI/Include" DOC "OpenNI c++ interface header")
    find_library(OPENNI_LIBRARY "OpenNI" PATHS $ENV{OPEN_NI_LIB} "/usr/lib" "c:/Program Files/OpenNI/Lib" DOC "OpenNI library")


    ・修正後


    if(WIN32)
    if(NOT (MSVC64 OR MINGW64))
    find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "$ENV{OPEN_NI_INSTALL_PATH}Include" DOC "OpenNI c++ interface header")
    find_library(OPENNI_LIBRARY "OpenNI" PATHS $ENV{OPEN_NI_LIB} DOC "OpenNI library")
    else()
    find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "$ENV{OPEN_NI_INSTALLPATH64}Include" DOC "OpenNI c++ interface header")
    find_library(OPENNI_LIBRARY "OpenNI64" PATHS "$ENV{OPEN_NI_LIB64}" DOC "OpenNI library")
    endif()
    elseif(UNIX OR APPLE)
    find_file(OPENNI_INCLUDES "XnCppWrapper.h" PATHS "/usr/incude/ni" "/usr/include/openni" DOC "OpenNI c++ interface header")
    find_library(OPENNI_LIBRARY "OpenNI" PATHS "/usr/lib" DOC "OpenNI library")
    endif()


    ■27行目
    ・修正前


    find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore.dll" PATHS "c:/Program Files/Prime Sense/Sensor/Bin" DOC "Core library of PrimeSensor Modules for OpenNI")


    ・修正後


    if(NOT (MSVC64 OR MINGW64))
    find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore.dll" PATHS "$ENV{OPEN_NI_INSTALL_PATH}../PrimeSence/Sensor/Bin" DOC "Core library of PrimeSensor Modules for OpenNI")
    else()
    find_file(OPENNI_PRIME_SENSOR_MODULE "XnCore64.dll" PATHS "$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/SensorKinect/Bin64" DOC "Core library of PrimeSensor Modules for OpenNI")
    endif()


    OpenCVFindOpenNI.2.patch ではパスが"$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/Sensor/Bin64"でしたが、私の環境では"$ENV{OPEN_NI_INSTALL_PATH64}../PrimeSense/SensorKinect/Bin64"だったので変更してあります。もしかしたらバージョン、あるいは人の環境によってそれぞれなのかもしれません。

  4. 修正したOpenCVFindNI.cmakeを保存する。

  5. OPENNI_LIB_DIRにC:/Program Files/OpenNI/Lib64、OPENNI_PRIME_SENSOR_MODULE_BIN_DIRにC:/Program Files/PrimeSense/SensorKinect/Bin64を設定して、Configureボタンをぽちっとなする。

  6. エラーが出ることなく、それぞれの値が設定されていることを確認する。

  7. こっからはGenrateしていつもの流れへ。

  8. 以上です。

コメント

このブログの人気の投稿

Excelのマクロの差分もGitHubみたいに見たいよね

なんやかんやでまだ残っているExcelマクロ。修正したはいいが、差分が・・・。 Google先生に聞いてみるとWinMergeでできるらしいが、なぜかうまくいかない。 そう、WinMergeもExcelもバージョンが新しくなっていたのでうまくいかなかったみたい。 前提は Excel 2013 WinMerge 2.14.0-jp63 over です。 以下差分を確認するための手順です。 WinMerge をインストール ここから WinMerge の2.14.0-jp-63 より新しいバージョンをダウンロード 画面に従ってぽちぽち押していけばいい。 ただし・・・このときに必ずカスタムインストールで プラグイン にチェックを入れること!!(このプラグインを利用します) WinMerge のプラグインの設定変更(やらなくてもOK) WinMerge を起動 プラグイン → プラグインの設定 → CompareMSExcelFiles.sct をダブルクリック ”ワークブックの情報を複数ファイルに展開する” にチェックを入れる Excel の設定変更 ファイル → オプション → セキュリティセンター → セキュリティ センターの設定 ボタンを押下 マクロの設定 を選択 ”VBA プロジェクト オブジェクト モデルへのアクセスを信頼する” にチェックを入れる WinMerge で差分を表示する WinMerge を起動して、比較したいファイルを二つ選択する プラグイン → 展開プラグインの選択 → ファイル展開プラグイ に CompareMSExcelFiles.sct を選択して OK ボタンを押下する 各シートの差分と合わせて、*.bas の形式でマクロの差分が表示される(はず)

間違ったフォーマットのプログラムじゃないんだけど

以下エラーに対し、 ファイルまたはアセンブリ 'SSPI'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 以下環境で対応した話です。 VisualStudio2012(C# ASP.NET MVC4.0) IIS7.5 とあるところのdllを使用中 ASP.NETをIISに発行しようとしたら、上記エラーが発生。 他のプロジェクトでは問題なく発行できているのに、 何かと思ってみたら、google先生に尋ねてみると、 DLLファイルの対象プラットフォーム(32bit/64bit)が異なる とのことでした。 このサイトでは対処方法として、 運用環境のプラットフォームに合わせ、適切なランタイムファイルを配布してください。 と記載されていますが、今回の私のようにとあるところのdllを使用している場合などは、 そうもいかない場合もあるでしょう。 そこでdllを変更できない場合には、 IISのアプリケーションプールの設定で、 32bitアプリケーションを有効化してあげることで対応できます。 以下手順です。 コントロールパネル → 管理ツール → インターネット インフォメーション サービス (IIS) マネージャー を起動します。 変更したいアプリケーションを右クリックして、詳細設定を選択します。 32ビットアプリケーションの有効化をTrueに変更します。 もう一度発行します。 ここまでです。 簡単だけど知らないとなかなかはまるかなって気がしますね。 独特のくせなのかもしれません。 そして、次なるエラー発生中です・・・。

SQLServer2008でのトランザクションログの切り捨て方

SQL Server 2008でとあるDBのトランザクションログが一杯に。 BACKUP LOG DatabaseName WITH TRUNCATE_ONLY を使ってトランケートしようとしたら、 'TRUNCATE_ONLY' はBACKUP オプションとして認識されません。 との冷たい返事。2008で廃止されていたのを忘れていた。 SQL Server 2008 で廃止されたデータベース エンジンの機能@MSDN そこでヌルデバイスを使用してバックアップを取得する方法で、切り捨てを試みる。 BACKUP LOG DatabaseName TO DISK = ‘nul’ GO するとまた冷たい返事。 現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。 2008では過去にフルバックアップを取得しておかないと、ランザクションのバックアップが取得できないことを忘れてた。てなわけで、まずはデータベースのフルバックアップを取得して、 BACKUP DATABASE DatabaseName TO DISK = ‘nul’ GO もう一度トランザクションのバックアップをして、やっと切り捨てれた。最初から単純にしておけばよかった・・・。