LoginSignup
3
3

More than 3 years have passed since last update.

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

Posted at

はじめに

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

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 を指定してください)

Name Type Value
ANDROID_SDK_ROOT FILEPATH C:\dev\android-sdk
ANDROID_ABI STRING arm64-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 (多分デフォルト設定)にして下さい。

Name Type Value(参考)
ANDROID_NATIVE_API_LEVEL STRING 26
ANDROID_STL STRING c++_shared
BUILD_PERF_TESTS BOOL OFF
BUILD_TESTS BOOL OFF
BUILD_ANDROID_EXAMPLES BOOL OFF
BUILD_SHARED_LIBS BOOL ON
BUILD_FAT_JAVA_LIB BOOL OFF

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 等と比べて、傍から見ていて 少し熱が冷めた?落ち着いてきた? 印象を受けますが、まだまだ魅力のある環境だと思っています!

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

3
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3