1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Android】OpenCV4.8.0の導入から実行まで

Posted at

はじめに

こんにちは、今回は新規のプロジェクトにOpenCVを導入してみたので、
導入方法などをまとめようと思います。備忘録も含めています。

使用した環境

OpenCV-4.8.0(以下サイトからAndroidを選択)

言語:Kotlin

導入手順

OpenCVのimportおよび依存関係の追加

いきなり人任せですみませんが、以下のサイトを見てOpenCVをimportをして依存関係の追加までを実施する。
以下のサイトはわかりやすくOpenCVのインポートと依存関係の追加を記載されていました。

依存関係を追加するとdependenciesに以下が追加されます。

build.gradle(:app)
dependencies {
    // opencv
    // 依存関係の追加をするといかが追加されています。
    implementation project(path: ':opencv')
}

プロジェクトに合わせてSDKバージョンを修正する

次はプロジェクトに合わせてOpenCV側のgradleを修正します。

build.gradle(:app)
    compileSdk 33

    defaultConfig {
        minSdk 30
        targetSdk 33
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
build.gradle(:opencv)
+ compileSdkVersion 33
- compileSdkVersion 26
    defaultConfig {
        minSdkVersion 21
+       targetSdkVersion 33
-       targetSdkVersion 26
        versionCode openCVersionCode
        versionName openCVersionName

        externalNativeBuild {
            cmake {
                arguments "-DANDROID_STL=c++_shared"
                targets "opencv_jni_shared"
            }
        }
    }

namespaceを追加する

上記のままSyncを行うと以下のエラーが出ます。

Namespace not specified. Please specify a namespace in the module's build.gradle file like so:

android {
    namespace 'com.example.namespace'
}

どうやらnamespaceを追加しないといけないらしい

ということでnamespaceを追加します。
今回は'org.opencv'を追加

build.gradle(:opencv)
android {
+   namespace 'org.opencv'
    compileSdkVersion 33

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 33

        versionCode openCVersionCode
        versionName openCVersionName

ここまでやるとsyncが成功しました。
ただビルドをすると失敗しました。続きいきます!

jvmTargetを追記

ビルドをすると以下のエラーが出た。。

Caused by: org.gradle.api.GradleException: 'compileDebugJavaWithJavac' task (current target is 1.8) and 'compileDebugKotlin' task (current target is 17) jvm target compatibility should be set to the same Java version.

Javaバージョンをターゲットを同じにしろというエラーらしい
ということで以下を追加

build.gradle(:opencv)
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

+    kotlinOptions {
+        jvmTarget = "1.8"
+    }

buildFeaturesを追加

これでビルドできるだろうとビルドをすると出ましたエラー。。
まだ出るんかいと思いました。
ということで以下が出たエラーです。

パッケージorg.opencv.engineは存在しません
import org.opencv.engine.OpenCVEngineInterface;
                        ^

エラー: シンボルを見つけられません
import org.opencv.BuildConfig;
                 ^

インポートがうまくできていないエラーでした。
エラーを調べてみると出ました。原因は buildConfigAidl がデフォルトで false になっているために読み取っていないらしいです。ということで以下を追加します。

build.gradle(:opencv)
+    buildFeatures {
+        buildConfig true
+        aidl true
+    }

上記対応後再度ビルドを実施するとうまくいきました!
よかった。。

動作確認をする

ということでOpenCVが使用できるか実際に動かしてみます。
再度以下のサイトを参考にします。
やることはOpenCVのバージョンを表示する対応になります。

MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val versionString: TextView = findViewById(R.id.text_view)
        versionString.text = openCVVersionDisplay(OpenCVLoader.initDebug())
    }

    private fun openCVVersionDisplay(arg: Boolean): String {
        return when (arg) {
            true -> "OpenCV Version: " + OpenCVLoader.OPENCV_VERSION
            false -> "ERROR: OpenCV Load Failed"
        }
    }
}
activity_main.xml
    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        tools:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

ビルド後アプリが起動して「OpenCV Version: 4.8.0」と表示されれば成功です。
お疲れ様でした!

最後に

いかがでしたでしょうか?
エラーが結構出ましたが、なんとかなりました。
ということで、何か実装してみようかなと思います。また実装したら記事にしようと思います。
本記事が参考になると幸いです。
最後までご覧いただきありがとうございました。

1
1
0

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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?