Vitis HLSにOpenCVライブラリをインクルードして環境を構築するのはひと手間かかります。 私も何度かエラーが発生するなか、やっとテストベンチシミュレーションと高位合成を行うことができました。 そこで、本記事ではVitis Vision Libraryの高位合成の環境・OpenCVのテストベンチ環境を、Windows10のVitis HLSに構築する方法を解説 したいと思います。
本記事の対象読者:以下の状況に直面している方
すでにVitis HLSの開発環境は構築済み で、Vitisビジョンライブラリを新たに追加したいOpenCVのインクルードでエラーが発生している
Xilinxが公開する以下のページを参考にしています。このページ通りに進めれば、ビジョンライブラリとOpenCVを使えるようになるのですが、私が詰まったところを含め、説明を追加していきたいと思います。
https://support.xilinx.com/s/article/75727?language=ja
OpenCVの環境構築
まず、Vitis HLSにインクルードするためのOpenCVのライブラリ・ファイルをMinGW(Minimalist GNU for Windows)でリビルドします。 OpenCVのリビルドはVisual Studioでも可能ですが、私の環境ではVitis HLSでCリンクエラーが発生し、うまくライブラリ・ファイルをリンクできませんでした。そこで、Visual StudioではなくMinGW を使用しています。
まず、前準備としてOpenCVのライブラリ・ファイルのリビルドを行うツールのインストールを行い、OpenCVのソースファイルのダウンロード、そしてリビルドを行います。
おすすめ書籍
ソースコードをコンパイルしてから、OpenCVのようなライブラリファイル(lib, dll)をリンクし、実行ファイルを作成する流れについては、以下の書籍がおすすめです。よく知っている人にとっても、改めてソースコードからCPUが実行可能な機械語で記述された実行可能ファイルまでを作成する一連の処理 を整理するのに有用です。私は第2版を持っていますが、2021年に発売された第3版ではPythonでの機械学習の章が追加されているので改めて買いなおそうかと思っているところです。
同シリーズの「コンピュータはなぜ動くのか」と一緒に読んで全体的な知識を広く浅くつけた後なら、より詳しいパターソン&ヘネシーの教科書「コンピュータの構成と設計」が読みやすくなり、理解も深まると思います(…といいつつ、 パターソン&ヘネシーの教科書はまだまだ私も勉強中)
※パターソン&ヘネシーも2021年11月に新版が発売されたとのことです
前準備
インストールするツールは、次の2つです。すでにインストールしてあれば、それぞれ省略可能です。
事前にインストールするアプリケーション
MinGW-w64 :Windows(64bit版)上で使えるGCC(GNU Compiler Collection)環境。ソースコードからビルドを実行するために使用。CMake :Makefileを自動生成するビルド支援ツール。Makefileとは、コンパイルしたいソースファイルやファイル間の依存関係などの管理ルールを記述したファイル。
今回インストールするCMakeとMinGWの位置づけは次の図の通りです。
MinGW-w64のダウンロード&インストール
MinGW-w64のインストーラのダウンロード
MinGW-w64のインストーラを次のリンク先からダウンロードします。
MinGW-w64
GCC for Windows 64 & 32 bits
リンク先で、左上の[Downloads] をクリックします。
ダウンロード可能なインストーラがあります。 今回はWindows向けのインストーラ[MingW-W64-builds] をダウンロードします。
リンクをクリックすると、ダウンロードできるサイトを選択できます、今回はSourceforge を選択しました。
次の画像のようなページに遷移し、ダウンロードが始まるので、しばらく待ちましょう。
MinGW-w64のインストール
ダウンロードできたら、インストーラを起動します。[Next] をクリックします。
64bit版のWindowsを使用しているので、Architectureは[x86_64] を選択します。[i686]のままでは、リンクエラーが発生します。 それ以外の項目はデフォルトのままで問題ありません。
インストール先を選択します。特に変更なくデフォルトのままで問題ありません。
インストールが始まるので少し待ちます。すぐにインストールは完了すると思います。[Finish] を押してインストールを完了しましょう。
最後に、コマンドラインでMinGWを実行できるように環境変数を定義しましょう。 左下の検索窓で[システム環境変数] と検索し、[システム環境変数の編集] を選択します。
システムのプロパティというウィンドウが立ち上がるので、右下の[環境変数] を選択します。
環境変数の編集を行います。システム環境変数のPathを選択して[編集] をクリックします。
環境変数の編集というウィンドウが立ち上がったら、[新規]を選択し、新しく以下のpathを追加します。
C:\Program Files\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64\bin
ここに追加するpathは先ほどインストールしたMinGW-w64のインストールディレクトリのうち、gccやg++などの実行ファイルが格納されたディレクトリ です。 次の画面のようにコマンドプロンプト上でgccとmingw32-make を起動することができるようになれば、成功です。
CMakeのインストール
次に、CMakeインストーラを次のリンク先からダウンロードします。
CMake - Upgrade Your Software Build System
CMake is a powerful and comprehensive solution for managing the software build process. CMake is the de-facto standard for building C++ code, with over 2 millio...
リンク先で、右上の[Download] をクリックします。
いくつかあるインストーラのうち、最新の64bit版のインストーラWindows x64 Installer を選択します。
しばらく待つとダウンロードが始まるので、完了するまで待ちましょう。
CMakeのインストール
ダウンロードが完了したら、インストーラを起動します。[Next] をクリックします。
利用許諾を読み同意出来たら、チェックを入れ[Next] をクリックします。
[Add CMake to the system Path for all users] にチェックを入れました。このチェックを入れることによって、コマンドプロンプトからCMakeを起動できるようになります。 ただし、今回、CMake-GUIを起動するので、PathにCMakeを追加しなくても([Do not add CMake to the system PATH]を選択)、問題ありません。 選択できたら、[Next]をクリック します。
インストールディレクトリを選択し、[Next]をクリック します。
[Install]をクリック します。
インストールが始まりますのでしばらく待ちます。完了したら、[Finish]をクリック します。
[Add CMake to the system Path for all users] を選択し、PathにCMakeを追加したので、次のようにコマンドプロンプトからCMakeを起動できるようになります。
以上で、前準備は完了です。
OpenCVのダウンロード
では、引き続きOpenCVのソースコードをダウンロードします。 次のOpenCVのページから、ソースコードをダウンロードします。
Home
OpenCV provides a real-time optimized Computer Vision library, tools, and hardware. It also supports model execution for Machine Learning (ML) and Artificial In...
リンク先で、右上の[Library] をクリックし、[Releases]を選択 します。
Vitis 2021.1以降は、動作確認がOpenCV4.4.0までなされています。そこで、今回はOpenCV4.4.0のWindows版を選択し、ダウンロードします。いくつかバージョンがあるので、スクロールして OpenCV4.4.0のWindows を選択します。
クリックすると、ダウンロードが始まります。
インストーラを開くと、ソースコードの展開先ディレクトリを選択することができます。 適切なフォルダ(OPENCV_ROOT )を選択し、[Extract]をクリック します。私の場合はディレクトリ( OPENCV_ROOT = C:\opencv_hls )に展開しました
指定したディレクトリ( OPENCV_ROOT )に次のようにソースコードとビルド済みのファイル が格納されます。ビルド済みのファイル([build]フォルダ)はVisual Studio向けにビルドされているので、今回は使用しません。
OpenCVのリビルド
次に、OpenCVのソースコードを用いて、MinGW向けに新しくライブラリファイルをビルドしていきます。
CMakeでMakefileを作成
前準備でインストールしたCMakeを使ってMakefileを作成します。 Makefileはソースコードをビルドするために必要な情報をまとめたファイルと思えば問題ありません。
GUIを使って視覚的に設定ができるCMake-GUIを立ち上げます。 GUIが立ち上がったら、ソースコードの格納元のディレクトリとビルドした後のライブラリファイルを格納する格納先のディレクトリ(新たに作成)を、それぞれ図のように指定します。 格納先のディレクトリ名は[build_mingw] としました。
Pathの指定
Where is the source code: OPENCV_ROOT \sources Where to build the binaries: OPENCV_ROOT \buid_mingw (新規作成)
OPENCV_ROOT = C:\opencv_hls
本記事では、OpenCVをビルドしたパスを次のように、 OPENCV_BUILD_PATH と表記します: OPENCV_BUILD_PATH = OPENCV_ROOT \buid_mingw
ディレクトリの指定が完了したら、[Configure]をクリック します。 すると、ビルドの際に用いるコンパイラの種類を選択できるので、[MinGW Makefiles]を選択し、[Finish]をクリック します。
Configureが終わると、未解決の項目が赤網掛けで表示されるはずです。 ここからMakefileに記述するビルドの設定を行います。
私はOPENCV_ENABLE_ALLOCATOR_STATSのチェックのみ外 し 、それ以外はデフォルトのままにしました。
OPENCV_ENABLE_ALLOCATOR_STATSのチェックを入れたままだとどうなる?
チェックを入れたままだと、ビルドのときに次のエラーが発生します。
gcc: error: long: No such file or directory
C:\PROGRA~1\MINGW-~1\X86_64~1.0-P\mingw64\bin\windres.exe: preprocessing failed.
make[2]: *** [modules/core/CMakeFiles/opencv_core.dir/vs_version.rc.obj] エラー 1
make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] エラー 2
make: *** [all] エラー 2
以下の記事に解説されているように、 OPENCV_ENABLE_ALLOCATOR_STATS のチェックを外せばエラーを回避できます。
https://answers.opencv.org/question/228737/gcc-error-long-no-such-file-or-directory/
CMakeの設定が完了したら、もう一度[Configure]をクリック すれば、赤網掛けが消えるはずです。消えていない項目があれば、設定を見直してください。 すべて消えていれば、[Generate]をクリックし、Makefileを生成 します。
Generateも完了すれば、以上でCMakeでの操作は完了です。
ビルドを実行
では、Makefileを用いて、実際にOpenCVのソースコードをビルドしていきましょう。 コマンドプロンプトを起動し、cdコマンドでMakefileを生成したディレクトリ( OPENCV_BUILD_PATH )に移動します。そして、mingw32-make installでビルド を行います。最後に追加したinstallというオプションは、ビルドしたライブラリファイルとソースコードのincludeファイルをinstallというディレクトリにまとめるためです。
例えば、私の場合は
$ cd C:\opencv_hls\opencv\build_mingw
$ mingw32-make install
ビルドまで長時間(1時間程度)かかりますので、ゆっくりと待ちましょう。 100%まで達成するとビルドが完了です。installオプションを追加していると、この後にinstallディレクトリへの移動が一気に行われます。
最後に、作成したOpenCVのライブラリファイルをシステム環境変数に追加しましょう。 ビルドファイルのinstallディレクトリの中に次の画像のように作成したダイナミックリンクライブラリ(dll)が格納されているはずです。このダイナミックリンクライブラリのpath( OPENCV_BUILD_PATH \install\x64\mingw\bin )を追加 します。
例えば、私の場合、 OPENCV_BUILD_PATH = C:\opencv_hls\buid_mingw と指定したので、ダイナミックリンクライブラリのパスはC:\opencv_hls\opencv\build_mingw\install\x64\mingw\binです。
このpathをMinGWのときと同様に、システム環境変数に追加します。
システム環境変数に追加しないとどうなる?
Vitis HLSでテストベンチ関数のビルドを行い、実行ファイルを実行しようとするとエラーが発生します。デバッグモードでは図のようにエラーコードが表示されます。 原因は、実行ファイルがOpenCVのDLLを参照できないことに由来します。
エラーメッセージ: Failed to execute MI command: -exec-run Error message from debugger back end: During startup program exited with code 0xc0000135.
本記事ではOpenCVの環境構築まで解説しました。 OpenCVのビルドには時間がかかります。待っている間に次回の記事で解説するビジョンライブラリのダウンロードやセットアップを並行して進めるとよいと思います!
最後までご覧いただきありがとうございました!
スポンサーリンク
次回の記事のリンク
参考:開発環境
参考にさせていただいたサイト
Xilinx公式サイト marseeさんのサイト「FPGAの部屋」 PastaSobaさんのQiita CodeHerokuさんの動画 Elsammitさんのサイト「Elsaの技術日記」 Nishi-Pさんのサイト「とある科学の備忘録」
コメント