Estado de compilación para todas las plataformas (Android, iOS, Linux, Mac OS X, Windows):
Soporte comercial y servicios pagos para ajustes preestablecidos personalizados:
Los módulos JavaCPP Presets contienen clases de interfaz y configuración de Java para bibliotecas C/C++ ampliamente utilizadas. El Parser
utiliza los archivos de configuración en los org.bytedeco.<moduleName>.presets
para crear a partir de archivos de encabezado C/C++ los archivos de interfaz Java destinados a los paquetes org.bytedeco.<moduleName>
, que a su vez son utilizados por el Generator
y el compilador nativo de C++ para producir las bibliotecas JNI necesarias. Además, las clases auxiliares hacen que su funcionalidad sea más fácil de usar en la plataforma Java, incluido Android.
A modo de orientación, se puede considerar que la documentación de este repositorio está dividida en 2 niveles:
javacpp-presets
en sí, y Este archivo README.md principal contiene información general aplicable a todos los módulos para resolver problemas relacionados con descargas, requisitos comunes, procedimientos de instalación e instrucciones de compilación. Los respectivos archivos README.md en cada subdirectorio contienen información adicional, enlaces y notas sobre la documentación de API, requisitos específicos, dependencias para archivos pom.xml
y código de uso de muestra para los ajustes preestablecidos y paquetes de cada módulo. Tenga en cuenta que no todos los ajustes preestablecidos tienen el mismo nivel de madurez y que el estilo y el diseño también pueden diferir de uno a otro, ya que se basan en las API de bibliotecas de terceros.
Consulte la página wiki para obtener más información sobre cómo crear nuevos ajustes preestablecidos. Dado que actualmente falta documentación adicional, no dude en hacer preguntas en la lista de correo o en el foro de discusión.
Los archivos JAR que contienen archivos binarios para todos los módulos secundarios y compilaciones para todas las plataformas compatibles (Android, iOS, Linux, Mac OS X y Windows) se pueden obtener en el repositorio central de Maven. Los archivos que contienen estos archivos JAR también están disponibles como versiones.
Para instalar manualmente los archivos JAR, siga las instrucciones de la sección Instalación manual a continuación.
También podremos tener todo descargado e instalado automáticamente con:
pom.xml
) < dependency >
< groupId >org.bytedeco</ groupId >
< artifactId >${moduleName}-platform</ artifactId >
< version >${moduleVersion}-1.5.11</ version >
</ dependency >
build.gradle.kts
o 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 "
donde las variables moduleName
y moduleVersion
corresponden al módulo deseado. Esto descarga archivos binarios para todas las plataformas, pero para obtener archivos binarios solo para una plataforma, podemos configurar la propiedad del sistema javacpp.platform
(a través de la opción de línea de comando -D
) en algo como android-arm
, linux-x86_64
, macosx-x86_64
, windows-x86_64
, etc. También podemos especificar más de una plataforma, consulte los ejemplos en Reducción del número de dependencias. Otra opción disponible para los usuarios de Gradle es Gradle JavaCPP y, de manera similar, para los usuarios de Scala existe SBT-JavaCPP.
Para utilizar los ajustes preestablecidos de JavaCPP, deberá descargar e instalar el siguiente software:
Además, en el caso de Android, los ajustes preestablecidos de JavaCPP también se basan en:
Simplemente coloque todos los archivos JAR deseados ( opencv*.jar
, ffmpeg*.jar
, etc.), además de javacpp.jar
, en algún lugar de su classpath. Los archivos JAR disponibles como artefactos prediseñados están destinados a usarse con JavaCPP. Los binarios para Linux están construidos con Ubuntu, por lo que deberían funcionar en la mayoría de las distribuciones actualmente en uso. Aquí hay algunas instrucciones más específicas para casos comunes:
NetBeans (Java SE 7 o posterior):
Eclipse (Java SE 7 o posterior):
Código de Visual Studio (Java SE 7 o posterior):
+
.IntelliJ IDEA (Android 7.0 o posterior):
app/libs
.+
y seleccione "2 Dependencia de archivo".libs
. Después de eso, podemos acceder de forma casi transparente a las API de C/C++ correspondientes a través de las clases de interfaz que se encuentran en los paquetes org.bytedeco.<moduleName>
. De hecho, el Parser
traduce los comentarios de código de los archivos de encabezado C/C++ a los archivos de la interfaz Java, (casi) listos para ser consumidos por Javadoc. Sin embargo, dado que su traducción aún deja mucho que desear, es posible que desee consultar las páginas de la documentación original. Por ejemplo, los de OpenCV y FFmpeg se pueden encontrar en línea en:
Si los archivos binarios disponibles anteriormente no son suficientes para sus necesidades, es posible que deba reconstruirlos a partir del código fuente. Para ello se crearon archivos de proyecto en el lado Java como módulos Maven. De forma predeterminada, la compilación de Maven también instala las bibliotecas nativas en el lado C/C++ nativo con los scripts cppbuild.sh
, pero también se pueden instalar por otros medios.
Además, en la página wiki se puede encontrar información adicional sobre los entornos de compilación recomendados para las principales plataformas.
Los ajustes preestablecidos de JavaCPP dependen de Maven, un potente sistema de compilación para Java, por lo que antes de intentar una compilación, asegúrese de instalar y leer sobre:
A su vez, cada módulo secundario depende de forma predeterminada de los scripts cppbuild.sh
incluidos, que se explican a continuación, para instalar sus bibliotecas nativas correspondientes en el subdirectorio cppbuild
. Para utilizar bibliotecas nativas ya instaladas en otro lugar del sistema, también se pueden especificar otros directorios de instalación además de cppbuild
ya sea en los archivos pom.xml
o en los archivos de configuración .java
. Se admiten las siguientes versiones:
Una vez que todo esté instalado y configurado, simplemente ejecute
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
dentro del directorio que contiene el archivo principal pom.xml
, especificando solo los módulos secundarios deseados en el comando, pero sin el punto inicial "." en la lista de proyectos separados por comas, es posible que el archivo principal pom.xml
no se instale. (La opción -Djavacpp.platform.root=...
es necesaria solo para compilaciones de Android). También especifique -Djavacpp.cppbuild.skip
como opción para omitir la ejecución de los scripts cppbuild.sh
. Además de -Djavacpp.platform=...
, algunos de los ajustes preestablecidos también se pueden crear en CUDA con -Djavacpp.platform.extension=-gpu
o CPython con -Djavacpp.platform.extension=-python
. Consulte los comentarios dentro del archivo pom.xml
para obtener más detalles. Desde el subdirectorio "plataforma", también podemos instalar los artefactos "plataforma" con un comando similar:
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
La ejecución de los scripts nos permite instalar fácilmente las bibliotecas nativas en múltiples plataformas, pero se requiere software adicional:
Con lo anterior en funcionamiento, los scripts se inician automáticamente como parte del ciclo de vida de compilación de Maven, pero también podemos ejecutarlos manualmente.
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
donde los nombres de plataforma posibles son:
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
La extensión -gpu
admitida por algunas compilaciones también requiere la instalación de CUDA. (La variable ANDROID_NDK
solo es necesaria para las compilaciones de Android). Tenga en cuenta que los scripts descargan archivos fuente de los sitios apropiados según sea necesario.
Para compilar archivos binarios para un dispositivo Android sin FPU, primero asegúrese de que esto sea lo que desea. Sin FPU, el rendimiento de OpenCV o FFmpeg seguramente será inaceptable. Si aún desea continuar por ese camino, reemplace "armeabi-v7a" por "armeabi" y "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" por "-march=armv5te -mtune =xscale -msoft-float", dentro de varios archivos.
Aunque JavaCPP puede aceptar bibliotecas nativas instaladas en el sistema, los scripts existen para facilitar el proceso de compilación en múltiples plataformas. También permiten que JavaCPP copie las bibliotecas nativas y las cargue en tiempo de ejecución desde los archivos JAR creados anteriormente por Maven, una característica útil para aplicaciones independientes o subprogramas de Java. Además, trucos como el siguiente funcionan con 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 >
¡Gracias a José Gómez por probar esto!
¡Las contribuciones de cualquier tipo son bienvenidas! Por el momento, el Parser
tiene capacidades limitadas, por lo que planeo mejorarlo gradualmente hasta el punto en que pueda analizar con éxito archivos de encabezado C++ grandes que son incluso más complicados que los de OpenCV, Caffe o TensorFlow, pero el sistema de compilación podría también ser mejorado. En consecuencia, busco ayuda especialmente con las cinco tareas siguientes, sin ningún orden en particular:
Parser
(¿usando los ajustes preestablecidos para LLVM y Clang?)linux-armhf
para Raspberry Pi, etc.Para contribuir, bifurque y cree solicitudes de extracción, o publique sus sugerencias como un nuevo "problema". ¡Muchas gracias de antemano por tu contribución!
Líder del proyecto: Samuel Audet samuel.audet at
gmail.com
Sitio del desarrollador: https://github.com/bytedeco/javacpp-presets
Grupo de discusión: http://groups.google.com/group/javacpp-project