OpenCV w Android Studio

Chcę korzystać z biblioteki OpenCV w mojej aplikacji z Android Studio. Wykonałem instrukcje znalezione tutaj ale dostaję błąd

Konfiguracja o nazwie 'default' nie została znaleziona

Co może być nie tak?

Używam Android Studio 1.0 z gradle 2.2.1.

Author: Hakam Fostok, 2014-12-10

6 answers

Poniższe kroki dotyczące korzystania z Android OpenCV sdk w Android Studio. Jest to uproszczona wersja tego(1) więc odpowiedz.

  1. Pobierz najnowszy OpenCV sdk dla Androida z OpenCV.org i rozpakować plik zip.
  2. Importuj OpenCV do Android Studio , z File - > New - > Import Module, wybierz sdk/java folder w rozpakowanym archiwum opencv.
  3. Update build.gradle pod importowanym OpenCV moduł do aktualizacji 4 pól, aby pasowały do twojego projektu.gradle a) compileSdkVersion b) buildToolsVersion c) minSdkVersion I d) targetSdkVersion.
  4. Dodaj zależność modułu przez Application - > Module Settings i wybierz zakładkę Dependencies. Klik + ikona na dole wybierz zależność modułu i wybierz importowany moduł OpenCV.
    • Dla Android Studio v1. 2. 2, aby uzyskać dostęp do ustawień modułu : w widoku projektu, kliknij prawym przyciskiem myszy moduł zależny - >Otwórz Ustawienia Modułu
  5. Kopia libs folder pod sdk / native do Android Studio pod app / src / main.
  6. W Android Studio, Zmień nazwę skopiowanego katalogu libs na jniLibs i skończyliśmy.

Krok (6) jest od android studio oczekuje natywnych bibliotek w app/src/main/jniLibs zamiast w folderze libs. Dla tych, którzy są nowi w Android OpenCV, nie miss below steps

  • include static{ System.loadLibrary("opencv_java"); } (Uwaga: Dla OpenCV w wersji 3 w tym kroku należy załadować bibliotekę opencv_java3.)
  • dla step(5), jeśli zignorujesz biblioteki platformy takie jak x86, upewnij się, że Twoje urządzenie/emulator nie znajduje się na tej platformie.
OpenCV napisany jest w C / C++. Wrappery Javy to
  1. Android OpenCV SDK - OpenCV.org utrzymywany Android Java wrapper. Proponuję ten.
  2. OpenCV Java - OpenCV.org utrzymywany automatycznie wygenerowany pulpit Java wrapper.
  3. JavaCV - popularny wrapper Java utrzymywany przez niezależnych programistów. Nie dotyczy Androida. Ta biblioteka Może przestać synchronizować się z nowszymi wersjami OpenCV.
 274
Author: Kiran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-13 17:55:26

Integracja OpenCV v3. 1. 0 z Android Studio v1.4.1, instrukcje z dodatkowymi szczegółami i to-jest-co-powinieneś-dostać zrzuty ekranu.

Większość kredytu idzie do Kiran, Kool, 1", i SteveLiles na opencv.org za ich wyjaśnienia. Dodaję tę odpowiedź, ponieważ uważam, że interfejs Android Studio jest teraz wystarczająco stabilny, aby pracować z tego typu integracją. Również i tak muszę napisać te instrukcje dla naszych projekt.

Doświadczeni programiści A. S. znajdą trochę tego pedantycznego. Ta odpowiedź jest skierowana do osób z ograniczonym doświadczeniem w Android Studio.

  1. Utwórz nowy projekt Android Studio za pomocą Kreatora projektu (Menu:/Plik/Nowy Projekt):

    • Nazwij to " cvtest1 "
    • współczynnik kształtu: API 19, Android 4.4 (KitKat)
    • Blank Activity nazwane MainActivity

      Powinieneś mieć cvtest1 katalog, w którym przechowywany jest ten projekt. (pasek tytułowy Android studio pokazuje, gdzie jest cvtest1 po otwarciu projektu)

  2. Sprawdź, czy aplikacja działa poprawnie. Spróbuj zmienić coś takiego jak tekst "Hello World", aby potwierdzić, że cykl budowania/testowania jest dla Ciebie odpowiedni. (Testuję z emulatorem urządzenia API 19).

  3. Pobierz pakiet OpenCV dla Androida v3.1.0 i rozpakuj go w jakimś tymczasowym katalogu gdzieś. (Upewnij się, że jest to pakiet specjalnie dla Androida, a nie tylko Pakiet OpenCV dla Javy.) Nazwę Ten katalog "unzip-dir" poniżej unzip-dir powinieneś mieć sdk/native/libs katalog z podkatalogami zaczynającymi się od rzeczy takich jak arm..., mips... i x86... (po jednym dla każdego typu "architektury" Android działa na)

  4. Z Android Studio Importuj OpenCV do swojego projektu jako moduł: Menu: / File / New / Import_Module:

    • Source-directory: {unzip-dir} / sdk / java
    • Nazwa modułu: Android studio automatycznie wypełnia to pole openCVLibrary310 (dokładna nazwa prawdopodobnie nie ma znaczenia, ale pójdziemy z tym).
    • Kliknij na następny. Otrzymasz ekran z trzema polami wyboru i pytaniami dotyczącymi słoików, bibliotek i opcji importu. Wszystkie trzy powinny być sprawdzone. Kliknij na Zakończ.

      Android Studio zaczyna importować moduł i pojawi się podsumowanie importu.txt plik zawierający listę tego, co nie zostało zaimportowane (głównie pliki javadoc) i inne informacje. Tutaj wpisz opis obrazka

      Ale otrzymasz również komunikat o błędzie mówiący nie udało się znaleźć target z Hash ciągiem'android-14'.... Dzieje się tak, ponieważ budowa.plik gradle w pobranym pliku zip OpenCV mówi do kompilacji przy użyciu wersji android API 14, którego domyślnie nie masz w Android Studio v1. 4. 1. Tutaj wpisz opis obrazka

  5. Otwórz okno dialogowe struktura projektu (Menu: / File / Project_struktura ). Wybierz moduł "app", Kliknij na zakładkę Dependencies i dodaj : openCVLibrary310 jako zależność modułu. Po wybraniu Dodaj / Module_Dependency powinien pojawić się na liście modułów, które możesz dodać. Pojawi się teraz jako zależność, ale otrzymasz jeszcze kilka Nie można znaleźć-android-14 błędy w dzienniku zdarzeń.

  6. Spójrz w budować.gradle plik dla modułu aplikacji. Istnieje wiele konstrukcji.pliki gradle w projekcie Android. Ten, który chcesz znaleźć w katalogu cvtest1 / app i z widoku projektu wygląda jak build.gradle (Module: app) . Zwróć uwagę na wartości tych czterech pól:

    • compileSDKVersion (mine says 23)
    • buildToolsVersion (mój mówi 23.0.2)
    • minSdkVersion (mine says 19)
    • targetSdkVersion (mine says 23)
  7. Twój projekt ma teraz katalog cvtest1/OpenCVLibrary310, ale nie jest widoczny z widoku projektu:

Tutaj wpisz opis obrazka

Użyj innego narzędzia, takiego jak dowolny menedżer plików, i przejdź do tego katalogu. Możesz również przełączyć widok projektu z Android na pliki projektu i możesz znaleźć ten katalog jako pokazane na tym zrzucie ekranu: Tutaj wpisz opis obrazka

Wewnątrz znajduje się kolejna Budowa.gradle Plik (jest podświetlony na powyższym zrzucie ekranu). Zaktualizuj ten plik o cztery wartości z kroku 6.

  1. Ponownie Zsynchronizuj swój projekt, a następnie wyczyść/Przebuduj go. (Menu: / Build / Clean_Project) powinno czyścić i budować bez błędów i powinieneś zobaczyć wiele odniesień do :openCVLibrary310 w 0: Messages ekran.

    Tutaj wpisz opis obrazka

    W tym momencie moduł powinien pojawić się w hierarchii projektu jako openCVLibrary310, podobnie jak app. (Zauważ, że w tym małym rozwijanym menu przełączyłem się z Project View na Android View ). Powinieneś również zobaczyć dodatkową build.gradle Plik pod "Skrypty Gradle" ale uważam interfejs Android Studio trochę glitchy i czasami nie robi tego od razu. Więc spróbuj resynchowanie, czyszczenie, a nawet ponowne uruchamianie Android Studio.

    Powinieneś zobaczyć moduł openCVLibrary310 ze wszystkimi funkcjami OpenCV w Javie, jak na tym zrzucie ekranu:

    Tutaj wpisz opis obrazka

  2. Skopiuj katalog {unzip-dir}/sdk/native / libs (i wszystko pod nim) do projektu Androida, do cvtest1/OpenCVLibrary310/src/main/, a następnie zmień nazwę swojej kopii od libs do jniLibs . Powinieneś teraz mieć katalog cvtest1/OpenCVLibrary310/src/main/jnilibs . Ponownie zsynchronizuj swój projekt i ten katalog powinien teraz pojawi się w widoku projektu pod openCVLibrary310.

    Tutaj wpisz opis obrazka

  3. Przejdź do metody OnCreate MainActivity.java i dołącz ten kod:

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

    Następnie uruchom aplikację. Powinieneś zobaczyć takie linie na monitorze Androida: Tutaj wpisz opis obrazka (Nie wiem dlaczego ta linia z Komunikatem o błędzie jest tam)

  4. Teraz spróbuj użyć kodu openCV. W poniższym przykładzie skopiowałem a .plik jpg do katalogu cache aplikacji cvtest1 na emulatorze android. Poniższy kod ładuje ten obrazek, uruchamia algorytm wykrywania krawędzi canny, a następnie zapisuje wyniki z powrotem do .plik png w tym samym katalogu.

    Umieść ten kod tuż pod kodem z poprzedniego kroku i zmień go, aby pasował do własnych plików / katalogów.

    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);
    
  5. Run your podanie. Twój emulator powinien utworzyć czarno-biały" krawędź " obraz. Możesz użyć Monitora Urządzenia z systemem Android aby pobrać wyjście lub napisać działanie, aby je pokazać.

The Gotchas :

  • jeśli obniżysz swoją docelową platformę poniżej KitKat, niektóre biblioteki OpenCV przestaną działać, w szczególności klasy związane z org.opencv.android.Camera2Renderer i inne pokrewne klasy. Prawdopodobnie możesz to obejść po prostu usunięcie apprpriate OpenCV .pliki java.
  • jeśli podniesiesz swoją platformę docelową do Lollipop lub powyżej mojego przykładu ładowania pliku może nie działać, ponieważ użycie bezwzględnych ścieżek plików jest marne. Więc być może będziesz musiał zmienić przykład, aby załadować plik z galerii lub gdzieś indziej. Istnieje wiele przykładów.
 132
Author: ssimm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-14 18:34:21

Dla wszystkich, którzy czuli, że chcą uciec ze wszystkimi krokami i zrzutami ekranu na (super!) powyżej odpowiedzi, u mnie to działało z android studio 2.2.1:

  1. Utwórz nowy projekt, nazwij go jak chcesz i wybierz domyślny (minSdkVersion 15 jest w porządku).
  2. Pobierz plik zip stąd: https://sourceforge.net/projects/opencvlibrary/files/opencv-android / (pobrałem wersję 3.1.0, ale może być nowsza wersja).
  3. rozpakuj plik zip, najlepsze miejsce znajduje się w folderze obszaru roboczego, ale tak naprawdę nie ma to znaczenia.
  4. wewnątrz Android Studio, Kliknij File->New-> Import Module i przejdź do \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java i naciśnij Ok, a następnie zaakceptuj wszystkie domyślne okna dialogowe.
  5. W pliku gradle twojego modułu app dodaj to do bloku zależności:

    dependencies {
        compile project(':openCVLibraryXYZ')
        //rest of code
    }
    

Gdzie XYZ jest dokładną wersją, którą ściągasz, na przykład w moim przypadku:

    dependencies {
        compile project(':openCVLibrary320')
        //rest of code
    }
 32
Author: yshahak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-17 13:41:30

Wyświetla się każdy problem podczas tworzenia jnilibs cpp ..wystarczy dodać ndk ..

 0
Author: Aklesh Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-17 13:41:02

Integracja Opencv z android studio

Ci, którzy chcą mieć film na youtube do tego samego, spróbuj z najnowszą wersją opencv chociaż(3.4.0), moje szczęście nie było wystarczająco dobre dla pokazanej wersji (2.4.9) ( OpenCV releases).

 0
Author: Prakhar1001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-20 22:34:19

Możesz również dodać tę bibliotekę do build.gradle

dependencies{
   compile 'org.opencv:opencv-android:2.4.8'
}
 -3
Author: Istiyak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-16 16:32:28