Kredilerin çoğu açıklamaları için opencv.org'da Kiran, Kool, 1 "ve SteveLiles'a gidiyor. Bu cevabı ekliyorum çünkü Android Studio'nun arayüzünün bu tür entegrasyon öğeleri üzerinde çalışacak kadar kararlı olduğuna inanıyorum Ayrıca bu talimatları projemiz için yazmam gerekiyor.
Deneyimli AS geliştiricileri bu bilgiçliğin bir kısmını bulacaktır. Bu yanıt, Android Studio'da sınırlı deneyime sahip kişileri hedefliyor.
Proje sihirbazını kullanarak yeni bir Android Studio projesi oluşturun (Menü: / Dosya / Yeni Proje):
- Buna " cvtest1 " deyin
- Form faktörü: API 19, Android 4.4 (KitKat)
MainActivity adlı Boş Etkinlik
Bu projenin saklandığı bir cvtest1 dizininiz olmalıdır . (Android stüdyosunun başlık çubuğu, projeyi açtığınızda cvtest1'in nerede olduğunu gösterir)
Uygulamanızın düzgün çalıştığını doğrulayın. Derleme / test döngüsünün sizin için uygun olduğunu onaylamak için "Merhaba Dünya" metni gibi bir şeyi değiştirmeyi deneyin. (Bir API 19 cihazının öykünücüsü ile test ediyorum).
Android v3.1.0 için OpenCV paketini indirin ve bir yerde geçici bir dizinde açın. (Emin olun o Java paketi için sadece OpenCV özellikle Android için paket olup.) Bu dizin "diyeceğiz unzip-dir altında" unzip-dir Eğer bir olmalıdır sdk / yerli / kütüphaneleri ile başlayan alt dizinleri ile dizin arm ..., mips ... ve x86 ... gibi şeyler (Android'in çalıştığı her "mimari" türü için bir tane)
Android Studio'dan OpenCV'yi projenize modül olarak içe aktarın: Menü: / Dosya / Yeni / Import_Module :
- Kaynak dizin: {unzip-dir} / sdk / java
- Modül adı: Android stüdyosu bu alanı otomatik olarak openCVLibrary310 ile doldurur (tam ad muhtemelen önemli değildir, ancak bununla devam edeceğiz).
Sonrakini tıklayın . Üç onay kutusu ve kavanozlar, kütüphaneler ve içe aktarma seçenekleri hakkında sorular içeren bir ekran alırsınız. Üçünün de kontrol edilmesi gerekir. Bitir'e tıklayın .
Android Studio modülü içe aktarmaya başlar ve size içe aktarılmayanların bir listesini (çoğunlukla javadoc dosyaları) ve diğer bilgi parçalarını içeren bir import-özet.txt dosyası gösterilir .
Ama aynı zamanda bir hata mesajı söyleyerek olsun ... karma dize 'android-14' ile hedef bulamadılar . Bu, indirdiğiniz OpenCV zip dosyasındaki build.gradle dosyasının, varsayılan olarak Android Studio v1.4.1 ile sahip olmadığınız android API sürüm 14'ü kullanarak derlendiğini söylemesi nedeniyle olur.
Proje yapısı diyalog penceresini açın ( Menü: / Dosya / Project_Structure ). "App" modülünü seçin, Bağımlılıklar sekmesine tıklayın ve şunu ekleyin : openCVLibrary310 , Modül Bağımlılığı olarak. Add / Module_Dependency öğesini seçtiğinizde , ekleyebileceğiniz modüller listesinde görünmelidir. Artık bir bağımlılık olarak görünecek , ancak olay günlüğünde birkaç tane daha bulamıyor-android-14 hatası alacaksınız .
Bak build.gradle uygulama modülü için dosyanın. Bir Android projesinde birden fazla build.gradle dosyası vardır. İstediğiniz cvtest1 / app dizinindedir ve proje görünümünden build.gradle (Module: app) gibi görünür . Bu dört alanın değerlerine dikkat edin:
- compileSDKVersion (benimki 23 diyor)
- buildToolsVersion (benimki 23.0.2 diyor)
- minSdkVersion (benimki 19 diyor)
- targetSdkVersion (benimki 23 diyor)
Projenizin artık bir cvtest1 / OpenCVLibrary310 dizini var, ancak proje görünümünden görünmüyor:
Herhangi bir dosya yöneticisi gibi başka bir araç kullanın ve bu dizine gidin. Ayrıca gelen proje görünümü geçiş yapabilirsiniz Android için Proje Dosyaları ve bu ekran görüntüsünde görüldüğü gibi bu dizin bulunmaktadır:
Projenizi yeniden senkronize edin ve ardından temizleyin / yeniden oluşturun. (Menü: / Build / Clean_Project ) Hatasız temizlemeli ve derlemeli ve 0: Mesajlar ekranında openCVLibrary310 ile ilgili birçok referans görmelisiniz .
Bu noktada modül, proje hiyerarşisinde tıpkı uygulama gibi openCVLibrary310 olarak görünmelidir . (O küçük açılır menüde ben geri anahtarlamalı geldiğini hatırlatırız Projesi Görünüm için Android Görünüm ). Ayrıca "Gradle Scripts" altında ek bir build.gradle dosyası görmelisiniz, ancak Android Studio arayüzünü biraz hantal buluyorum ve bazen bunu hemen yapmıyor. Bu yüzden Android Studio'yu yeniden senkronize etmeyi, temizlemeyi ve hatta yeniden başlatmayı deneyin.
Bu ekran görüntüsü gibi java altında tüm OpenCV işlevlerine sahip openCVLibrary310 modülünü görmelisiniz:
Kopya {unzip-dir} / sdk / yerli / kütüphaneleri için, Android projeye (bunun altında ve her şey) dizin cvtest1 / OpenCVLibrary310 / src / main / ve ardından gelen kopyasını yeniden adlandırmak kütüphanelerini için jniLibs . Şimdi bir cvtest1 / OpenCVLibrary310 / src / main / jniLibs dizininiz olmalıdır. Projenizi yeniden senkronize edin ve bu dizinin artık openCVLibrary310 altındaki proje görünümünde görünmesi gerekir .
MainActivity.java'nın onCreate yöntemine gidin ve şu kodu ekleyin:
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
Ardından uygulamanızı çalıştırın. Android Monitör'de böyle satırlar görmelisiniz:
(Hata mesajıyla bu satırın neden orada olduğunu bilmiyorum)
Şimdi gerçekten bir openCV kodu kullanmaya çalışın. Aşağıdaki örnekte, bir .jpg dosyasını android emülatöründeki cvtest1 uygulamasının önbellek dizinine kopyaladım. Aşağıdaki kod bu görüntüyü yükler, açık kenar algılama algoritmasını çalıştırır ve sonuçları aynı dizindeki bir .png dosyasına geri yazar.
Bu kodu önceki adımdaki kodun hemen altına koyun ve kendi dosyalarınız / dizinlerinizle eşleşecek şekilde değiştirin.
String inputFileName="simm_01";
String inputExtension = "jpg";
String inputDir = getCacheDir().getAbsolutePath(); // use the cache directory for i/o
String outputDir = getCacheDir().getAbsolutePath();
String outputExtension = "png";
String inputFilePath = inputDir + File.separator + inputFileName + "." + inputExtension;
Log.d (this.getClass().getSimpleName(), "loading " + inputFilePath + "...");
Mat image = Imgcodecs.imread(inputFilePath);
Log.d (this.getClass().getSimpleName(), "width of " + inputFileName + ": " + image.width());
// if width is 0 then it did not read your image.
// for the canny edge detection algorithm, play with these to see different results
int threshold1 = 70;
int threshold2 = 100;
Mat im_canny = new Mat(); // you have to initialize output image before giving it to the Canny method
Imgproc.Canny(image, im_canny, threshold1, threshold2);
String cannyFilename = outputDir + File.separator + inputFileName + "_canny-" + threshold1 + "-" + threshold2 + "." + outputExtension;
Log.d (this.getClass().getSimpleName(), "Writing " + cannyFilename);
Imgcodecs.imwrite(cannyFilename, im_canny);
Uygulamanızı çalıştırın. Emülatörünüz siyah beyaz bir "kenar" görüntü oluşturmalıdır. Çıkışı almak için Android Cihaz Monitörü'nü kullanabilir veya göstermek için bir etkinlik yazabilirsiniz.