JavaCV + Android Studio + gradle - возможно?

Я пытаюсь использовать JavaCV с Android Studio и Gradle. Я написал такой фрагмент кода:

   repositories {
    mavenCentral()
    maven {
        url "http://maven2.javacv.googlecode.com/git/"
    }
}

dependencies {
    compile files('libs/android-support-v4.jar')
    compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.5'
    compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.5'
}

и я вижу импортированные библиотеки в внешних библиотеках. Поэтому я попытался запустить это:

...
  IplImage zdjecie=cvLoadImage(Environment.getExternalStorageDirectory().getPath()+ "/1.bmp");
    cvSaveImage(Environment.getExternalStorageDirectory().getPath()
    + "/2.bmp", zdjecie);
...

и я получил ошибку:

Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniopencv_core: findLibrary returned null

... потому что я не знаю, что мне делать с opencv (и другими).so файлами.

Итак, как мы должны использовать JavaCV в Android Studio?

Ответы

Ответ 1

1.WARNING: Это не достаточно!:

  dependencies { compile group: 'org.bytedeco', name: 'javacv', version: '0.9'}

2.EDIT: Извините за ошибку, мое недавнее решение, которое  Я разместил здесь и сказал, что только о строке выше было неправильно. Но я проверил это, и это работает для меня:

a) Добавить зависимости

dependencies {
    compile group: 'org.bytedeco', name: 'javacv', version: '0.9'
    compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '2.4.9-0.9', classifier:    'android-arm'
    compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '2.3-0.9', classifier: 'android-arm'    
}

b) Создайте jniLibs dir внутри вашего проекта (на том же уровне, что и обычный каталог libs. EDIT: If у вас есть некоторые проблемы, попробуйте переместить jniLibs в app/src/main).
c) Добавьте необходимые .so файлы, извлеченные из opencv-android-arm.jar и ffmpeg-android-arm.jar(или только файлы, которые вам действительно нужны), в созданную директорию jniLibs. (Если вы не знаете, что Я говорю, вы можете скачать javacv-0.9-bin.zip из страницы JavaCV и внутри нее вы можете найти эти 2.jars).

Ответ 2

Вставка внутри зависимостей build.gradle работала для меня:

compile ‘org.bytedeco:javacv:+’
compile group: ‘org.bytedeco.javacpp-presets’, name: ‘opencv’, version:   ‘2.4.10–0.10', classifier: ‘android-arm’ 
compile group: ‘org.bytedeco.javacpp-presets’, name: ‘ffmpeg’, version:   ‘2.5.1–0.10', classifier: ‘android-arm’

Ответ 3

Для современного решения (JavaCV 1.1 и Android Studio 2.1.1) см. мои пошаговые инструкции в Gist. JavaCV 1.2 в настоящее время не любит Android 6.

Этот tut будет использовать JavaCV 1.1, в версии 1.2 в настоящее время проблема SIGSEGV. JavaCV 1.1 поставляется с FFmpeg 2.8.1.

  • Получите предварительные двоичные файлы здесь.
  • Извлеките и скопируйте эти файлы:
    • javacpp.jar(существенный).
    • javacv.jar(существенный).
    • ffmpeg.jar(важно, если вы используете FFmpeg).
    • ffmpeg-android-arm.jar(для центрального процессора).
    • ffmpeg-android-x86.jar(необязательно для процессора x86). в папку libs вашего проекта (app/libs в моем случае).
  • Нажмите appF4Dependencies+File dependencies → выбрать все предыдущие .jar.
  • Временно, из-за этой проблемы, нам нужно установить targetSdkVersion 22 приложение build.gradle.
  • Возможно, нужно установить эти packagingOptions в build.gradle:

android {   compileSdkVersion 23   buildToolsVersion "23.0.3"

defaultConfig {
    applicationId "com.example.test"
    minSdkVersion 16
    targetSdkVersion 22
    versionCode 1
    versionName "1.0"
}

packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
    exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'

    //might need these if you use openCV
    //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
    //exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
}

}

Ответ 4

К сожалению, у меня возникли проблемы с решением пользователя2645214 (все еще получаю java.lang.UnsatisfiedLinkError), но я нашел еще один, поэтому решил поделиться им с теми, у кого была бы такая же проблема.

Начиная с версии 0.7.3 есть еще один способ включить ваши *.so файлы - вы можете просто поместить их в /src/main/jniLibs (просто создайте каталог jniLibs, если у вас его нет), и он должен работать.

Также мой файл build.gradle выглядит так:

apply plugin: 'android'

repositories {
    mavenCentral()
    maven { url 'http://maven2.javacv.googlecode.com/git/' }
}

dependencies {
    compile 'com.android.support:appcompat-v7:20.+'
    compile 'com.googlecode.javacpp:javacpp:0.7'
    compile 'com.googlecode.javacv:javacv:0.7'
}

android {
    compileSdkVersion 20
    buildToolsVersion '20.0.0'

    defaultConfig {
        applicationId "com.example.agp.testapplication2"
        minSdkVersion 15
        targetSdkVersion 20
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

Ответ 5

Я столкнулся с этой проблемой в Windows 7 x64. Вот раздел из моего файла gradle.build, который разрешил проблему:

compile("org.bytedeco:javacv:0.11")
compile("org.bytedeco.javacpp-presets:opencv:2.4.11-0.11:windows-x86_64")
compile("org.bytedeco.javacpp-presets:ffmpeg:2.6.1-0.11:windows-x86_64")

Ответ 6

ИЗМЕНИТЬ. Решение в этом сообщении устарело и может содержать некоторые ошибки. Пожалуйста, см. Недавнее, правильное сообщение в нижней части страницы.

Хорошо, я сделал это сам:). Итак, вот , что мы должны сделать, чтобы использовать JavaCV в Android Studio:

1). Сначала мы должны добавить такие зависимости для build.gradle внутри проекта:

dependencies {
    compile group: 'com.googlecode.javacpp', name: 'javacpp', version: '0.7'
    compile group: 'com.googlecode.javacv', name: 'javacv', version: '0.7'}

(я имею в виду: build.gradle внутри нашего каталога модулей)

Спасибо, что мы получаем javacv.jar и javacpp.jar внутри внешних библиотек (если нет, мы должен перезапустить Android Studio).

2) Если мы следуем инструкциям Eclipse на официальный сайт javacv мы сейчас находимся в пункте 4.:

Извлеките все файлы *.so rom javacv-android-arm.jar, opencv-2.4.8-android-arm.jar и ffmpeg-2.1.1-android-arm.jar непосредственно во вновь создаваемую папку "libs/armeabi", без создавая любой из подкаталогов, найденных в файлах JAR.

Мы должны извлечь все *.so файлы, которые нам нужны, но затем мы должны присоединиться к ним в нашем проекте другим специальным способом: Третий ответ здесь говорит об этом, но в целом мы должны:

  • Создайте новый каталог 'armeabi'
  • Поместите интересные .so файлы в каталог 'armeabi'
  • Создать armeabi.zip
  • Изменить расширение armeabi.zip на armeabi.jar
  • Поместите armeabi.jar в каталог 'libs'
  • Убедитесь, что build.gradle нашего модуля содержит такую ​​зависимость:
    compile fileTree (dir: 'libs', include: ['*.jar'])

3) Наслаждайтесь OpenCV и JavaCv в Android Studio (и не забудьте добавить

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

на ваш AndroidManifest.xml, если вы хотите прочитать/сохранить изображение с/на SDCard и попробуйте это, что ваш проект работает хорошо).

/////////////////////////////////////////////////////////
Если что-то не так, напишите об этом в комментариях.

Ответ 7

Если вы попробуете с javacv 1.2, мы должны сделать некоторые дополнительные шаги, чтобы приступить к работе. Вот мой файл build.gradle

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.2"

    defaultConfig {
        applicationId "org.audiorecording"
        minSdkVersion 15
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    packagingOptions {
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.properties'
        exclude 'META-INF/maven/org.bytedeco.javacpp-presets/ffmpeg/pom.xml'

        //might need these if you use openCV
        exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.properties'
        exclude 'META-INF/maven/org.bytedeco.javacpp-presets/opencv/pom.xml'
    }
}

repositories {
    mavenCentral()
}

configurations {
    all*.exclude group: 'org.bytedeco', module: 'javacpp-presets'
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.1'
    compile 'com.android.support:design:24.2.1'
    compile 'org.bytedeco:javacv:1.2'
    compile group: 'org.bytedeco.javacpp-presets', name: 'opencv', version: '3.1.0-1.2', classifier: 'android-arm'
    compile group: 'org.bytedeco.javacpp-presets', name: 'ffmpeg', version: '3.0.2-1.2', classifier: 'android-arm'

}