Build-Status für alle Plattformen (Android, iOS, Linux, Mac OS X, Windows):
Kommerzieller Support und kostenpflichtige Dienste für benutzerdefinierte Voreinstellungen:
Die JavaCPP Presets-Module enthalten Java-Konfigurations- und Schnittstellenklassen für weit verbreitete C/C++-Bibliotheken. Die Konfigurationsdateien in den org.bytedeco.<moduleName>.presets
Paketen werden vom Parser
verwendet, um aus C/C++-Headerdateien die Java-Schnittstellendateien zu erstellen, die auf die org.bytedeco.<moduleName>
-Pakete abzielen, die wiederum von verwendet werden Generator
und den nativen C++-Compiler zum Erstellen der erforderlichen JNI-Bibliotheken. Darüber hinaus erleichtern Hilfsklassen die Nutzung ihrer Funktionalität auf der Java-Plattform, einschließlich Android.
Zur Orientierung kann man sich die Dokumentation dieses Repositoriums in zwei Ebenen aufteilen:
javacpp-presets
selbst und Diese übergeordnete README.md-Datei enthält allgemeine Informationen, die für alle Module gelten, um Probleme im Zusammenhang mit Downloads, allgemeinen Anforderungen, Installationsverfahren und Build-Anweisungen zu lösen. Die jeweiligen README.md-Dateien in jedem Unterverzeichnis enthalten zusätzliche Informationen, Links und Hinweise zur API-Dokumentation, spezifischen Anforderungen, Abhängigkeiten für pom.xml
-Dateien und Beispielverwendungscode für die Voreinstellungen und Pakete jedes Moduls. Bitte beachten Sie, dass nicht alle Voreinstellungen den gleichen Reifegrad haben und dass sich auch Stil und Layout voneinander unterscheiden können, da sie auf den APIs von Bibliotheken Dritter basieren.
Weitere Informationen zum Erstellen neuer Voreinstellungen finden Sie auf der Wiki-Seite. Da es derzeit an weiteren Unterlagen mangelt, können Sie Ihre Fragen auch gerne über die Mailingliste oder das Diskussionsforum stellen.
JAR-Dateien mit Binärdateien für alle untergeordneten Module und Builds für alle unterstützten Plattformen (Android, iOS, Linux, Mac OS X und Windows) können vom Maven Central Repository bezogen werden. Archive, die diese JAR-Dateien enthalten, sind auch als Releases verfügbar.
Um die JAR-Dateien manuell zu installieren, befolgen Sie die Anweisungen im Abschnitt „Manuelle Installation“ unten.
Wir können auch alles automatisch herunterladen und installieren lassen mit:
pom.xml
Datei) < dependency >
< groupId >org.bytedeco</ groupId >
< artifactId >${moduleName}-platform</ artifactId >
< version >${moduleVersion}-1.5.11</ version >
</ dependency >
build.gradle.kts
oder build.gradle
) dependencies {
implementation( " org.bytedeco: $m oduleName -platform: $m oduleVersion -1.5.11 " )
}
project.clj
Datei) :dependencies [
[~( symbol ( str " org.bytedeco/ " moduleName " -platform " )) ~( str moduleVersion " -1.5.11 " )]
]
build.sbt
) libraryDependencies += " org.bytedeco " % moduleName + " -platform " % moduleVersion + " -1.5.11 "
Dabei entsprechen die Variablen moduleName
und moduleVersion
dem gewünschten Modul. Dies lädt Binärdateien für alle Plattformen herunter, aber um Binärdateien nur für eine Plattform zu erhalten, können wir die Systemeigenschaft javacpp.platform
(über die Befehlszeilenoption -D
) auf etwas wie android-arm
, linux-x86_64
, macosx-x86_64
, windows-x86_64
festlegen. windows-x86_64
usw. Wir können auch mehr als eine Plattform angeben, siehe Beispiele unter Reduzieren der Anzahl von Abhängigkeiten. Eine weitere für Gradle-Benutzer verfügbare Option ist Gradle JavaCPP, und für Scala-Benutzer gibt es ebenfalls SBT-JavaCPP.
Um die JavaCPP-Voreinstellungen verwenden zu können, müssen Sie die folgende Software herunterladen und installieren:
Darüber hinaus basieren die JavaCPP-Voreinstellungen im Fall von Android auch auf:
Legen Sie einfach alle gewünschten JAR-Dateien ( opencv*.jar
, ffmpeg*.jar
usw.) zusätzlich zu javacpp.jar
irgendwo in Ihrem Klassenpfad ab. Die als vorgefertigte Artefakte verfügbaren JAR-Dateien sind für die Verwendung mit JavaCPP gedacht. Die Binärdateien für Linux werden mit Ubuntu erstellt und sollten daher auf den meisten derzeit verwendeten Distributionen funktionieren. Hier sind einige spezifischere Anweisungen für häufige Fälle:
NetBeans (Java SE 7 oder neuer):
Eclipse (Java SE 7 oder neuer):
Visual Studio Code (Java SE 7 oder neuer):
+
.IntelliJ IDEA (Android 7.0 oder neuer):
app/libs
.+
und wählen Sie „2 Dateiabhängigkeiten“.libs
aus. Danach können wir über die Schnittstellenklassen in den Paketen org.bytedeco.<moduleName>
nahezu transparent auf die entsprechenden C/C++-APIs zugreifen. Tatsächlich übersetzt der Parser
die Codekommentare aus den C/C++-Headerdateien in die Java-Schnittstellendateien, die (fast) bereit sind, von Javadoc verwendet zu werden. Da die Übersetzung jedoch noch zu wünschen übrig lässt, empfiehlt es sich, auf die Originaldokumentationsseiten zurückzugreifen. Die für OpenCV und FFmpeg finden Sie beispielsweise online unter:
Wenn die oben verfügbaren Binärdateien für Ihre Anforderungen nicht ausreichen, müssen Sie sie möglicherweise aus dem Quellcode neu erstellen. Hierzu wurden Projektdateien auf der Java-Seite als Maven-Module erstellt. Standardmäßig installiert der Maven-Build auch die nativen Bibliotheken auf der nativen C/C++-Seite mit den cppbuild.sh
-Skripten, sie können aber auch auf andere Weise installiert werden.
Darüber hinaus finden Sie auf der Wiki-Seite zusätzliche Informationen zu den empfohlenen Build-Umgebungen für die wichtigsten Plattformen.
Die JavaCPP-Voreinstellungen hängen von Maven ab, einem leistungsstarken Build-System für Java. Bevor Sie also einen Build versuchen, sollten Sie Folgendes installieren und sich darüber informieren:
Jedes untergeordnete Modul wiederum verlässt sich standardmäßig auf die unten erläuterten enthaltenen cppbuild.sh
Skripte, um seine entsprechenden nativen Bibliotheken im cppbuild
Unterverzeichnis zu installieren. Um native Bibliotheken zu verwenden, die bereits irgendwo anders auf dem System installiert sind, können auch andere Installationsverzeichnisse als cppbuild
entweder in den pom.xml
-Dateien oder in den .java
Konfigurationsdateien angegeben werden. Folgende Versionen werden unterstützt:
Sobald alles installiert und konfiguriert ist, führen Sie es einfach aus
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
innerhalb des Verzeichnisses, das die übergeordnete Datei pom.xml
enthält, indem Sie im Befehl nur die gewünschten untergeordneten Module angeben, jedoch ohne den führenden Punkt „.“ In der durch Kommas getrennten Projektliste wird die übergeordnete pom.xml
Datei selbst möglicherweise nicht installiert. (Die Option -Djavacpp.platform.root=...
ist nur für Android-Builds erforderlich.) Geben Sie außerdem -Djavacpp.cppbuild.skip
als Option an, um die Ausführung der cppbuild.sh
Skripte zu überspringen. Zusätzlich zu -Djavacpp.platform=...
können einige der Voreinstellungen auch gegen CUDA mit -Djavacpp.platform.extension=-gpu
oder CPython mit -Djavacpp.platform.extension=-python
erstellt werden. Weitere Einzelheiten finden Sie in den Kommentaren in der Datei pom.xml
. Aus dem Unterverzeichnis „platform“ können wir die „platform“-Artefakte auch mit einem ähnlichen Befehl installieren:
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
-SkripteDurch das Ausführen der Skripte können wir die nativen Bibliotheken problemlos auf mehreren Plattformen installieren, es ist jedoch zusätzliche Software erforderlich:
Wenn alles funktioniert, werden die Skripte automatisch als Teil des Maven-Build-Lebenszyklus gestartet, wir können sie aber auch manuell ausführen
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
Mögliche Plattformnamen sind:
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
Die von einigen Builds unterstützte Erweiterung -gpu
erfordert auch die Installation von CUDA. (Die Variable ANDROID_NDK
ist nur für Android-Builds erforderlich.) Bitte beachten Sie, dass die Skripte bei Bedarf Quellarchive von entsprechenden Websites herunterladen.
Um Binärdateien für ein Android-Gerät ohne FPU zu kompilieren, stellen Sie zunächst sicher, dass dies das ist, was Sie möchten. Ohne FPU ist die Leistung von OpenCV oder FFmpeg zwangsläufig inakzeptabel. Wenn Sie diesen Weg dennoch fortsetzen möchten, ersetzen Sie „armeabi-v7a“ durch „armeabi“ und „-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16“ durch „-march=armv5te -mtune =xscale -msoft-float", in verschiedenen Dateien.
Obwohl JavaCPP auf dem System installierte native Bibliotheken übernehmen kann, sind die Skripte vorhanden, um den Erstellungsprozess auf mehreren Plattformen zu erleichtern. Sie ermöglichen es JavaCPP außerdem, die nativen Bibliotheken zu kopieren und sie zur Laufzeit aus den oben von Maven erstellten JAR-Dateien zu laden, eine nützliche Funktion für eigenständige Anwendungen oder Java-Applets. Darüber hinaus funktionieren Tricks wie die folgenden mit 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 >
Vielen Dank an Jose Gómez für das Ausprobieren!
Beiträge jeglicher Art sind herzlich willkommen! Im Moment verfügt der Parser
über begrenzte Fähigkeiten, daher plane ich, ihn schrittweise zu verbessern, bis er große C++-Headerdateien erfolgreich analysieren kann, die noch komplizierter sind als die von OpenCV, Caffe oder TensorFlow, das Build-System jedoch könnte ebenfalls verbessert werden. Daher suche ich Hilfe insbesondere bei den folgenden fünf Aufgaben, in unbestimmter Reihenfolge:
Parser
(durch Verwendung der Voreinstellungen für LLVM und Clang?)linux-armhf
für Raspberry Pi usw.Um einen Beitrag zu leisten, forken Sie bitte und erstellen Sie Pull-Anfragen oder veröffentlichen Sie Ihre Vorschläge als neues „Problem“. Vielen Dank im Voraus für Ihren Beitrag!
Projektleitung: Samuel Audet samuel.audet at
gmail.com
Entwicklerseite: https://github.com/bytedeco/javacpp-presets
Diskussionsgruppe: http://groups.google.com/group/javacpp-project