LoginSignup
11
10

More than 5 years have passed since last update.

AndroidStudioにOpenCV4.1.0を導入する

Last updated at Posted at 2019-04-16

経緯

駆け出しのチームで初めてAndroidStudioを導入したはいいものの
OpenCV導入に手こずったので、チームメイトへ向けてまとめました

内容

  • AndroidStudioにOpenCV4.1.0(2019/04/16現在で最新の認識)を導入
  • kotlinのコードでOpenCVが導入できているかチェック

動作環境

  • Mac 10.13.6(High Sierra)
  • AndroidStudio 3.3.2
  • OpenCV 4.1.0

※AndroidStudioのインストール方法については割愛します。

OpenCVのダウンロード

下記、どちらかのサイトからダウンロード

https://github.com/opencv/opencv/releases
-> こちらの場合は opencv-4.1.0-android-sdk.zip をダウンロード

https://opencv.org/releases.html
-> こちらの場合は Android pack をダウンロード

ダウンロードしたZipを解凍して、わかりやすい場所に置いておく
(私はデスクトップに置きました)

AndroidStudio プロジェクトの作成

※すでに既存のプロジェクトがある方は、
それを開いて次の項目[OpenCVをimpoer]の手順に進んでください

  1. AndroidStudioを起動
  2. Start a new Android Studio project を選択
  3. Choose your projectで Empty Activity を選択してNext
  4. Name、SaveLocationは自由に。Languageはお好みで(今回はkotlin)
  5. APIレベルは最新の28に設定して、Finish

OpenCVをimport

  1. 画面上部のFileから、New > Import Module... 選択
    スクリーンショット 2019-04-16 10.42.05.png

  2. import画面で先ほど解凍したファイルのパスを入力
      (右側のディレクトリボタンから参照でも可)
      Module nameはお好みで、ひとまず「opencv」にしました。
    スクリーンショット 2019-04-16 10.45.04.png

※サイトによっては/Users/user名/Desktop/OpenCV-android-sdk/sdk/java となっていますが
javaまで含むと上手く動かないので注意です。
(原因が不明なので知見ある方教えてください。。。)

Buildが始まるのでちょっと待機です。エラーなく完了したらimportは完了です。
Project一覧にopencvがいるはずです

スクリーンショット 2019-04-16 11.07.34.png

moduleの依存関係の追加(dependenciesの設定)

  1. 画面上部のfileから、Project Structure を選択

スクリーンショット 2019-04-16 10.56.15.png

2.appの、dependenciesを選択
スクリーンショット 2019-04-16 10.56.41.png
3. 下の「+」ボタンを押して、3のModule dependencyを選択
4. そのままopencvを選択してOK
5. 一覧の一番下にopencvが追加されれば依存関係の追加は完了です。
スクリーンショット 2019-04-16 11.00.58.png

gradleの書き換え

  1. 画面左のプロジェクト一覧から、GradleScriptsを開く。
      build.gradle(Module:app)のファイルを開き、
    compileSdkVersionの横の数字を確認してください
      (ここでは28)
    スクリーンショット 2019-04-16 11.09.14.png

  2. 同じように、build.gradle(Module:opencv)のファイルを開き
      compileSdkVersionの数字を確認し、手順1のappと異なるようであれば
      appと同じになるように数字を直す
    スクリーンショット 2019-04-16 11.14.04.png
    ↑ではcompileSdkVersinoが26なので、これを28に書き換える

jniLibsフォルダの作成

ここはFinder上での作業で大丈夫です。
1. 現在のプロジェクトがあるフォルダへ移動します
2. app/src/main/の下に、jniLibsという名前のフォルダを作成
3. 最初にダウンロードして解凍したフォルダを開き、
OpenCV-android-sdk\sdk\native\libsの中身を全てjniLibsにコピー
スクリーンショット 2019-04-16 11.30.49.png

これでOpenCV使うことのできる環境は出来上がりました。
最後に、ちゃんとOpenCVが使えるかチェックしましょう。

OpenCVが使えるか確認

こちらについては別の記事を参考にしています(ほぼ同じです)
https://qiita.com/yeb8jo/items/95b9ec32901b0b83b783

上記記事のコードでは残念ながら上手く動作しなかったので
少し書き換えをしています。
l15,16

MainActivity.kt
package and.syun.com.kotlinwithopencv001

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

import org.opencv.android.OpenCVLoader

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 = openCVVersionString(OpenCVLoader.initDebug())
    }

    private fun openCVVersionString(arg: Boolean): String {
        when (arg) {
            true -> return "OpenCV Version: "+OpenCVLoader.OPENCV_VERSION
            false -> return "ERROR: OpenCV Load Failed"
        }
    }

}

上記コードだと、text_viewのみ赤文字になると思うので、
option + Enterでidsに追加してください
(入力画面が出るかと思いますが何も触らずにOKを押してください)

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

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

</android.support.constraint.ConstraintLayout>

TextViewの中にandroid:id="@+id/text_view"を追加

実行結果
スクリーンショット 2019-04-16 12.14.46.png

当方Pythonエンジニアのはずでしたが初めてのqiitaはAndroidでした。
世界の広さを感じます。最後まで読んでいただきありがとうございました。

11
10
2

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
11
10