Suche…


Bemerkungen

Die Open CV-Bibliotheken können mithilfe einer Suchmaschine im Internet gefunden werden.

Die Gotchas :

  • Wenn Sie Ihre Zielplattform unter KitKat senken, funktionieren einige der OpenCV-Bibliotheken nicht mehr, insbesondere die mit org.opencv.android.Camera2Renderer und anderen verwandten Klassen verbundenen Klassen. Sie können dies wahrscheinlich umgehen, indem Sie einfach die entsprechenden Java-Dateien von OpenCV entfernen.
  • Wenn Sie Ihre Zielplattform auf Lollipop oder höher einstellen, funktioniert mein Beispiel für das Laden einer Datei möglicherweise nicht, da die Verwendung absoluter Dateipfade nicht erlaubt ist. Möglicherweise müssen Sie das Beispiel ändern, um eine Datei aus der Galerie oder anderswo zu laden. Es gibt zahlreiche Beispiele.

Anleitung

Getestet mit AS v1.4.1, sollte aber auch mit neueren Versionen funktionieren.

  1. Erstellen Sie ein neues Android Studio-Projekt mit dem Projektassistenten (Menü: / Datei / Neues Projekt):

    • Nennen Sie es " cvtest1 "
    • Formfaktor: API 19, Android 4.4 (KitKat)
    • Leere Aktivität mit dem Namen MainActivity

    Sie sollten über ein Verzeichnis cvtest1 verfügen, in dem dieses Projekt gespeichert ist. (Die Titelleiste des Android-Studios zeigt an, wo sich cvtest1 befindet, wenn Sie das Projekt öffnen.)

  1. Stellen Sie sicher, dass Ihre App ordnungsgemäß ausgeführt wird. Ändern Sie den Text "Hello World", um zu bestätigen, dass der Build- / Testzyklus für Sie in Ordnung ist. (Ich teste mit einem Emulator eines API 19-Geräts).

  2. Laden Sie das OpenCV-Paket für Android v3.1.0 herunter und entpacken Sie es in einem temporären Verzeichnis. (Stellen Sie sicher , dass es das Paket ist speziell für Android und nicht nur die OpenCV für Java - Paket.) Ich werde dieses Verzeichnis als „unzip-dir“ Below unzip-dir sollten Sie eine sdk haben / native / libs Verzeichnis mit Unterverzeichnissen , die mit starten Dinge wie Arm ..., Mips ... und x86 ... (eine für jeden Typ von "Architektur", auf dem Android läuft)

  3. Importieren Sie OpenCV aus Android Studio als Modul in Ihr Projekt: Menü: / Datei / Neu / Import_Module :

    • Quellverzeichnis : {unzip-dir} / sdk / java
    • Modulname : Android Studio füllt dieses Feld automatisch mit openCVLibrary310 aus (der genaue Name ist wahrscheinlich unwichtig , aber wir gehen davon aus).
    • 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 anderer Informationen enthält.
    Geben Sie hier die Bildbeschreibung ein

    Sie erhalten jedoch auch eine Fehlermeldung, dass das Ziel mit der Hash-Zeichenfolge 'android-14' nicht gefunden werden konnte . Dies ist darauf zurückzuführen, dass die Datei build.gradle in der von Ihnen heruntergeladenen OpenCV-ZIP-Datei mit der Android-API-Version 14 kompiliert wird, über die Sie in Android Studio v1.4.1 standardmäßig nicht verfügen. Geben Sie hier die Bildbeschreibung ein

  1. Öffnen Sie den Projektstruktur-Dialog ( Menü: / Datei / Projektstruktur ). Wählen Sie das "App" -Modul 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 jetzt als Abhängigkeit angezeigt , aber im Ereignisprotokoll werden einige weitere " not-find-android-14" -Fehler angezeigt.

  2. Suchen Sie in der Datei build.gradle nach Ihrem App-Modul. In einem Android-Projekt gibt es mehrere build.gradle-Dateien. Die gewünschte Datei befindet sich im Verzeichnis cvtest1 / app und sieht in der Projektansicht wie build.gradle (Module: app) aus . Beachten Sie die Werte dieser vier Felder:

    • compileSDKVersion (mein sagt 23)
    • buildToolsVersion (meine sagt 23.0.2)
    • minSdkVersion (meiner sagt 19)
    • targetSdkVersion (meine sagt 23)
  3. Ihr Projekt hat jetzt ein Verzeichnis cvtest1 / OpenCVLibrary310 , ist jedoch in der Projektansicht nicht sichtbar:

Geben Sie hier die Bildbeschreibung ein

Verwenden Sie ein anderes Tool, beispielsweise einen Dateimanager, und wechseln Sie in dieses Verzeichnis. Sie können auch die Projektansicht von Android auf Projektdateien umstellen und dieses Verzeichnis wie in diesem Screenshot gezeigt finden: Geben Sie hier die Bildbeschreibung ein

Darin befindet sich eine weitere build.gradle- Datei (diese ist im obigen Screenshot hervorgehoben). Aktualisieren Sie diese Datei mit den vier Werten aus Schritt 6.

  1. Synchronisieren Sie Ihr Projekt erneut und bereinigen / erstellen Sie es anschließend neu. ( Menü: / Build / Clean_Project ) Es sollte ohne Fehler bereinigt und erstellt werden, und es sollten viele Verweise auf : openCVLibrary310 im Bildschirm 0: Messages angezeigt werden.

    Geben Sie hier die Bildbeschreibung ein

    Zu diesem Zeitpunkt sollte das Modul in der Projekthierarchie wie openCVLibrary310 angezeigt werden , genau wie die App . (Beachten Sie, dass ich in diesem kleinen Dropdown-Menü wieder von der Projektansicht zur Android-Ansicht gewechselt bin). Sie sollten auch eine zusätzliche build.gradle -Datei unter "Gradle Scripts" sehen, aber ich finde die Android Studio-Benutzeroberfläche etwas unangenehm und manchmal tut es das nicht gleich. Versuchen Sie es also erneut, Android Studio neu zu synchronisieren, zu reinigen und sogar neu zu starten.

    Sie sollten das openCVLibrary310-Modul mit allen OpenCV-Funktionen unter Java wie in diesem Screenshot sehen:

    Geben Sie hier die Bildbeschreibung ein

  2. Kopieren Sie das Verzeichnis {unzip-dir} / sdk / native / libs (und alles darunter) in Ihr Android-Projekt in 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 .

    Geben Sie hier die Bildbeschreibung ein

  3. Gehen Sie zur onCreate-Methode von MainActivity.java und hängen Sie diesen Code an:

if (!OpenCVLoader.initDebug()) {
        Log.e(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), not working.");
    } else {
        Log.d(this.getClass().getSimpleName(), "  OpenCVLoader.initDebug(), working.");
    }

Führen Sie dann Ihre Anwendung aus. Sie sollten solche Zeilen im Android-Monitor sehen:

Geben Sie hier die Bildbeschreibung ein

(Ich weiß nicht, warum diese Zeile mit der Fehlermeldung vorhanden ist)

  1. Versuchen Sie nun, tatsächlich OpenCV-Code zu verwenden. Im folgenden Beispiel habe ich eine .jpg-Datei in das Cache-Verzeichnis der cvtest1-Anwendung auf dem Android-Emulator kopiert. Mit dem folgenden Code wird dieses Image geladen, der Erkennungsalgorithmus "canny edge" ausgeführt und die Ergebnisse in eine .png-Datei im selben Verzeichnis zurückgeschrieben.
Put this code just below the code from the previous step and alter it to match your own files/directories.
 
    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);
  1. Führen Sie Ihre Anwendung aus. Ihr Emulator sollte ein Schwarzweißbild "Rand" erstellen. Sie können den Android-Gerätemonitor verwenden, um die Ausgabe abzurufen oder eine Aktivität zu schreiben, um sie anzuzeigen.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow