Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9738

OpenCV をソースコードからビルドしてXamarin で利用する

$
0
0

はじめに

本記事は下記の続き(リベンジ)です。

Xamarin.Forms(Android) から OpenCV(C/C++) を利用する

前回はOpenCV公式の Android 用ライブラリを Xamarin から使用しました。
今回はソースコードをセルフビルドして Android 用の共有ライブラリ(*.so) を作成します。

類型的ですが、ライブラリのセルフビルドには以下のメリットがあります。

  • モジュール(機能)を絞ることでライブラリのファイルサイズを減らせる

  • 拡張モジュール群(opencv_contrib)をライブラリに含められる

確認環境

  • OpenCV 4.2.0
  • Windows 10
  • CMake 3.16.2
  • MinGW 8.2.0-5
  • Android SDK 28.0.3
  • Android NDK 20.0.5594570

環境構築

まずはビルドに必要なツールを導入していきます。OpenCV の入手は割愛します。

  • CMake

  • MinGW

  • Android SDK / NDK

CMake

ココの Latest Release (3.16.2) をインストールしました。

MinGW

ココのインストーラ (mingw-get-setup.exe) を使い、以下の設定でインストールしました。

mingw.PNG

インストールが完了したら 環境変数 PATH に binフォルダのパスを通しておきます。 ポイント

Android SDK / NDK

最後に Android SDK と NDK をインストールするため、ココからAndroid SDK Command line tools を取得します。

(Android Studio をインストールされている方は、そちらからインストールすると良いと思います)

次に SDK / NDK をインストールします。今回は C:\dev\android-sdk\tools に解凍しました。

$ cd C:\dev\android-sdk\tools\bin$ .\sdkmanager.bat --update$ .\sdkmanager.bat --list# パッケージの一覧表示

表示されたリストを見て SDK / NDK のバージョンを指定します。

今回は(VisualStudio に合わせて)以下のバージョンを選択しました。

$ .\sdkmanager.bat "build-tools;28.0.3"# SDK$ .\sdkmanager.bat "ndk;20.0.5594570"     # NDK

それぞれ C:\dev\android-sdk 以下のディレクトリにインストールされます。

後工程の CMake Generate にて、android.toolchain.cmake の設定と NDK 内のフォルダ名が一致しなかったので、フォルダ名を手作業で変更しました。ポイント

 変更前:C:\dev\android-sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows

 変更後:C:\dev\android-sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64

CMake Generate

環境構築が済んだので、いよいよ ビルドに向けた準備に入ります。長い…

設定1

CMake(GUI) を立ち上げて、ソース / ビルドディレクトリ を指定します。

早速 Configure を押しそうになりますが、落ち着いて以下を "+ Add Entry" します。ポイント

(Androidのアーキテクチャが異なる方は armeabi-v7a や x86_64 を指定してください)

NameTypeValue
ANDROID_SDK_ROOTFILEPATHC:\dev\android-sdk
ANDROID_ABISTRINGarm64-v8a

追加したら Configure ボタンを押します。

cmake1.PNG

Configure

以下を選択して、Next を押します。

cmak2.PNG

次画面の toolchain では、インストールした NDK 内のファイルを選択します。

(OpenCV内の android.toolchain.cmake は古いっぽい(?)ので使いません)

  • C:/dev/android-sdk/ndk/20.0.5594570/build/cmake/android.toolchain.cmake

設定2

Configure が完了したら、以下を追加で "+ Add Entry" して、再度 Configure を行います。

この辺りの設定はご自身の環境に合わせて ちょちょい と変えると良いと思います。

静的ライブラリを作成される方は、BUILD_SHARED_LIBS = OFF, BUILD_FAT_JAVA_LIB = ON (多分デフォルト設定)にして下さい。

NameTypeValue(参考)
ANDROID_NATIVE_API_LEVELSTRING26
ANDROID_STLSTRINGc++_shared
BUILD_PERF_TESTSBOOLOFF
BUILD_TESTSBOOLOFF
BUILD_ANDROID_EXAMPLESBOOLOFF
BUILD_SHARED_LIBSBOOLON
BUILD_FAT_JAVA_LIBBOOLOFF

Configure 完了後に、各設定の赤文字がなくなっていると思いますので Generate しましょう。

OpenCV ビルド

ついにビルドします!

コンソールで buildフォルダを開いて make を実行します。

私はこの make でエラーが出て 右往左往 しました…

$ cd C:\dev\opencv\opencv-4.2.0_build
$ mingw32-make.exe
   ~~~ build ~~~
$ mingw32-make.exe install

OpenCVのビルド作業は以上です。

C:\dev\opencv\opencv-4.2.0_build\include に 共有ライブラリ (*.so) が格納されてるはずです。

Xamarinからのライブラリ利用

こちらの記事と同じ手順で確認しました。
実機:Google Pixel 3 (Android 10.0 - API 29)

Xamarin.Forms(Android) から OpenCV(C/C++) を利用する

参考

How to Build OpenCV 4.X for Native Android Development

Error compiling opencv for android #15457

Generate custom opencv .so for Android [Windows 10]

終わりに

冬休み中に完了できず足が出てしましましたのですが、何とか投稿まで進ることができ、年始に悔いを残さずに済みました。

Xamarin は 今 C# でホットな Blazor / Unity / .NET Core / UNO 等と比べて、傍から見ていて 少し熱が冷めた?落ち着いてきた? 印象を受けますが、まだまだ魅力のある環境だと思っています!

少し出遅れましたが、今年はぼちぼち学習していきたいです!


Viewing all articles
Browse latest Browse all 9738

Trending Articles