Android studio で OpenCV4.1.0 を使う

2019-05-12

概要

とある画像認識を使うAndroidアプリケーション開発を始めました。
参考にさせて頂けるOpenCV + Android 環境構築のページはあるのですが、Versionが変わったからなのか、手順通りに行かないことがあったので自分の環境での手順を整理

環境

  • Windows 10 Home
  • Android studio Ver3.4 (を使ってKotlinで作ります)
  • OpenCV 4.1.0

OpenCV準備

Android用のOpenCVをダウンロードします。
https://github.com/opencv/opencv/releases
対象ファイル( opencv-4.1.0-android-sdk.zip)

どこかに解凍しておきます。(私はworkspaceで解凍しました。)

プロジェクト作成

Android studioでプロジェクトを作成します。
Activityは何でも良い
API levelは古いと今後の作業でエラーになりました。
 (→ そのため 28にしました。)

動作確認用コード作成

OpenCVのversionを表示するソースコードを作成します。


import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {

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

        val txtVersion : TextView = findViewById(R.id.version)

        if (OpenCVLoader.initDebug()) {
            txtVersion.text = "OpenCV Version: " + OpenCVLoader.OPENCV_VERSION
        } else {
            txtVersion.text = "OpenCV Version: Not found."
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">

    <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/version"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

</android.support.constraint.ConstraintLayout>

今のままだとOpenCVをimportしていないので、以下のOpenCVLoaderが見つからないエラーが起きます。

Unresolved reference: OpenCVLoader

OpenCVをimport

Android studioのメニュー
[File] – [New] – [Import Module from source] を選択します。


解凍してきたOpenCVのディレクトリ/sdkを選択、
Module nameに適当に入力 (OpenCV410にしました。) して、
finishを押下します。

※ 多くのサイトで、OpenCV-android-sdk/sdk/java になっていますが、私の環境ではjavaを含むとdependenciesの設定ができませんでした。

これでappと同じ階層にOpenCV410が追加されます。

dependenciesの設定

Android studioのメニュー
[File] – [Project Structure] を選択します。

Project Structureのメニュー
[Dependencies] – [app] – Declared Dependenciesの左上の[+]から
Module Dependency を押下します。

Add Module DependencyからOpenCV410(追加した名前)にチェックを入れてOKを押下します。

コード更新

これでimportできるようになるので、import文を追加します。
(OpenCVLoader のエラー箇所でAlt + Enterでも可)

import org.opencv.android.OpenCVLoader

実行

versionが表示されました。