Android Studio, OpenCV kurulumu

Android & OpenCV

Android uygulamalarında OpenCV’ yi kullanabilmek için OpenCV Android SDK’ yı indirip projeye dahil etmek gerekir. OpenCV Android SDK, native library’ lerine erişebilmek ve Android platformuna özel sınıflar içeren bir interface gibi düşünülebilir.

OpenCV Android SDK’ nın uygulamada kullanılabilmesi için iki ayrı yöntem vardır.

1. OpenCV Manager kullanarak

Cihazınıza ek olarak OpenCV Manager uygulamasını yüklemeniz gerekir. Bu uygulama, native library’ leri cihaza yükler ve diğer uygulamaların bu library’ lere erişimini sağlar.

2. Statik olarak

OpenCV native library’ lerinin geliştirme aşamasında uygulamaya dahil edilmesidir. Ekstra olarak OpenCV Manager uygulamasının yüklenmesine gerek olmaz.


NOT 1: bu örnekte ikinci yöntem kullanılmakta, native library’ lerin uygulamaya dahil edilme bölümü es geçilerek de birinci yöntem uygulanabilir.
NOT 2: kullanılan sürümler; Android Studio 3.0 ve OpenCV 3.3.0

KURULUM

1. OpenCV indir

OpenCV Android sürümünü sitesinden indir ve sıkıştırılmış dosyadan çıkar.

2. Yeni proje/uygulama oluştur

File > New > New Project

3. OpenCV’ yi projeye modül olarak ekle

File > Project Structure veya (Ctrl + Alt + Shift + S)
+ veya (Alt + Insert)
Import Eclipse ADT Project > Next
Source Directory için OpenCV Android SDK klasör yolunu (../sdk/java) seç > Next > Finish > Ok
android-14 gradle hata
Hata: Failed to find target with hash string ‘android-14’…
Sebep: Android 14 sürümünün geliştirici ortamınızda bulunmaması
Çözüm 1: Android API 14 sürümünü yükle ve projeyi sync et
Çözüm 2: OpenCV modül library’ sinin compileSdkVersion değerini targetSdkVersion değeri ile aynı yap ve projeyi sync et
compileSdkVersion = targetSdkVersion
File > Project Structure (Ctrl + Alt + Shift + S) > app (modülü seç) > Dependencies > + (Alt + Insert) > Module Dependency > openCVLibrary330 modülü seç > OK

ÖRNEK

Layout, Manifest ve MainActivity

  • activity_main layout; info ve camera id’li iki view var. Uygulama cihazda başlatıldığında başarılı bir şekilde OpenCV initialize edilirse camera view’i visibility=visible olur, aksi durumda visibility=gone olduğu ve info view’i z-index olarak alt katmanda olduğu için info view görünür olur.
  • manifest; kamera izni ekle
  • main activity; onResume methodunda OpenCV asenkron olarak initialize edilmeye çalışılır. Native library’ ler uygulama dahilinde ise OpenCV initialize işlemi bitirilir ve async callback listener’ ı tetiklenir. Şayet native library’ ler yok ise ve cihazda OpenCV Manager uygulaması yüklü değilse OpenCV Manager’ ı yüklemek için dialog gösterir. Aksi durumda OpenCV initialize edilemez. Başarılı initialization’ ın ardından kamera görüntüsü view’ de render edilir. Kamera view’ e tanımlanmış CameraBridgeViewBase.CvCameraViewListener2 listener yardımıyla görüntü frame-frame onCameraFrame methoduna ve kameranın start-stop durumları listener’ ın onCameraViewStarted ve onCameraViewStopped methodlarına düşer.
NOT 3: kullanılan Mat nesnelerinin işlem sonrasında release edilmesi gerekir (OpenCV JNI ile native methodları çağırdığı için native’ de kullanılan nesnelerin release edilmesi cihaz kaynak kullanımı açısından önemli).

OpenCV native library’ leri ekle (Statik Yöntem)

../sdk/native/libs -> app/src/main/jniLibs
  • app/src/main/jniLibs klasörü oluştur
  • OpenCV Android SDK içerisinde farklı işlemci tiplerine göre bulunan native library’ leri (../sdk/native/libs) hepsini veya istediklerini oluşturduğun klasöre taşı/kopyala

Uygulamayı Çalıştır

MainActivity orientation; portrait ve landscape
canny edge algoritma

Proje kodlarını incelemeyi unutma :)