Ich möchte die OpenCV-Bibliothek in meiner App mit Android Studio verwenden. Ich habe die hier aufgeführten Anweisungen befolgt , erhalte jedoch eine Fehlermeldung
Konfiguration mit dem Namen 'Standard' nicht gefunden
Was kann falsch sein?
Ich benutze Android Studio 1.0 mit Gradle 2.2.1.
android
opencv
android-studio
gradle
Bartosz Bialecki
quelle
quelle
native
Verzeichnis unter meinemsdk
Verzeichnis nicht finden. Fehlt mir etwas?Antworten:
Die folgenden Schritte zur Verwendung von Android OpenCV sdk in Android Studio. Dies ist eine vereinfachte Version dieser ( 1 ) SO-Antwort.
Schritt (6) ist, da Android Studio native Bibliotheken
app/src/main/jniLibs
anstelle ältererlibs
Ordner erwartet . Verpassen Sie für diejenigen, die neu in Android OpenCV sind, die folgenden Schritte nichtstatic{ System.loadLibrary("opencv_java"); }
(Hinweis: Für OpenCV Version 3 sollten Sie in diesem Schritt stattdessen die Bibliothek ladenopencv_java3
.)OpenCV ist in C / C ++ geschrieben. Java-Wrapper sind
quelle
javadocs
Verzeichnis .Es fragt mich auch für die Installation?android sdk 14
Obwohl ich Targeting - Geräte , dass die Unterstützungandroid sdk 15
sdk
Installationsverzeichnis auf meinem System gesprochen, während Sie über das Verzeichnis gesprochen haben, das mitAndroid Open CV SDK
.Ok abgeschlossen ist. Schritt 6. Wo füge ich einstatic{ System.loadLibrary("opencv_java"); }
?android-14
Fehler nach dem Importieren des Moduls in Schritt 2 haben, müssen Siebuild.gradle
das Verzeichnis im openCV-Verzeichnis in Ihrem Projekt manuell bearbeiten, wie in Schritt 3 gezeigt.Integration von OpenCV v3.1.0 in Android Studio v1.4.1 , Anweisungen mit zusätzlichen Details und Screenshots vom Typ "Dies ist das, was Sie erhalten sollten".
Der größte Teil des Kredits geht an Kiran, Kool, 1 "und SteveLiles von opencv.org für ihre Erklärungen. Ich füge diese Antwort hinzu, weil ich glaube, dass die Benutzeroberfläche von Android Studio jetzt stabil genug ist, um mit dieser Art von Integrationsmaterial zu arbeiten Außerdem muss ich diese Anleitung sowieso für unser Projekt schreiben.
Erfahrene AS-Entwickler werden einige dieser pedantischen finden. Diese Antwort richtet sich an Personen mit begrenzter Erfahrung in Android Studio.
Erstellen Sie mit dem Projektassistenten ein neues Android Studio-Projekt (Menü: / Datei / Neues Projekt):
Leere Aktivität mit dem Namen MainActivity
Sie sollten ein cvtest1- Verzeichnis haben, in dem dieses Projekt gespeichert ist. (Die Titelleiste von Android Studio zeigt Ihnen, wo sich cvtest1 befindet, wenn Sie das Projekt öffnen.)
Stellen Sie sicher, dass Ihre App ordnungsgemäß ausgeführt wird. Versuchen Sie, etwas wie den Text "Hallo Welt" zu ändern, um zu bestätigen, dass der Erstellungs- / Testzyklus für Sie in Ordnung ist. (Ich teste mit einem Emulator eines API 19-Geräts).
Laden Sie das OpenCV-Paket für Android v3.1.0 herunter und entpacken Sie es irgendwo in einem temporären Verzeichnis. (Stellen Sie sicher, dass es sich um das Paket speziell für Android handelt und nicht nur um das OpenCV für Java-Paket.) Ich nenne dieses Verzeichnis " unzip-dir ". Unter unzip-dir sollten Sie ein Verzeichnis sdk / native / libs mit Unterverzeichnissen haben, die mit beginnen Dinge wie Arm ..., Mips ... und x86 ... (eine für jede Art von "Architektur", auf der Android läuft)
Importieren Sie OpenCV aus Android Studio als Modul in Ihr Projekt: Menü: / File / New / Import_Module :
Klicken Sie auf Weiter . Sie erhalten einen Bildschirm mit drei Kontrollkästchen und Fragen zu Gläsern, Bibliotheken und Importoptionen. Alle drei sollten überprüft werden. Klicken Sie auf Fertig stellen.
Android Studio beginnt mit dem Import des Moduls und es wird eine Datei import-summary.txt angezeigt , die eine Liste der nicht importierten Dateien (hauptsächlich Javadoc-Dateien) und andere Informationen enthält.
Sie erhalten jedoch auch die Fehlermeldung, dass das Ziel mit der Hash-Zeichenfolge 'android-14' nicht gefunden werden konnte . Dies liegt daran, dass die Datei build.gradle in der von Ihnen heruntergeladenen OpenCV-Zip-Datei besagt, dass sie mit der Android API Version 14 kompiliert werden soll, die Sie mit Android Studio v1.4.1 standardmäßig nicht haben.
Öffnen Sie den Projektstrukturdialog ( Menü: / File / Project_Structure ). Wählen Sie das Modul "App" aus, klicken Sie auf die Registerkarte " Abhängigkeiten" und fügen Sie Folgendes hinzu : openCVLibrary310 als Modulabhängigkeit . Wenn Sie Add / Module_Dependency auswählen , sollte es in der Liste der Module angezeigt werden, die Sie hinzufügen können. Es wird nun als Abhängigkeit angezeigt , aber im Ereignisprotokoll werden einige weitere Fehler angezeigt, bei denen Android-14 nicht gefunden werden kann.
Suchen Sie in der Datei build.gradle nach Ihrem App-Modul. In einem Android-Projekt gibt es mehrere build.gradle-Dateien. Die gewünschte befindet sich im Verzeichnis cvtest1 / app und sieht in der Projektansicht wie build.gradle (Modul: App) aus . Beachten Sie die Werte dieser vier Felder:
Ihr Projekt verfügt jetzt über ein Verzeichnis cvtest1 / OpenCVLibrary310, das jedoch in der Projektansicht nicht sichtbar ist:
Verwenden Sie ein anderes Tool, z. B. einen Dateimanager, und wechseln Sie in dieses Verzeichnis. Sie können auch die Projektansicht von Android auf Projektdateien umschalten und dieses Verzeichnis wie in diesem Screenshot gezeigt finden:
Im Inneren befindet sich eine weitere build.gradle- Datei (im obigen Screenshot hervorgehoben). Aktualisieren Sie diese Datei mit den vier Werten aus Schritt 6.
Synchronisieren Sie Ihr Projekt erneut und bereinigen Sie es anschließend. (Menü: / Build / Clean_Project ) Es sollte fehlerfrei bereinigt und erstellt werden, und im Bildschirm 0: Nachrichten sollten viele Verweise auf : openCVLibrary310 angezeigt werden.
Zu diesem Zeitpunkt sollte das Modul in der Projekthierarchie wie die App als openCVLibrary310 angezeigt werden . (Beachten Sie, dass ich in diesem kleinen Dropdown-Menü von der Projektansicht zur Android-Ansicht zurückgeschaltet habe ). Sie sollten auch eine zusätzliche build.gradle- Datei unter "Gradle Scripts" sehen, aber ich finde die Android Studio-Oberfläche etwas fehlerhaft und manchmal funktioniert dies nicht sofort. Versuchen Sie also, Android Studio erneut zu synchronisieren, zu bereinigen oder sogar neu zu starten.
Sie sollten das openCVLibrary310-Modul mit allen OpenCV-Funktionen unter Java wie in diesem Screenshot sehen:
Kopieren Sie das Verzeichnis {unzip-dir} / sdk / native / libs (und alles darunter) in Ihr Android-Projekt nach cvtest1 / OpenCVLibrary310 / src / main / und benennen Sie Ihre Kopie von libs in jniLibs um . Sie sollten jetzt ein Verzeichnis cvtest1 / OpenCVLibrary310 / src / main / jniLibs haben . Synchronisieren Sie Ihr Projekt erneut, und dieses Verzeichnis sollte jetzt in der Projektansicht unter openCVLibrary310 angezeigt werden .
Gehen Sie zur onCreate-Methode von MainActivity.java und fügen Sie diesen Code hinzu:
Führen Sie dann Ihre Anwendung aus. Im Android-Monitor sollten folgende Zeilen angezeigt werden: (Ich weiß nicht, warum diese Zeile mit der Fehlermeldung vorhanden ist.)
Versuchen Sie nun, tatsächlich einen openCV-Code zu verwenden. Im folgenden Beispiel habe ich eine JPG-Datei in das Cache-Verzeichnis der Anwendung cvtest1 auf dem Android-Emulator kopiert. Der folgende Code lädt dieses Bild, führt den Algorithmus zur Erkennung kniffliger Kanten aus und schreibt die Ergebnisse in eine PNG-Datei im selben Verzeichnis zurück.
Fügen Sie diesen Code direkt unter den Code aus dem vorherigen Schritt ein und ändern Sie ihn so, dass er Ihren eigenen Dateien / Verzeichnissen entspricht.
Führen Sie Ihre Anwendung aus. Ihr Emulator sollte ein Schwarzweiß-Randbild erstellen. Sie können den Android-Gerätemonitor verwenden, um die Ausgabe abzurufen, oder eine Aktivität schreiben, um sie anzuzeigen.
Die Fallstricke :
quelle
OpenCV error: Cannot load info library for OpenCV
2java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/www.deven.com.opencv-2/base.apk"],nativeLibraryDirectories=[/vendor/lib, /system/lib]]] couldn't find "libopencv_java3.so
Was über diesen Fehler habe ich Schritt für Schritt gemacht, wie Sie geschrieben haben.Für alle, die das Gefühl hatten, mit all den Schritten und Screenshots der (großartigen!) Antworten oben davonlaufen zu wollen, funktionierte dies für mich mit
android studio 2.2.1
:Android Studio
Klicken Sie im Inneren aufFile->New-> Import Module
und navigieren Sie zu\path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
und klicken Sie auf OK. Akzeptieren Sie dann alle Standarddialoge.In der
gradle
Datei desapp
Moduls, fügen Sie diese an die Abhängigkeiten Block:Wobei XYZ die genaue Version ist, die Sie herunterladen, zum Beispiel in meinem Fall:
quelle
Android Studio 3.4 + OpenCV 4.1
Laden Sie die neueste OpenCV-Zip-Datei von hier herunter (die aktuellste Version ist 4.1.0) und entpacken Sie sie in Ihrem Arbeitsbereich oder in einem anderen Ordner.
Erstellen Sie normal ein neues Android Studio-Projekt. Klicken Sie auf
File->New->Import Module
, navigieren Sie zu/path_to_unzipped_files/OpenCV-android-sdk/sdk/java
, legenopencv
Sie denNext
Modulnamen fest , klicken Sie auf und deaktivieren Sie alle Optionen auf dem Bildschirm.Aktivieren Sie den Dateiansichtsmodus
Project
(Standardmodus istAndroid
). In deropencv/build.gradle
Dateiänderungapply plugin: 'com.android.application'
aufapply plugin: 'com.android.library'
und ersetztapplication ID "org.opencv"
mit(gemäß den Werten in
app/build.gradle
). Projekt mit Gradle-Dateien synchronisieren.Fügen Sie diese Zeichenfolge dem Abhängigkeitsblock in der
app/build.gradle
Datei hinzuWählen Sie erneut den
Android
Dateiansichtsmodus. Klicken Sie mit der rechten Maustaste auf dasapp
Modul und gehen Sie zuNew->Folder->JNI Folder
. Wählen Sie Ordner ändern ändern und legen Sie festsrc/main/jniLibs/
.Wählen Sie erneut den
Project
Dateiansichtsmodus und kopieren Sie alle Ordner von/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
nachapp/src/main/jniLibs
.Wieder in
Android
Mode Dateiansicht rechts auf klickenapp
Modul und wählenLink C++ Project with Gradle
. Wählen Sie Build Systemndk-build
und Pfad zurOpenCV.mk
Datei/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.path_to_unzipped_files
darf keine Leerzeichen enthalten, sonst wird ein Fehler angezeigt!Um die OpenCV-Initialisierung zu überprüfen, fügen Sie eine Toast-Nachricht in die MainActivity-
onCreate()
Methode ein:Wenn die Initialisierung erfolgreich ist, wird
true
in der Toast-Nachricht etwas anderes angezeigtfalse
.quelle
application ID "org.opencv"
Zeichenfolge durch zwei Zeichenfolgen ersetzen :minSdkVersion 21
undtargetSdkVersion 28
(gemäß den Werten in der Datei app / build.gradle)Jeder, der beim Erstellen von jniLibs cpp auf Probleme stößt, wird angezeigt. Fügen Sie einfach ndk hinzu.
quelle
Dies funktionierte für mich und war so einfach wie das Hinzufügen einer Gradle-Abhängigkeit:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
Die einzige Einschränkung war, dass ich ein Hardware-Debugging-Gerät verwenden musste, da Armemulatoren für mich zu langsam liefen (wie AVD Manager sagt), und wie in der Repo-README beschrieben, enthält diese Version keine x86- oder x86_64-Unterstützung.
Es scheint zu bauen und der vorgeschlagene Test:
spuckt eine Menge Ausgabe aus, die für mich ungefähr richtig aussieht.
quelle
In Ihrem build.gradle
Weitere Infos
quelle