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'
}

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

...
  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 (и другими) .Итак, файлы.

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

7 ответов


1.ПРЕДУПРЕЖДАЮЩИЙ: этого недостаточно!:

  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 dir. EDIT: если у вас есть некоторые проблемы, попробуйте переместить jniLibs в app/src/main).
c) добавить обязательно .Итак, файлы, извлеченные из opencv-android-arm.jar и ffmpeg-android-arm.jar (или только эти файлы, которые вам действительно нужны) для создания jnilibs dir. (Если вы не знаете, о чем Я говорю, что вы можете скачать javacv-0.9-bin.zip from страница JavaCV и внутри него вы можете найти эти 2 .файлы jar.)


вставить внутрь 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’

для современного решения (JavaCV 1.1 и Android Studio 2.1.1), пожалуйста, смотрите мои пошаговые инструкции в моем суть. JavaCV 1.2 В настоящее время не нравится Android 6.

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

  1. получить двоичные файлы prebulit здесь.
  2. распакуйте его и скопируйте эти файлы:
    • javacpp.Джар (важно).
    • javacv.Джар (важно).
    • через FFmpeg.Джар (важно, если вы используете FFmpeg).
    • ffmpeg-android-arm.Джар (для процессора arm).
    • ffmpeg-android-x86.Джар (необязательно для процессора x86). в libs папка вашего проекта (app/libs в моем случай.)
  3. нажать на кнопку app ->F4 ->Dependencies ->+ ->File dependencies - > выберите все предыдущие .Джар.
  4. временно, из-за этот вопрос, нам нужно установить targetSdkVersion 22 приложения build.gradle.
  5. возможно, нужно установить эти 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'
}

}


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

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

также моя сборка.файл 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'
        }
    }
}

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

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")

правка. Решение в этом посте устарело и может содержать некоторые ошибки. Смотрите последние, правильный пост внизу страницы.

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

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

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

(Я имею в виду: построить.Gradle в в нашем каталоге модуль)

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

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

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

мы должны извлечь все *.Итак, файлы, которые нам нужны, но тогда мы должны присоединиться к ним в нашем проекте в других особым образом: 3-й ответ здесь говорит об этом!--20--> но в целом, мы должны:

  1. создать новый каталог "armeabi"
  2. поставить интересно .Итак, файлы в каталог "armeabi"
  3. создать armeabi.zip
  4. изменить расширение armeabi.zip в armeabi.Джар
  5. поставить норм.jar to' libs ' directory
  6. убедитесь, что построить.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 и попробовать это, что ваш проект работает ну.)

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


Если вы попробуете с javacv 1.2, мы должны сделать некоторые дополнительные шаги, чтобы заставить это работать. Вот мое телосложение.файл 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'

}