Status de compilação para todas as plataformas (Android, iOS, Linux, Mac OS X, Windows):
Suporte comercial e serviços pagos para predefinições personalizadas:
Os módulos JavaCPP Presets contêm configuração Java e classes de interface para bibliotecas C/C++ amplamente utilizadas. Os arquivos de configuração nos org.bytedeco.<moduleName>.presets
são usados pelo Parser
para criar a partir dos arquivos de cabeçalho C/C++ os arquivos de interface Java direcionados aos pacotes org.bytedeco.<moduleName>
, que por sua vez são usados pelo Generator
e o compilador C++ nativo para produzir as bibliotecas JNI necessárias. Além disso, as classes auxiliares facilitam o uso de suas funcionalidades na plataforma Java, incluindo Android.
Para fins de orientação, a documentação deste repositório pode ser dividida em 2 níveis:
javacpp-presets
, e Este arquivo README.md pai contém informações gerais aplicáveis a todos os módulos para resolver problemas relacionados a downloads, requisitos comuns, procedimentos de instalação e instruções de construção. Os respectivos arquivos README.md em cada subdiretório contêm informações extras, links e notas sobre documentação da API, requisitos específicos, dependências para arquivos pom.xml
e exemplo de código de uso para as predefinições e pacotes de cada módulo. Esteja ciente de que nem todas as predefinições têm o mesmo nível de maturidade, e o estilo e o layout também podem diferir entre si, pois são baseados em APIs de bibliotecas de terceiros.
Consulte a página wiki para obter mais informações sobre como criar novas predefinições. Como atualmente falta documentação adicional, sinta-se à vontade para fazer perguntas na lista de e-mails ou no fórum de discussão.
Arquivos JAR contendo binários para todos os módulos filhos e compilações para todas as plataformas suportadas (Android, iOS, Linux, Mac OS X e Windows) podem ser obtidos no Maven Central Repository. Arquivos contendo esses arquivos JAR também estão disponíveis como versões.
Para instalar manualmente os arquivos JAR, siga as instruções na seção Instalação Manual abaixo.
Também podemos baixar e instalar tudo automaticamente com:
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 "
onde as variáveis moduleName
e moduleVersion
correspondem ao módulo desejado. Isso baixa binários para todas as plataformas, mas para obter binários para apenas uma plataforma, podemos definir a propriedade do sistema javacpp.platform
(por meio da opção de linha de comando -D
) para algo como android-arm
, linux-x86_64
, macosx-x86_64
, windows-x86_64
, etc. Também podemos especificar mais de uma plataforma, veja os exemplos em Reduzindo o Número de Dependências. Outra opção disponível para usuários do Gradle é o Gradle JavaCPP e, da mesma forma, para usuários do Scala existe o SBT-JavaCPP.
Para usar as predefinições JavaCPP, você precisará baixar e instalar o seguinte software:
Além disso, no caso do Android, as predefinições JavaCPP também dependem de:
Basta colocar todos os arquivos JAR desejados ( opencv*.jar
, ffmpeg*.jar
, etc.), além de javacpp.jar
, em algum lugar do seu caminho de classe. Os arquivos JAR disponíveis como artefatos pré-construídos devem ser usados com JavaCPP. Os binários para Linux são construídos com o Ubuntu, portanto devem funcionar na maioria das distribuições em uso atualmente. Aqui estão algumas instruções mais específicas para casos comuns:
NetBeans (Java SE 7 ou mais recente):
Eclipse (Java SE 7 ou mais recente):
Código do Visual Studio (Java SE 7 ou mais recente):
+
.IntelliJ IDEA (Android 7.0 ou mais recente):
app/libs
.+
e selecione "2 Dependência de arquivo".libs
. Depois disso, podemos acessar de forma quase transparente as APIs C/C++ correspondentes através das classes de interface encontradas nos pacotes org.bytedeco.<moduleName>
. Na verdade, o Parser
traduz os comentários de código dos arquivos de cabeçalho C/C++ nos arquivos de interface Java, (quase) prontos para serem consumidos pelo Javadoc. No entanto, como a sua tradução ainda deixa a desejar, pode-se consultar as páginas da documentação original. Por exemplo, aqueles para OpenCV e FFmpeg podem ser encontrados online em:
Se os arquivos binários disponíveis acima não forem suficientes para suas necessidades, talvez seja necessário reconstruí-los a partir do código-fonte. Para tanto, os arquivos de projeto do lado Java foram criados como módulos Maven. Por padrão, a compilação Maven também instala as bibliotecas nativas no lado C/C++ nativo com os scripts cppbuild.sh
, mas elas também podem ser instaladas por outros meios.
Além disso, pode-se encontrar na página wiki informações adicionais sobre os ambientes de construção recomendados para as principais plataformas.
As predefinições JavaCPP dependem do Maven, um poderoso sistema de compilação para Java, portanto, antes de tentar uma compilação, instale e leia:
Cada módulo filho, por sua vez, depende por padrão dos scripts cppbuild.sh
incluídos, explicados abaixo, para instalar suas bibliotecas nativas correspondentes no subdiretório cppbuild
. Para usar bibliotecas nativas já instaladas em algum outro lugar do sistema, outros diretórios de instalação além do cppbuild
também podem ser especificados nos arquivos pom.xml
ou nos arquivos de configuração .java
. As seguintes versões são suportadas:
Depois de tudo instalado e configurado, basta executar
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
dentro do diretório que contém o arquivo pom.xml
pai, especificando apenas os módulos filhos desejados no comando, mas sem o ponto inicial "." na lista de projetos separados por vírgula, o próprio arquivo pom.xml
pai pode não ser instalado. (A opção -Djavacpp.platform.root=...
é necessária apenas para compilações do Android.) Especifique também -Djavacpp.cppbuild.skip
como opção para ignorar a execução dos scripts cppbuild.sh
. Além de -Djavacpp.platform=...
, algumas das predefinições também podem ser criadas em CUDA com -Djavacpp.platform.extension=-gpu
ou CPython com -Djavacpp.platform.extension=-python
. Consulte os comentários dentro do arquivo pom.xml
para obter mais detalhes. No subdiretório "plataforma", também podemos instalar os artefatos "plataforma" com um comando semelhante:
$ cd platform
$ mvn install --projects ../opencv/platform,../ffmpeg/platform,etc. -Djavacpp.platform.host
cppbuild.sh
A execução dos scripts nos permite instalar facilmente as bibliotecas nativas em múltiplas plataformas, mas é necessário software adicional:
Com o acima em funcionamento, os scripts são iniciados automaticamente como parte do ciclo de vida de construção do Maven, mas também podemos executar manualmente
$ ANDROID_NDK=/path/to/android-ndk/ bash cppbuild.sh [-platform < name > ] [-extension < name > ] < install | clean > [projects]
sempre que possível, os nomes das plataformas são:
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
A extensão -gpu
suportada por algumas compilações também requer a instalação do CUDA. (A variável ANDROID_NDK
é necessária apenas para compilações do Android.) Observe que os scripts baixam arquivos de origem de sites apropriados, conforme necessário.
Para compilar binários para um dispositivo Android sem FPU, primeiro certifique-se de que é isso que você deseja. Sem FPU, o desempenho do OpenCV ou do FFmpeg será inaceitável. Se você ainda deseja continuar nesse caminho, substitua "armeabi-v7a" por "armeabi" e "-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" por "-march=armv5te -mtune =xscale -msoft-float", dentro de vários arquivos.
Embora o JavaCPP possa coletar bibliotecas nativas instaladas no sistema, os scripts existem para facilitar o processo de construção em múltiplas plataformas. Eles também permitem que o JavaCPP copie as bibliotecas nativas e as carregue em tempo de execução a partir dos arquivos JAR criados acima pelo Maven, um recurso útil para aplicativos independentes ou miniaplicativos Java. Além disso, truques como os seguintes funcionam com 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 >
Obrigado a Jose Gómez por testar isso!
Contribuições de qualquer tipo são muito bem-vindas! No momento, o Parser
tem recursos limitados, então pretendo melhorá-lo gradualmente até o ponto em que ele possa analisar com êxito grandes arquivos de cabeçalho C++ que são ainda mais complicados do que os do OpenCV, Caffe ou TensorFlow, mas o sistema de compilação poderia também ser melhorado. Conseqüentemente, procuro ajuda especialmente nas cinco tarefas a seguir, sem nenhuma ordem específica:
Parser
(usando as predefinições para LLVM e Clang?)linux-armhf
para Raspberry Pi, etc.Para contribuir, bifurque e crie solicitações pull ou poste suas sugestões como um novo "problema". Desde já muito obrigado pela sua contribuição!
Líder do projeto: Samuel Audet samuel.audet at
gmail.com
Site do desenvolvedor: https://github.com/bytedeco/javacpp-presets
Grupo de discussão: http://groups.google.com/group/javacpp-project