Android Studio의 앱에서 OpenCV 라이브러리를 사용하고 싶습니다. 여기에 나온 지침을 따르지만 오류가 발생합니다
이름이 'default'인 구성을 찾을 수 없습니다
무엇이 잘못 될 수 있습니까?
gradle 2.2.1과 함께 Android Studio 1.0을 사용합니다.
native
내 sdk
디렉토리 아래 에서 디렉토리를 찾을 수 없습니다 .
Android Studio의 앱에서 OpenCV 라이브러리를 사용하고 싶습니다. 여기에 나온 지침을 따르지만 오류가 발생합니다
이름이 'default'인 구성을 찾을 수 없습니다
무엇이 잘못 될 수 있습니까?
gradle 2.2.1과 함께 Android Studio 1.0을 사용합니다.
native
내 sdk
디렉토리 아래 에서 디렉토리를 찾을 수 없습니다 .
답변:
Android Studio에서 Android OpenCV SDK를 사용하기위한 아래 단계 이것은 this ( 1 ) SO 답변 의 단순화 된 버전입니다 .
단계 (6)은 Android 스튜디오 app/src/main/jniLibs
가 이전 libs
폴더 대신 기본 라이브러리를 필요 로하기 때문입니다 . Android OpenCV를 처음 사용하는 사람들은 아래 단계를 놓치지 마십시오.
static{ System.loadLibrary("opencv_java"); }
(참고 :이 단계에서 OpenCV 버전 3의 경우 대신 라이브러리를로드해야합니다 opencv_java3
.)작성된 OpenCV는 C / C ++로되어 있습니다. 자바 래퍼는
javadocs
? .IT도 설치하는 나 한테 물어의 디렉토리를 android sdk 14
하는 것이 내가 표적으로하고 있지만 장치를 지원android sdk 15
sdk
와 함께 제공되는 디렉토리에 대해 이야기하는 동안 내 시스템 의 설치 디렉토리에 대해 이야기하고 있다고 생각했습니다 Android Open CV SDK
. 6 단계를 완료했습니다 static{ System.loadLibrary("opencv_java"); }
.
android-14
2 단계에서 모듈을 가져온 후 오류, 당신은 수동으로 편집해야 build.gradle
OpenCV의 디렉토리에 프로젝트의 3 단계에서와 같이
OpenCV v3.1.0을 Android Studio v1.4.1에 통합 하여 추가 세부 정보가 포함 된 지침과이 스크린 샷 유형을 제공합니다.
대부분의 크레딧은 Kiran, Kool, 1 "및 SteveLiles에게 설명을 위해 opencv.org를 통해 제공됩니다. Android Studio의 인터페이스가 이제 이러한 유형의 통합 항목에 대해 작업하기에 충분히 안정적이라고 믿기 때문에이 답변을 추가하고 있습니다 또한 나는 우리 프로젝트를 위해 어쨌든이 지시 사항을 작성해야합니다.
경험이 풍부한 AS 개발자는이 pedantic 중 일부를 찾을 수 있습니다. 이 답변은 Android Studio에서 경험이 부족한 사람들을 대상으로합니다.
프로젝트 마법사 (메뉴 : / 파일 / 새 프로젝트)를 사용하여 새 Android Studio 프로젝트를 만듭니다.
이름이 MainActivity 인 빈 활동
이 프로젝트가 저장된 cvtest1 디렉토리 가 있어야합니다 . (Android 스튜디오의 제목 표시 줄은 프로젝트를 열 때 cvtest1의 위치를 보여줍니다)
앱이 올바르게 실행되는지 확인하십시오. "Hello World"텍스트와 같은 것을 변경하여 빌드 / 테스트주기가 올바른지 확인하십시오. (API 19 장치의 에뮬레이터로 테스트하고 있습니다).
Android v3.1.0 용 OpenCV 패키지를 다운로드하여 임시 디렉토리에 압축을 푸십시오. (확인은 Java 패키지에 딱 OpenCV의 특별히 안드로이드를위한 패키지입니다하지.) 나는이 디렉토리는 "전화 할게 압축 해제 - 디렉토리 아래" 압축 해제-DIR 당신이해야 SDK / 기본 / libs가 시작 하위 디렉토리와 디렉토리를 같은 것들을 팔 ..., MIPS ... 그리고 86 (의 "구조"안드로이드 실행의 종류마다 1 개의)
Android Studio에서 OpenCV를 프로젝트로 모듈로 가져옵니다. Menu : / File / New / Import_Module :
다음을 클릭하십시오 . jar, 라이브러리 및 가져 오기 옵션에 대한 세 개의 확인란과 질문이있는 화면이 나타납니다. 세 가지를 모두 확인해야합니다. Finish를 클릭하십시오 .
Android Studio가 모듈 가져 오기를 시작하면 가져 오지 않은 항목 (대부분 javadoc 파일) 및 기타 정보 목록이있는 import-summary.txt 파일 이 표시 됩니다.
그러나 해시 문자열 'android-14'...로 대상을 찾을 수 없다는 오류 메시지가 표시 됩니다. 다운로드 한 OpenCV zip 파일의 build.gradle 파일이 Android API 버전 14 (기본적으로 Android Studio v1.4.1에는 없음)를 사용하여 컴파일하라고 말했기 때문에 발생합니다.
프로젝트 구조 대화 상자를여십시오 ( Menu : / File / Project_Structure ). "앱"모듈을 선택하고 종속성 탭을 클릭 한 후 : openCVLibrary310 을 모듈 종속성으로 추가 하십시오 . Add / Module_Dependency 를 선택하면 추가 할 수있는 모듈 목록에 나타납니다. 이제 종속 항목으로 표시되지만 이벤트 로그에 몇 가지 더 많은 find-find-android-14 오류가 발생합니다.
앱 모듈 의 build.gradle 파일을 확인하십시오. Android 프로젝트에는 여러 build.gradle 파일이 있습니다. 원하는 것은 cvtest1 / app 디렉토리에 있으며 프로젝트 뷰에서는 build.gradle (Module : app)과 같습니다 . 이 네 가지 필드의 값에 유의하십시오.
프로젝트에 cvtest1 / OpenCVLibrary310 디렉토리가 있지만 프로젝트보기에서 볼 수 없습니다.
파일 관리자와 같은 다른 도구를 사용하여이 디렉토리로 이동하십시오. 프로젝트 뷰를 Android 에서 Project Files 로 전환 할 수 있으며이 스크린 샷과 같이이 디렉토리를 찾을 수 있습니다.
내부에는 또 다른 build.gradle 파일이 있습니다 (위 스크린 샷에서 강조 표시됨). 6 단계의 4 가지 값으로이 파일을 업데이트하십시오.
프로젝트를 다시 동기화 한 다음 정리 / 재 구축하십시오. (메뉴 : / Build / Clean_Project ) 오류없이 정리하고 빌드해야 하며 0 : 메시지 화면 에 : openCVLibrary310 에 대한 많은 참조가 표시됩니다.
이 시점에서 모듈은 app 과 마찬가지로 프로젝트 계층 구조에서 openCVLibrary310 으로 나타나야 합니다 . (작은 드롭 다운 메뉴에서 Project View 에서 Android View 로 다시 전환했습니다 .) 또한 추가 build.gradle이 표시됩니다"Gradle Scripts"아래에 파일 되지만 Android Studio 인터페이스가 약간 결함이 있고 때로는이 작업을 수행하지 않는 경우가 있습니다. 따라서 Android Studio를 다시 동기화, 정리 및 다시 시작하십시오.
이 스크린 샷과 같이 java에서 모든 OpenCV 기능이있는 openCVLibrary310 모듈이 표시되어야합니다.
복사 {압축 해제-DIR} / SDK / 기본 / libs가 에, 당신의 안드로이드 프로젝트에 (그 아래에 모든 것을) 디렉토리를 cvtest1 / OpenCVLibrary310 / SRC / 메인 / 다음에서 복사본의 이름을 변경 libs가 에 jniLibs . 이제 cvtest1 / OpenCVLibrary310 / src / main / jniLibs 디렉토리가 있어야 합니다. 프로젝트를 다시 동기화하면이 디렉토리가 프로젝트보기의 openCVLibrary310 아래에 나타납니다 .
MainActivity.java 의 onCreate 메소드로 이동하여 다음 코드를 추가하십시오.
if (!OpenCVLoader.initDebug()) {
Log.e(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), not working.");
} else {
Log.d(this.getClass().getSimpleName(), " OpenCVLoader.initDebug(), working.");
}
그런 다음 응용 프로그램을 실행하십시오. Android 모니터에 다음과 같은 줄이 표시되어야 합니다 (오류 메시지가있는 줄이 왜 있는지 모르겠습니다)
이제 실제로 openCV 코드를 사용하십시오. 아래 예에서 .jpg 파일을 android 에뮬레이터의 cvtest1 응용 프로그램의 캐시 디렉토리에 복사했습니다. 아래 코드는이 이미지를로드하고 캐니 가장자리 감지 알고리즘을 실행 한 다음 결과를 동일한 디렉토리의 .png 파일에 다시 씁니다.
이 코드를 이전 단계의 코드 바로 아래에 놓고 자신의 파일 / 디렉토리와 일치하도록 변경하십시오.
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);
응용 프로그램을 실행하십시오. 에뮬레이터는 흑백 "가장자리"이미지를 만들어야합니다. Android 디바이스 모니터를 사용하여 출력을 검색하거나 표시 할 활동을 작성할 수 있습니다.
둘점 :
OpenCV error: Cannot load info library for OpenCV
2 java.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
작성한 오류가 단계적으로 수행되었습니다.
위의 (위대한!) 답변에 대한 모든 단계와 스크린 샷으로 도망 가고 싶다고 생각하는 모든 사람들에게 이것은 다음과 같이 작동했습니다 android studio 2.2.1
.
Android Studio
클릭 File->New-> Import Module
하고 이동하여 확인을 \path_to_your_unzipped_file\OpenCV-android-sdk\sdk\java
누른 다음 모든 기본 대화 상자를 그대로 사용하십시오.에서 gradle
당신의 파일 app
모듈, 종속성 블록이 추가 :
dependencies {
compile project(':openCVLibraryXYZ')
//rest of code
}
XYZ는 다운로드 한 정확한 버전입니다 (예 : 제 경우).
dependencies {
compile project(':openCVLibrary320')
//rest of code
}
Android Studio 3.4 + OpenCV 4.1
여기 에서 최신 OpenCV zip 파일을 다운로드하고 (현재 최신 버전은 4.1.0 임) 작업 공간이나 다른 폴더에서 압축을 푸십시오.
정상적으로 새 Android Studio 프로젝트를 작성하십시오. 을 클릭 File->New->Import Module
하고으로 이동하여 /path_to_unzipped_files/OpenCV-android-sdk/sdk/java
모듈 이름을으로 설정 하고 화면에서 모든 옵션을 opencv
클릭 Next
및 선택 취소 하십시오 .
Project
파일보기 모드를 활성화 합니다 (기본 모드는 Android
). 에서 opencv/build.gradle
파일 변경 apply plugin: 'com.android.application'
에 apply plugin: 'com.android.library'
및 교체 application ID "org.opencv"
와 함께
minSdkVersion 21
targetSdkVersion 28
(의 값에 따라 app/build.gradle
). Gradle 파일과 프로젝트를 동기화하십시오.
이 문자열을 app/build.gradle
파일 의 dependencies 블록에 추가 하십시오
dependencies {
...
implementation project(path: ':opencv')
...
}
Android
파일보기 모드를 다시 선택하십시오 . app
모듈을 마우스 오른쪽 버튼으로 클릭하고로 이동하십시오 New->Folder->JNI Folder
. 폴더 위치 변경을 선택하고를 설정하십시오 src/main/jniLibs/
.
Project
파일보기 모드를 다시 선택 하고에서 모든 폴더를에서 (으) /path_to_unzipped_files/OpenCV-android-sdk/sdk/native/libs
로 복사하십시오 app/src/main/jniLibs
.
다시 Android
파일보기 모드에서 app
모듈을 마우스 오른쪽 버튼으로 클릭 하고을 선택하십시오 Link C++ Project with Gradle
. 시스템 빌드 ndk-build
및 OpenCV.mk
파일 경로를 선택하십시오 /path_to_unzipped_files/OpenCV-android-sdk/sdk/native/jni/OpenCV.mk
.
path_to_unzipped_files
공백이 없어야합니다. 그렇지 않으면 오류가 발생합니다!
OpenCV 초기화를 확인하려면 MainActivity onCreate()
메소드 에서 토스트 메시지를 추가하십시오 .
Toast.makeText(MainActivity.this, String.valueOf(OpenCVLoader.initDebug()), Toast.LENGTH_LONG).show();
초기화에 성공하면 true
토스트 메시지에 표시되고 그렇지 않으면 표시 false
됩니다.
application ID "org.opencv"
문자열을 두 개의 문자열로 바꿔야 합니다 : minSdkVersion 21
and targetSdkVersion 28
(app / build.gradle 파일의 값에 따라)
이것은 나를 위해 일했고 gradle 의존성을 추가하는 것만 큼 쉽습니다.
https://bintray.com/seesaa/maven/opencv#
https://github.com/seesaa/opencv-android
암 에뮬레이터가 나에게 너무 느리게 (AVD Manager가 말했듯이) 하드웨어 디버깅 장치를 사용해야한다는 한 가지주의 사항은 repo README에 설명 된 것처럼이 버전에는 x86 또는 x86_64 지원이 포함되어 있지 않습니다.
빌드되고 제안 된 테스트 인 것 같습니다.
static {
OpenCVLoader.initDebug();
}
나에게 맞는 출력물을 뱉어냅니다.