État de build pour toutes les plateformes (Android, iOS, Linux, Mac OS X, Windows) :
Support commercial et services payants pour les préréglages personnalisés :
Les modules JavaCPP Presets contiennent des classes de configuration et d'interface Java pour les bibliothèques C/C++ largement utilisées. Les fichiers de configuration des org.bytedeco.<moduleName>.presets
sont utilisés par l' Parser
pour créer à partir des fichiers d'en-tête C/C++ les fichiers d'interface Java ciblant les packages org.bytedeco.<moduleName>
, qui à leur tour sont utilisés par le Generator
et le compilateur C++ natif pour produire les bibliothèques JNI requises. De plus, les classes d'assistance facilitent l'utilisation de leurs fonctionnalités sur la plateforme Java, y compris Android.
À des fins d'orientation, la documentation de ce référentiel peut être considérée comme étant divisée en 2 niveaux :
javacpp-presets
lui-même, et Ce fichier README.md parent contient des informations générales applicables à tous les modules pour résoudre les problèmes concernant les téléchargements, les exigences courantes, les procédures d'installation et les instructions de construction. Les fichiers README.md respectifs dans chaque sous-répertoire contiennent des informations supplémentaires, des liens et des notes concernant la documentation de l'API, les exigences spécifiques, les dépendances des fichiers pom.xml
et des exemples de code d'utilisation pour les préréglages et les packages de chaque module. Attention, tous les presets n'ont pas le même niveau de maturité, et le style et la mise en page peuvent également différer les uns des autres puisqu'ils s'appuient sur les API de librairies tierces.
Veuillez vous référer à la page wiki pour plus d'informations sur la façon de créer de nouveaux préréglages. Comme il manque actuellement de la documentation supplémentaire, n'hésitez pas à poser des questions sur la liste de diffusion ou sur le forum de discussion.
Les fichiers JAR contenant les binaires de tous les modules enfants et builds pour toutes les plates-formes prises en charge (Android, iOS, Linux, Mac OS X et Windows) peuvent être obtenus à partir du référentiel central Maven. Les archives contenant ces fichiers JAR sont également disponibles sous forme de versions.
Pour installer manuellement les fichiers JAR, suivez les instructions de la section Installation manuelle ci-dessous.
Nous pouvons également tout télécharger et installer automatiquement avec :
pom.xml
) < dependency >
< groupId >org.bytedeco</ groupId >
< artifactId >${moduleName}-platform</ artifactId >
< version >${moduleVersion}-1.5.11</ version >
</ dependency >
build.gradle.kts
ou 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 "
où les variables moduleName
et moduleVersion
correspondent au module souhaité. Cela télécharge les binaires pour toutes les plates-formes, mais pour obtenir les binaires pour une seule plate-forme, nous pouvons définir la propriété système javacpp.platform
(via l'option de ligne de commande -D
) sur quelque chose comme android-arm
, linux-x86_64
, macosx-x86_64
, windows-x86_64
, etc. Nous pouvons également spécifier plusieurs plates-formes, voir les exemples dans Réduire le nombre de dépendances. Une autre option disponible pour les utilisateurs de Gradle est Gradle JavaCPP, et de même pour les utilisateurs de Scala, il existe SBT-JavaCPP.
Pour utiliser les préréglages JavaCPP, vous devrez télécharger et installer le logiciel suivant :
De plus, dans le cas d'Android, les préréglages JavaCPP s'appuient également sur :
Placez simplement tous les fichiers JAR souhaités ( opencv*.jar
, ffmpeg*.jar
, etc.), en plus de javacpp.jar
, quelque part dans votre chemin de classe. Les fichiers JAR disponibles sous forme d'artefacts prédéfinis sont destinés à être utilisés avec JavaCPP. Les binaires pour Linux sont construits avec Ubuntu, ils devraient donc fonctionner sur la plupart des distributions actuellement utilisées. Voici quelques instructions plus spécifiques pour les cas courants :
NetBeans (Java SE 7 ou version ultérieure) :
Eclipse (Java SE 7 ou version ultérieure) :
Visual Studio Code (Java SE 7 ou version ultérieure) :
+
.IntelliJ IDEA (Android 7.0 ou version ultérieure) :
app/libs
.+
et sélectionnez « 2 Dépendance de fichier ».libs
. Après cela, nous pouvons accéder de manière presque transparente aux API C/C++ correspondantes via les classes d'interface trouvées dans les packages org.bytedeco.<moduleName>
. En effet, l' Parser
traduit les commentaires de code des fichiers d'en-tête C/C++ en fichiers d'interface Java, (presque) prêts à être consommés par Javadoc. Cependant, leur traduction laissant encore à désirer, on pourra souhaiter se référer aux pages de documentation originales. Par exemple, ceux pour OpenCV et FFmpeg peuvent être trouvés en ligne sur :
Si les fichiers binaires disponibles ci-dessus ne suffisent pas à vos besoins, vous devrez peut-être les reconstruire à partir du code source. À cette fin, les fichiers de projet côté Java ont été créés sous forme de modules Maven. Par défaut, la version Maven installe également les bibliothèques natives du côté C/C++ natif avec les scripts cppbuild.sh
, mais elles peuvent également être installées par d'autres moyens.
De plus, on peut trouver sur la page wiki des informations supplémentaires sur les environnements de construction recommandés pour les principales plates-formes.
Les préréglages JavaCPP dépendent de Maven, un système de build puissant pour Java, donc avant de tenter une build, assurez-vous d'installer et de lire :
Chaque module enfant s'appuie à son tour par défaut sur les scripts cppbuild.sh
inclus, expliqués ci-dessous, pour installer ses bibliothèques natives correspondantes dans le sous-répertoire cppbuild
. Pour utiliser des bibliothèques natives déjà installées ailleurs sur le système, d'autres répertoires d'installation que cppbuild
peuvent également être spécifiés soit dans les fichiers pom.xml
, soit dans les fichiers de configuration .java
. Les versions suivantes sont prises en charge :
Une fois tout installé et configuré, exécutez simplement
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
dans le répertoire contenant le fichier pom.xml
parent, en spécifiant uniquement les modules enfants souhaités dans la commande, mais sans le point "." dans la liste des projets séparés par des virgules, le fichier pom.xml
parent lui-même risque de ne pas être installé. (L'option -Djavacpp.platform.root=...
est requise uniquement pour les versions Android.) Spécifiez également -Djavacpp.cppbuild.skip
comme option pour ignorer l'exécution des scripts cppbuild.sh
. En plus de -Djavacpp.platform=...
, certains préréglages peuvent également être construits avec CUDA avec -Djavacpp.platform.extension=-gpu
ou CPython avec -Djavacpp.platform.extension=-python
. Veuillez vous référer aux commentaires à l'intérieur du fichier pom.xml
pour plus de détails. Depuis le sous-répertoire « platform », nous pouvons également installer les artefacts « platform » avec une commande similaire :
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
L'exécution des scripts nous permet d'installer facilement les bibliothèques natives sur plusieurs plateformes, mais des logiciels supplémentaires sont nécessaires :
Avec ce qui précède en état de marche, les scripts sont lancés automatiquement dans le cadre du cycle de vie de la build Maven, mais nous pouvons également les exécuter manuellement.
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
où les noms de plate-forme possibles sont :
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
L'extension -gpu
prise en charge par certaines versions nécessite également l'installation de CUDA. (La variable ANDROID_NDK
est requise uniquement pour les versions Android.) Veuillez noter que les scripts téléchargent les archives sources à partir des sites appropriés si nécessaire.
Pour compiler des binaires pour un appareil Android sans FPU, assurez-vous d’abord que c’est ce que vous voulez. Sans FPU, les performances d'OpenCV ou de FFmpeg seront forcément inacceptables. Si vous souhaitez toujours continuer dans cette voie, remplacez "armeabi-v7a" par "armeabi" et "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" par "-march=armv5te -mtune =xscale -msoft-float", dans divers fichiers.
Bien que JavaCPP puisse récupérer les bibliothèques natives installées sur le système, les scripts existent pour faciliter le processus de construction sur plusieurs plates-formes. Ils permettent également à JavaCPP de copier les bibliothèques natives et de les charger au moment de l'exécution à partir des fichiers JAR créés ci-dessus par Maven, une fonctionnalité utile pour les applications autonomes ou les applets Java. De plus, des astuces telles que les suivantes fonctionnent avec 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 >
Merci à Jose Gómez d'avoir testé cela !
Les contributions de toute nature sont les bienvenues ! Pour le moment, l' Parser
a des capacités limitées, je prévois donc de l'améliorer progressivement jusqu'à ce qu'il puisse analyser avec succès de gros fichiers d'en-tête C++ qui sont encore plus compliqués que ceux d'OpenCV, Caffe ou TensorFlow, mais le système de construction pourrait également être amélioré. Par conséquent, je recherche de l'aide notamment pour les cinq tâches suivantes, sans ordre particulier :
Parser
(en utilisant les préréglages pour LLVM et Clang ?)linux-armhf
pour Raspberry Pi, etc.Pour contribuer, veuillez créer et créer des demandes d'extraction, ou publier vos suggestions en tant que nouveau « problème ». Merci beaucoup d'avance pour votre contribution !
Responsable du projet : Samuel Audet samuel.audet at
gmail.com
Site développeur : https://github.com/bytedeco/javacpp-presets
Groupe de discussion : http://groups.google.com/group/javacpp-project