Статус сборки для всех платформ (Android, iOS, Linux, Mac OS X, Windows):
Коммерческая поддержка и платные услуги для пользовательских пресетов:
Модули предустановок JavaCPP содержат классы конфигурации Java и интерфейса для широко используемых библиотек C/C++. Файлы конфигурации в пакетах org.bytedeco.<moduleName>.presets
используются Parser
для создания из файлов заголовков C/C++ файлов интерфейса Java, предназначенных для пакетов org.bytedeco.<moduleName>
, которые, в свою очередь, используются Generator
и собственный компилятор C++ для создания необходимых библиотек JNI. Более того, вспомогательные классы упрощают использование их функций на платформе Java, включая Android.
Для ознакомления документацию этого репозитория можно разделить на два уровня:
javacpp-presets
, и Этот родительский файл README.md содержит общую информацию, применимую ко всем модулям для решения проблем, касающихся загрузки, общих требований, процедур установки и инструкций по сборке. Соответствующие файлы README.md в каждом подкаталоге содержат дополнительную информацию, ссылки и примечания, касающиеся документации API, конкретных требований, зависимостей для файлов pom.xml
и примера кода использования для предустановок и пакетов каждого модуля. Имейте в виду, что не все пресеты имеют одинаковый уровень зрелости, а стиль и макет также могут отличаться друг от друга, поскольку они основаны на API сторонних библиотек.
Пожалуйста, обратитесь к вики-странице для получения дополнительной информации о том, как создавать новые пресеты. Поскольку дополнительная документация в настоящее время отсутствует, пожалуйста, не стесняйтесь задавать вопросы в списке рассылки или на дискуссионном форуме.
Файлы JAR, содержащие двоичные файлы для всех дочерних модулей и сборки для всех поддерживаемых платформ (Android, iOS, Linux, Mac OS X и Windows), можно получить из центрального репозитория Maven. Архивы, содержащие эти файлы JAR, также доступны в виде выпусков.
Чтобы установить файлы JAR вручную, следуйте инструкциям в разделе «Установка вручную» ниже.
Мы также можем загрузить и установить все автоматически с помощью:
pom.xml
) < dependency >
< groupId >org.bytedeco</ groupId >
< artifactId >${moduleName}-platform</ artifactId >
< version >${moduleVersion}-1.5.11</ version >
</ dependency >
build.gradle.kts
или build.gradle
) dependencies {
implementation( " org.bytedeco: $m oduleName -platform: $m oduleVersion -1.5.11 " )
}
project.clj
) :dependencies [
[~( symbol ( str " org.bytedeco/ " moduleName " -platform " )) ~( str moduleVersion " -1.5.11 " )]
]
build.sbt
) libraryDependencies += " org.bytedeco " % moduleName + " -platform " % moduleVersion + " -1.5.11 "
где переменные moduleName
и moduleVersion
соответствуют нужному модулю. При этом загружаются двоичные файлы для всех платформ, но чтобы получить двоичные файлы только для одной платформы, мы можем установить для системного свойства javacpp.platform
(с помощью параметра командной строки -D
) что-то вроде android-arm
, linux-x86_64
, macosx-x86_64
, windows-x86_64
и т. д. Мы также можем указать более одной платформы, см. примеры в разделе «Уменьшение количества зависимостей». Другой вариант, доступный пользователям Gradle, — Gradle JavaCPP, а для пользователей Scala — SBT-JavaCPP.
Чтобы использовать предустановки JavaCPP, вам необходимо загрузить и установить следующее программное обеспечение:
Кроме того, в случае Android пресеты JavaCPP также зависят от:
Просто поместите все нужные файлы JAR ( opencv*.jar
, ffmpeg*.jar
и т. д.) в дополнение к javacpp.jar
где-нибудь в пути к классам. Файлы JAR, доступные в виде готовых артефактов, предназначены для использования с JavaCPP. Двоичные файлы для Linux созданы с помощью Ubuntu, поэтому они должны работать с большинством используемых в настоящее время дистрибутивов. Вот несколько более конкретных инструкций для распространенных случаев:
NetBeans (Java SE 7 или новее):
Eclipse (Java SE 7 или новее):
Код Visual Studio (Java SE 7 или новее):
+
.IntelliJ IDEA (Android 7.0 или новее):
app/libs
.+
» и выберите «2 Зависимость файла».libs
. После этого мы можем почти прозрачно получить доступ к соответствующим API C/C++ через классы интерфейса, находящиеся в пакетах org.bytedeco.<moduleName>
. Действительно, Parser
транслирует комментарии к коду из файлов заголовков C/C++ в файлы интерфейса Java, (почти) готовые к использованию Javadoc. Однако, поскольку их перевод все еще оставляет желать лучшего, можно обратиться к оригинальным страницам документации. Например, те, что для OpenCV и FFmpeg, можно найти в Интернете по адресу:
Если доступных выше двоичных файлов недостаточно для ваших нужд, возможно, вам придется пересобрать их из исходного кода. Для этого файлы проекта на стороне Java были созданы как модули Maven. По умолчанию сборка Maven также устанавливает собственные библиотеки на стороне C/C++ с помощью сценариев cppbuild.sh
, но их также можно установить другими способами.
Кроме того, на вики-странице можно найти дополнительную информацию о рекомендуемых средах сборки для основных платформ.
Пресеты JavaCPP зависят от Maven, мощной системы сборки для Java, поэтому перед попыткой сборки обязательно установите и прочитайте:
Каждый дочерний модуль, в свою очередь, по умолчанию использует включенные сценарии cppbuild.sh
, описанные ниже, для установки соответствующих собственных библиотек в подкаталог cppbuild
. Чтобы использовать собственные библиотеки, уже установленные где-то еще в системе, можно также указать другие каталоги установки, кроме cppbuild
либо в файлах pom.xml
, либо в файлах конфигурации .java
. Поддерживаются следующие версии:
После того, как все установлено и настроено, просто выполните
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
внутри каталога, содержащего родительский файл pom.xml
, указав в команде только нужные дочерние модули, но без начальной точки "." в списке проектов, разделенных запятыми, сам родительский файл pom.xml
может не быть установлен. (Параметр -Djavacpp.platform.root=...
необходим только для сборок Android.) Также укажите параметр -Djavacpp.cppbuild.skip
, чтобы пропустить выполнение сценариев cppbuild.sh
. В дополнение к -Djavacpp.platform=...
некоторые предустановки также могут быть созданы с использованием CUDA с помощью -Djavacpp.platform.extension=-gpu
или CPython с -Djavacpp.platform.extension=-python
. Для получения более подробной информации обратитесь к комментариям внутри файла pom.xml
. Из подкаталога «платформа» мы также можем установить артефакты «платформы» с помощью аналогичной команды:
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
Запуск сценариев позволяет нам легко устанавливать собственные библиотеки на несколько платформ, но требуется дополнительное программное обеспечение:
Если вышеизложенное работает, сценарии запускаются автоматически как часть жизненного цикла сборки Maven, но мы также можем выполнить их вручную.
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
где возможные названия платформ:
android-arm
android-arm64
android-x86
android-x86_64
ios-arm64
ios-x86_64
linux-armhf
linux-arm64
linux-ppc64le
linux-x86
linux-x86_64
macosx-arm64
macosx-x86_64
windows-x86
windows-x86_64
Расширение -gpu
, поддерживаемое некоторыми сборками, также требует установки CUDA. (Переменная ANDROID_NDK
необходима только для сборок Android.) Обратите внимание, что скрипты загружают исходные архивы с соответствующих сайтов по мере необходимости.
Чтобы скомпилировать двоичные файлы для устройства Android без FPU, сначала убедитесь, что это то, что вам нужно. Без FPU производительность OpenCV или FFmpeg будет неприемлемой. Если вы все еще хотите продолжить этот путь, замените «armeabi-v7a» на «armeabi» и «-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16» на «-march=armv5te -mtune». =xscale -msoft-float", внутри различных файлов.
Хотя JavaCPP может использовать встроенные библиотеки, установленные в системе, существуют сценарии, упрощающие процесс сборки на нескольких платформах. Они также позволяют JavaCPP копировать собственные библиотеки и загружать их во время выполнения из файлов JAR, созданных выше с помощью Maven, что является полезной функцией для автономных приложений или Java-апплетов. Более того, с JNLP работают такие трюки, как следующие:
< resources os = " Linux " arch = " x86 i386 i486 i586 i686 " >
< jar href = " lib/opencv-linux-x86.jar " />
< jar href = " lib/ffmpeg-linux-x86.jar " />
</ resources >
< resources os = " Linux " arch = " x86_64 amd64 " >
< jar href = " lib/opencv-linux-x86_64.jar " />
< jar href = " lib/ffmpeg-linux-x86_64.jar " />
</ resources >
Спасибо Хосе Гомесу за тестирование!
Вклад любого рода приветствуется! На данный момент возможности Parser
ограничены, поэтому я планирую постепенно улучшать его до такой степени, что он сможет успешно анализировать большие заголовочные файлы C++, которые даже более запутаны, чем файлы OpenCV, Caffe или TensorFlow, но система сборки может также быть улучшено. Следовательно, мне нужна помощь, прежде всего, с пятью следующими задачами (в произвольном порядке):
Parser
(с использованием пресетов для LLVM и Clang?)linux-armhf
для Raspberry Pi и т. д.Чтобы внести свой вклад, сделайте форк и создайте запросы на включение или опубликуйте свои предложения как новую «проблему». Заранее большое спасибо за ваш вклад!
Руководитель проекта: Сэмюэл Одет samuel.audet at
gmail.com
Сайт разработчика: https://github.com/bytedeco/javacpp-presets.
Группа обсуждения: http://groups.google.com/group/javacpp-project.