視覚言語ナビゲーション - Windows 環境での Matterport3D シミュレーターのコンパイルとインストール (3)


1 Matterport3D シミュレータのソース コードをコンパイルする

  Windows 上で Matterport3D Simulator をコンパイルするには少し不便で、CMakeLists.txt をいくつか変更する必要があります。より良い方法があればコメントしてください。

1.1 ソースコードのダウンロード

  または、 Github で Matterport3D Simulator のリポジトリを直接検索し、ソース コードをダウンロードします。

  • pybind11 @ 86e2ad4zip 方式を使用する場合は、圧縮パッケージをダウンロードした後、クリックして pybind11 のリポジトリにジャンプしてソース コードをダウンロードし、
    ここに画像の説明を挿入
    ここに画像の説明を挿入
      pybind11 のソース コードを Matterport3D シミュレーターのルート ディレクトリの pybind11 フォルダーに解凍する必要があります。ソースコードは以下の通り。
  • git を使用してダウンロードする場合は、次のコマンドを使用し、必ず--recursiveオプションを追加してください。
git clone --recursive https://github.com/peteanderson80/Matterport3DSimulator.git

  最後に、ソースコードのルートディレクトリとpybind11ディレクトリは以下の通りです。
ここに画像の説明を挿入
ここに画像の説明を挿入

1.2 プロセスの構成

  ソース コードを準備した後、CMake gui を開き、次のようにソース コード パスコンパイル パス
ここに画像の説明を挿入
  を設定し、[構成] をクリックして構成し、ポップアップの黄色のボックスで Visual Studio と x64 を選択します
ここに画像の説明を挿入
  。エラー メッセージと
ここに画像の説明を挿入
  その理由を確認してください。 OpenCV が見つからないため、「OpenCV_DIR」を OpenCVConfig.cmake を含むパスに設定する必要があります。これは最初に変更する必要があります。

1.2.1 OpenCV_DIRの追加

   先ほどダウンロードしてインストールした OpenCV のルート ディレクトリを開きます。「build\x64\vc15\lib」ディレクトリに、OpenCV が提供する OpenCVConfig.cmake があります。このディレクトリの絶対パスをCMakeLists.txt に設定する
ここに画像の説明を挿入
  だけです。 Matterport3D シミュレーターのルートを開き、ディレクトリ内の CMakeLists.txt ファイルに上記の文を追加しますfind_package(OpenCV REQUIRED)

set(OpenCV_DIR D:/1-Compiler/dependency/opencv/build/x64/vc15/lib)

  独自の対応する絶対パスを続けて、「\」の代わりに「/」を使用することに注意し、
ここに画像の説明を挿入
  以下に示すように保存し、CMake gui に戻って再度設定すると、上記のエラーはスキップされます。しかし、驚くことではありません。再びエラーが報告されました。情報は次のとおりです。PkgConfig が
ここに画像の説明を挿入
  見つかりません。解決策は PkgConfig をインストールすることですが、Windows で PkgConfig を使用する良い方法が見つからなかったので、PkgConfig を直接次のように変更しました。同様の機能を持つ find_package コマンド。これは 2 番目の変更です。

1.2.2 pkg_check_modules を find_package に置き換えます

  直接注釈が最初にfind_package(PkgConfig REQUIRED)配置され、次に配置されます。

pkg_check_modules(JSONCPP REQUIRED jsoncpp)

  に変更されました

find_package(JSONCPP REQUIRED jsoncpp)

  変更結果は以下の通りですが、より良い解決策があればコメントでお知らせください。
ここに画像の説明を挿入
  保存後、CMake gui に戻って再度設定すると、上記のエラーはスキップされます。しかし、驚くべきことではありません。エラーが再び報告されます。メッセージは次のとおりです。文字通り、
ここに画像の説明を挿入
  JSONCPP が見つからないことを意味します。これは、以前に OpenCV が見つからなかったのと同じエラーです。これは、変更する必要がある 3 番目の場所です。

1.2.3 JSONCPP_DIRの追加

   「OpenCV_DIR」の追加と同様に、先ほどダウンロードしてインストールしたjsoncppのルートディレクトリを開くと、 「 \lib\cmake\jsoncpp 」ディレクトリ内にjsoncppが提供するjsoncppConfig.cmakeがありますが、ここでもう一つ修正が必要です。

   まず、jsoncppConfig.cmake ファイルを開き、下部に文を追加します

set(JSONCPP_FOUND True)

  次に、Matterport3D シミュレーターのルート ディレクトリにある CMakeLists.txt ファイルを開き、find_package(JSONCPP REQUIRED jsoncpp)上記の文を追加します

set(JSONCPP_DIR D:/1-Compiler/dependency/jsoncpp-master/lib/cmake/jsoncpp)

  独自の対応する絶対パスを続けて、「\」の代わりに「/」を使用することに注意し、
ここに画像の説明を挿入
  以下に示すように保存し、CMake gui に戻って再度設定すると、上記のエラーはスキップされます。しかし当然のことながら、再びエラーが報告されました。情報は次のとおりで、
ここに画像の説明を挿入
  文字通り GLEW が見つからないことを意味します。これは 4 番目の修正が必要です。

1.2.4 グローパスの追加

  以前にインストールした GLEW ルート ディレクトリを開いて注意深く検索すると、対応する config.cmake ファイルがないことがわかり、OpenCV や JSONCPP のような glew の問題を解決できません。CMakeLists.txt を読むと、最初のエラーが報告されている場所は、
ここに画像の説明を挿入
  最初に find_package を使用して glew の場所を見つけ、次に glew のライブラリ パスを変数GLEW_LIBRARIESとして設定するという趣旨の次の文です。GL_LIBSfind_packageが見つからないので、GLEW_LIBRARIESglewライブラリディレクトリの絶対パスとして直接設定し、
ここに画像の説明を挿入
  以下のようにfind_package(GLEW REQUIRED)に直接アノテーションを付けて、以下の文を追加します。

set(GLEW_LIBRARIES D:/1-Compiler/dependency/glew-2.2.0/lib/Release/x64)

  保存後、CMake gui に戻って再度設定すると、上記のエラーはスキップされ、今回は他のエラーは報告されず、コンパイルされたファイルは正常に生成されます。
ここに画像の説明を挿入

1.2.5 Python インタープリターの指定

  上記の変更が完了すると、構成でエラーは報告されなくなりますが、現時点ではプロジェクトを生成できないため、CMake GUI で関連するオプションを構成する必要があります。PYTHON_EXECUTABLEここでは、使用したい Python インタープリターにオプションを設定する必要があります。ここでは、次のように Miniconda に付属のインタープリターに一時的に設定します
ここに画像の説明を挿入

1.2.6 指定 CMAKE_BUILD_TYPE

  同時にCMAKE_BUILD_TYPEReleaseに設定します。

  これらを完了した後に再度設定し、コンパイルされたプロジェクトを生成して開くことを選択します。

1.3 コンパイルプロセス

  以下に示すように、上記で生成されたコンパイル済みプロジェクトを開き、
ここに画像の説明を挿入  構成がリリース + x64 であることを確認してから、プロジェクトのコンパイルを開始します。

1.3.1 MatterSim プロジェクトをコンパイルする

  まず、MatterSim プロジェクトをコンパイルします。右クリックしてコンパイルします。驚くことではありません。多くのエラーが報告されます。
ここに画像の説明を挿入
  順番に見てみましょう。エラーは次のとおりです。

  1. 致命的エラー C1083: インクルード ファイルを開けません: 'GL/glew.h': そのようなファイルまたはディレクトリはありません
  2. 致命的エラー C1083: インクルード ファイルを開けません: 'json/json.h': そのようなファイルまたはディレクトリはありません
  3. エラー C2131: 式が定数として評価されませんでした

1.3.1.1 致命的エラー C1083: インクルード ファイルを開けません:

  致命的なエラー C1083 エラーは、ヘッダー ファイルが見つからないことを意味します。これは簡単に解決でき、Matterport3D シミュレーターのルート ディレクトリにある CMakeLists.txt に対応するヘッダー ファイル ディレクトリを含めるだけです。

  CMakeLists.txt を開いて、glew が設定されている場所に追加します。

include_directories(D:/1-Compiler/dependency/glew-2.2.0/include)

  jsoncppの設定に関連する箇所に追記

include_directories(D:/1-Compiler/dependency/jsoncpp-master/include)

  追加した結果は以下のようになります
ここに画像の説明を挿入

1.3.1.2 エラー C2131: 式が定数として評価されませんでした

  ダブルクリックしてエラーが報告されている場所を見つけ、
ここに画像の説明を挿入
  以下に示すように注意深く読んでください。Visual Studio コンパイラは配列の動的作成をサポートしていないことがわかりますが、ソース コードは実際には Linux でコンパイルされています。 C++11 ではこの書き方をサポートしています。

  したがって、ダブルクリックして間違った行にジャンプし、これらの書き込み方法を動的メモリ割り当てに置き換えるだけで済みます。

  • 意思
float gaussian_range[filter_size];

と置換する

float* gaussian_range = new float[filter_size];
  • 意思
uint8_t im[NN];

と置換する

uint8_t* im = new uint8_t[NN];
  • 意思
int pyr_heights[num_scales];
int pyr_widths[num_scales];
int pyr_offsets[num_scales];

と置換する

int* pyr_heights = new int[num_scales];
int* pyr_widths = new int[num_scales];
int* pyr_offsets = new int[num_scales];

  上記の場所を変更した後、CMake GUI で再構成して再度生成し、新しいコンパイル プロジェクトを開いて MatterSim プロジェクトを再度コンパイルしても、まだ 2 つの小さなエラーが残っています
ここに画像の説明を挿入

  • 致命的エラー C1083: インクルード ファイルを開けません: 'glm/glm.hpp': そのようなファイルまたはディレクトリはありません

  この問題については、次のように、Matterport3D シミュレーターのルート ディレクトリにある CMakeLists.txt に glm の関連ディレクトリを追加するだけで済みます。
ここに画像の説明を挿入

  • 致命的エラー C1083: インクルード ファイルを開けません: 'jsoncpp/json/json.h': そのようなファイルまたはディレクトリはありません

  このjsonのヘッダーファイルが追加されており、これまでのインクルージョンの書き方とは異なりますので、統一してダブルクリックで見つけて直接変更してください。

#include <json/json.h>

  次に、次のようにプロジェクトを再生成してコンパイルし、再度エラーを報告します。
ここに画像の説明を挿入

1.3.1.3 エラー C2065: 'M_PI': 宣言されていない識別子

  このエラーは、MatterSim.hpp と MatterSim.hpp の M_PI が定義されていないことを示しているため、これら 2 つのファイルの先頭に直接追加します

#define M_PI 3.1415926

  次のようにし
ここに画像の説明を挿入
ここに画像の説明を挿入
  て再度コンパイルすると、今度は次のようにリンクエラーが発生しました
ここに画像の説明を挿入

1.3.1.4 エラー LNK2019: 未解決の外部シンボル

  よく見てみると、jsoncpp 関連のライブラリが見つからないことがわかります。Matterport3D シミュレーターに jsoncpp ライブラリ ファイル ディレクトリを追加し、CMakeLists.txt の jsoncpp 関連の場所に追加するだけです。

set(JSONCPP_LIBRARIES D:/1-Compiler/dependency/jsoncpp-master/lib/jsoncpp.lib)

  次のように結果を追加し
ここに画像の説明を挿入
  、再生成して再度コンパイルし、最終的に正常にコンパイルされると、結果は次のようになります。
ここに画像の説明を挿入

1.3.2 mattersim_main プロジェクトをコンパイルする

  次に、次のように右クリックして mattersim_main プロジェクトをコンパイルします。驚く   ことではありませんが、Release\MatterSim.lib へのリンクが見つからないという
ここに画像の説明を挿入
  小さなエラーが表示されますが、CMakeLists.txt はそれが実際にダイナミック ライブラリであることを指定しています。
ここに画像の説明を挿入
今コンパイルしたものは確かに dll ファイルです。
ここに画像の説明を挿入
  この問題を解決するには、静的ライブラリを直接コンパイルするだけです。生成された型を Visual Studio で直接変更しようとしましたが、うまくいきませんでした。 Matterport3DシミュレーターのルートディレクトリにCMakeLists.txtを
  配置し、

add_library(MatterSim STATIC src/lib/MatterSim.cpp src/lib/NavGraph.cpp src/lib/Benchmark.cpp src/lib/cbf.cpp)

  に変更されました

add_library(MatterSim SHARED src/lib/MatterSim.cpp src/lib/NavGraph.cpp src/lib/Benchmark.cpp src/lib/cbf.cpp)

  その後、MatterSim プロジェクトを再構成、生成、コンパイルするだけで、無事に MatterSim.lib が取得できました。
ここに画像の説明を挿入
  以下のようにして MatterSim.lib を取得したら、ダイナミック ライブラリのコンパイルに戻ります。

add_library(MatterSim SHARED src/lib/MatterSim.cpp src/lib/NavGraph.cpp src/lib/Benchmark.cpp src/lib/cbf.cpp)

  に変更されました

add_library(MatterSim STATIC src/lib/MatterSim.cpp src/lib/NavGraph.cpp src/lib/Benchmark.cpp src/lib/cbf.cpp)

  次に、再度再生成して、mattersim_main を個別にコンパイルすると、直接成功します。
ここに画像の説明を挿入

1.3.3 テストプロジェクトをコンパイルする

  テスト プロジェクトを再度コンパイルすると、直接成功します。
ここに画像の説明を挿入

1.3.4 MatterSimPython プロジェクトをコンパイルする

  次に、右クリックして MatterSimPython をコンパイルすると、小さなエラーが発生します。
ここに画像の説明を挿入

  • リンク : 致命的なエラー LNK1149: 出力ファイル名が入力ファイル名 'D:\1-Compiler\dependency\Matterport3DSimulator-master\build\Release\MatterSim.lib' と一致するため、名前が重複しています。名前を変更します。 MatterSim.lib は
      MatterSim0.lib を生成し、MatterSimPython プロジェクト構成のリンカー入力にある MatterSim.lib を MatterSim0.lib に変更し、
    ここに画像の説明を挿入
      保存して再コンパイルして、
    ここに画像の説明を挿入
      最終的に MatterSim.cp39-win_amd64.pyd を直接正常に取得します。
    ここに画像の説明を挿入

1.4 概要

  ここまでで、Matterport3D シミュレーターのソース コードのコンパイルが完了しました。次に、Python を使用して Matterport3D シミュレーター API を呼び出す方法を記録します。

おすすめ

転載: blog.csdn.net/weixin_44110393/article/details/124150994