Chcę używać biblioteki OpenCV w mojej aplikacji z Android Studio. Postępowałem zgodnie z instrukcjami podanymi tutaj, ale pojawia się błąd
Nie znaleziono konfiguracji o nazwie „domyślna”
Co może być nie tak?
Używam Android Studio 1.0 z gradle 2.2.1.
android
opencv
android-studio
gradle
Bartosza Białeckiego
źródło
źródło
native
katalogu w swoimsdk
katalogu, czy czegoś brakuje?Odpowiedzi:
Poniższe kroki dotyczące korzystania z zestawu SDK OpenCV systemu Android w Android Studio. To jest uproszczona wersja tej ( 1 ) odpowiedzi SO.
Krok (6) jest taki, ponieważ Android studio oczekuje natywnych bibliotek
app/src/main/jniLibs
zamiast starszegolibs
folderu. Dla tych, którzy są nowicjuszami w Android OpenCV, nie przegap poniższych krokówstatic{ System.loadLibrary("opencv_java"); }
(Uwaga: w przypadku OpenCV w wersji 3 na tym etapie należy zamiast tego załadować bibliotekęopencv_java3
).OpenCV napisany jest w C / C ++. Otoki Java są
źródło
javadocs
katalog? .Prosi mnie również o zainstalowanie,android sdk 14
chociaż celuję w urządzenia, które obsługująandroid sdk 15
sdk
katalogu instalacyjnym w moim systemie, kiedy mówisz o katalogu, który jest dołączony.Android Open CV SDK
OK, wykonałem krok 6. Gdzie mam dołączyćstatic{ System.loadLibrary("opencv_java"); }
?android-14
błąd po zaimportowaniu modułu w kroku 2, musisz ręcznie edytowaćbuild.gradle
katalog openCV w swoim projekcie, jak pokazano w kroku 3.Integracja OpenCV 3.1.0 z Android Studio v1.4.1 , instrukcje z dodatkowymi szczegółami i zrzuty ekranu typu „to jest to, co powinieneś-powinieneś”.
Większość zasługi dla Kirana, Koola 1 "i SteveLilesa z 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ą Ponadto i tak muszę napisać te instrukcje dla naszego projektu.
Doświadczeni programiści AS znajdą trochę tego pedantycznego. Ta odpowiedź jest skierowana do osób z ograniczonym doświadczeniem w Android Studio.
Utwórz nowy projekt Android Studio za pomocą kreatora projektów (Menu: / Plik / Nowy projekt):
Puste działanie o nazwie MainActivity
Powinieneś mieć katalog cvtest1, w którym jest przechowywany ten projekt. (pasek tytułu Android Studio pokazuje, gdzie jest cvtest1 po otwarciu projektu)
Sprawdź, czy Twoja aplikacja działa poprawnie. Spróbuj zmienić coś, na przykład tekst „Hello World”, aby potwierdzić, że cykl kompilacji / testowania jest dla Ciebie odpowiedni. (Testuję na emulatorze urządzenia API 19).
Pobierz pakiet OpenCV dla Androida 3.1.0 i rozpakuj go gdzieś w jakimś katalogu tymczasowym. (Upewnij się, że jest to pakiet przeznaczony specjalnie dla systemu Android, a nie tylko pakiet OpenCV for Java). Nazwę ten katalog „ unzip-dir ” Poniżej unzip-dir powinieneś mieć katalog sdk / native / libs z podkatalogami zaczynającymi się od rzeczy takie jak arm ..., mips ... i x86 ... (po jednym dla każdego typu „architektury”, na której działa Android)
Z Android Studio zaimportuj OpenCV do swojego projektu jako moduł: Menu: / File / New / Import_Module :
Kliknij dalej . Otrzymasz ekran z trzema polami wyboru i pytaniami dotyczącymi słoików, bibliotek i opcji importu. Wszystkie trzy należy sprawdzić. Kliknij Zakończ.
Android Studio zaczyna importować moduł i pojawia się plik import-summary.txt , który zawiera listę elementów, które nie zostały zaimportowane (głównie pliki javadoc) oraz inne informacje.
Ale można również uzyskać komunikat o błędzie nie udało się znaleźć cel z hash ciąg „android-14” ... . Dzieje się tak, ponieważ plik build.gradle w pobranym pliku zip OpenCV mówi, że należy kompilować za pomocą interfejsu Android API w wersji 14, którego domyślnie nie masz w Android Studio v1.4.1.
Otwórz okno dialogowe struktury projektu ( Menu: / File / Project_Structure ). Wybierz moduł „aplikacja”, kliknij zakładkę Zależności 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ć. Teraz pojawi się jako zależność, ale w dzienniku zdarzeń pojawi się kilka innych błędów braku możliwości znalezienia Androida-14 .
Poszukaj w pliku build.gradle swojego modułu aplikacji. W projekcie systemu Android znajduje się wiele plików build.gradle. Ten, który chcesz, znajduje się w katalogu cvtest1 / app iz widoku projektu wygląda jak build.gradle (moduł: aplikacja) . Zwróć uwagę na wartości tych czterech pól:
Twój projekt ma teraz katalog cvtest1 / OpenCVLibrary310, ale nie jest on widoczny w widoku projektu:
Użyj innego narzędzia, na przykład dowolnego menedżera plików, i przejdź do tego katalogu. Możesz także przełączyć widok projektu z Androida na Project Files i możesz znaleźć ten katalog, jak pokazano na tym zrzucie ekranu:
Wewnątrz znajduje się kolejny plik build.gradle (zaznaczony na powyższym zrzucie ekranu). Zaktualizuj ten plik czterema wartościami z kroku 6.
Ponownie zsynchronizuj projekt, a następnie wyczyść go / odbuduj. (Menu: / build / Clean_Project ) Należy oczyścić i budować bez błędów i powinieneś zobaczyć wiele odniesień do : openCVLibrary310 w 0: Wiadomości ekranu.
W tym momencie moduł powinien pojawić się w hierarchii projektu jako openCVLibrary310 , podobnie jak app . (Należy pamiętać, że w tym menu rozwijanym trochę przeszedłem z powrotem z Projektu widokiem na Androida View ). Powinieneś także zobaczyć dodatkowy plik build.gradle w sekcji „Skrypty Gradle”, ale uważam, że interfejs Android Studio jest trochę zawiły i czasami nie robi tego od razu. Spróbuj więc ponownie zsynchronizować, wyczyścić, a nawet ponownie uruchomić Android Studio.
Powinieneś zobaczyć moduł openCVLibrary310 ze wszystkimi funkcjami OpenCV w Javie, jak na tym zrzucie ekranu:
Skopiuj katalog {unzip-dir} / sdk / native / libs (i wszystko, co się w nim znajduje) do projektu na Androida, do cvtest1 / OpenCVLibrary310 / src / main / , a następnie zmień nazwę kopii z libs na jniLibs . Powinieneś teraz mieć katalog cvtest1 / OpenCVLibrary310 / src / main / jniLibs . Ponownie zsynchronizuj swój projekt, a ten katalog powinien teraz pojawić się w widoku projektu w openCVLibrary310 .
Przejdź do metody onCreate pliku MainActivity.java i dołącz ten kod:
Następnie uruchom aplikację. Powinieneś zobaczyć takie linie w monitorze Androida: (Nie wiem, dlaczego jest tam ta linia z komunikatem o błędzie)
Teraz spróbuj faktycznie użyć kodu openCV. W poniższym przykładzie skopiowałem plik .jpg do katalogu pamięci podręcznej aplikacji cvtest1 na emulatorze Androida. Poniższy kod ładuje ten obraz, uruchamia sprytny algorytm wykrywania krawędzi, a następnie zapisuje wyniki z powrotem do pliku .png w tym samym katalogu.
Umieść ten kod tuż pod kodem z poprzedniego kroku i zmień go, aby pasował do twoich własnych plików / katalogów.
Uruchom aplikację. Twój emulator powinien utworzyć czarno-biały obraz „krawędzi”. Możesz użyć Android Device Monitor, aby pobrać dane wyjściowe lub napisać działanie, aby je pokazać.
Do pułapek :
źródło
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
Co to za błąd zrobiłem krok po kroku, jak napisałeś.Dla wszystkich, którzy czuli, że chcą uciec ze wszystkimi krokami i zrzutami ekranu z (świetnie!) Powyższych odpowiedzi, działało to dla mnie z
android studio 2.2.1
:Android Studio
kliknijFile->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.W
gradle
pliku swojegoapp
modułu dodaj to do bloku zależności:Gdzie XYZ to dokładna wersja, którą pobierasz, na przykład w moim przypadku:
źródło
Android Studio 3.4 + OpenCV 4.1
Pobierz najnowszy plik zip OpenCV stąd (aktualna najnowsza wersja to 4.1.0) i rozpakuj go w swoim obszarze roboczym lub w innym folderze.
Utwórz nowy projekt Android Studio normalnie. Kliknij
File->New->Import Module
, przejdź do/path_to_unzipped_files/OpenCV-android-sdk/sdk/java
, ustaw nazwę modułu jakoopencv
, kliknijNext
i usuń zaznaczenie wszystkich opcji na ekranie.Włącz
Project
tryb przeglądania plików (tryb domyślny toAndroid
). Wopencv/build.gradle
modyfikacji plikuapply plugin: 'com.android.application'
doapply plugin: 'com.android.library'
i wymienićapplication ID "org.opencv"
z(zgodnie z wartościami w
app/build.gradle
). Synchronizuj projekt z plikami Gradle.Dodaj ten ciąg do bloku zależności w
app/build.gradle
plikuWybierz ponownie
Android
tryb przeglądania plików. Kliknij prawym przyciskiem myszyapp
moduł i gotoweNew->Folder->JNI Folder
. Wybierz zmień lokalizację folderu i ustawsrc/main/jniLibs/
.Wybierz ponownie
Project
tryb przeglądania plików i skopiuj wszystkie foldery z/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
doapp/src/main/jniLibs
.Ponownie w
Android
trybie przeglądania plików kliknij prawym przyciskiem myszyapp
moduł i wybierzLink C++ Project with Gradle
. Wybierz opcję Build Systemndk-build
i ścieżkę doOpenCV.mk
pliku/path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.path_to_unzipped_files
nie może zawierać spacji, w przeciwnym razie wystąpi błąd!Aby sprawdzić inicjalizację OpenCV dodaj wiadomość Toast w
onCreate()
metodzie MainActivity :Jeśli inicjalizacja się powiedzie, zobaczysz
true
komunikat Toast, w przeciwnym razie zobaczyszfalse
.źródło
application ID "org.opencv"
ciąg na dwa ciągi:minSdkVersion 21
itargetSdkVersion 28
(zgodnie z wartościami w pliku app / build.gradle)Każdy, kto napotkał problem podczas tworzenia cpp jniLibs, jest wyświetlany .. wystarczy dodać ndk ..
źródło
To zadziałało dla mnie i było tak proste, jak dodanie zależności od stopni:
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
Jedynym zastrzeżeniem jest to, że musiałem użyć sprzętowego urządzenia do debugowania, ponieważ emulatory ramion działały dla mnie zbyt wolno (jak mówi AVD Manager) i, jak opisano w README repozytorium, ta wersja nie obejmuje obsługi x86 lub x86_64.
Wydaje się, że buduje i sugerowany test:
wypluwa plik, który wydaje mi się właściwy.
źródło
W pliku build.gradle
Więcej informacji
źródło