すべてのプラットフォーム (Android、iOS、Linux、Mac OS X、Windows) のビルド ステータス:
カスタム プリセットの商用サポートと有料サービス:
JavaCPP プリセット モジュールには、広く使用されている C/C++ ライブラリの Java 構成クラスとインターフェイス クラスが含まれています。 org.bytedeco.<moduleName>.presets
パッケージ内の構成ファイルは、C/C++ ヘッダー ファイルからorg.bytedeco.<moduleName>
パッケージを対象とする Java インターフェイス ファイルを作成するためにParser
によって使用されます。このファイルは、次に、必要な JNI ライブラリを生成するGenerator
とネイティブ C++ コンパイラー。さらに、ヘルパー クラスにより、Android を含む Java プラットフォームでその機能が使いやすくなります。
説明の目的で、このリポジトリのドキュメントは 2 つのレベルに分かれていると考えることができます。
javacpp-presets
モジュール自体に属し、この親 README.md ファイルには、ダウンロード、共通要件、インストール手順、ビルド手順に関する問題を解決するために、すべてのモジュールに適用できる一般情報が含まれています。各サブディレクトリ内のそれぞれの README.md ファイルには、各モジュールのプリセットとパッケージの API ドキュメント、特定の要件、 pom.xml
ファイルの依存関係、サンプル使用コードに関する追加情報、リンク、メモが含まれています。すべてのプリセットが同じ完成度レベルを持っているわけではなく、サードパーティ ライブラリの API に基づいているため、スタイルやレイアウトもそれぞれ異なる場合があることに注意してください。
新しいプリセットの作成方法の詳細については、Wiki ページを参照してください。現在追加のドキュメントが不足しているため、メーリング リストまたはディスカッション フォーラムでもお気軽に質問してください。
すべての子モジュールのバイナリと、サポートされているすべてのプラットフォーム (Android、iOS、Linux、Mac OS X、および Windows) のビルドを含む JAR ファイルは、Maven Central Repository から取得できます。これらの 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
変数は、目的のモジュールに対応します。これにより、すべてのプラットフォームのバイナリがダウンロードされますが、1 つのプラットフォームのみのバイナリを取得するには、 javacpp.platform
システム プロパティを ( -D
コマンド ライン オプション経由で) android-arm
、 linux-x86_64
、 macosx-x86_64
、 windows-x86_64
などに設定できます。 windows-x86_64
など。複数のプラットフォームを指定することもできます。依存関係の数の削減の例を参照してください。 Gradle ユーザーが利用できるもう 1 つのオプションは Gradle JavaCPP で、同様に Scala ユーザーには SBT-JavaCPP があります。
JavaCPP プリセットを使用するには、次のソフトウェアをダウンロードしてインストールする必要があります。
さらに、Android の場合、JavaCPP プリセットは以下にも依存します。
javacpp.jar
に加えて、必要なすべての JAR ファイル ( opencv*.jar
、 ffmpeg*.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
サブディレクトリからすべての JAR ファイルを選択します。その後、 org.bytedeco.<moduleName>
パッケージにあるインターフェイス クラスを通じて、対応する C/C++ API にほぼ透過的にアクセスできるようになります。実際、 Parser
コード コメントを C/C++ ヘッダー ファイルから Java インターフェイス ファイルに変換し、(ほぼ) Javadoc で使用できる状態にします。ただし、翻訳にはまだ改善の余地があるため、元のドキュメント ページを参照することをお勧めします。たとえば、OpenCV と FFmpeg 用のものは、次の場所でオンラインで見つけることができます。
上記で入手可能なバイナリ ファイルがニーズを満たさない場合は、ソース コードからバイナリ ファイルを再構築する必要がある場合があります。このため、Java 側のプロジェクト ファイルは Maven モジュールとして作成されました。デフォルトでは、Maven ビルドはcppbuild.sh
スクリプトを使用してネイティブ C/C++ 側にネイティブ ライブラリもインストールしますが、他の方法でインストールすることもできます。
さらに、主要なプラットフォームの推奨ビルド環境に関する追加情報が Wiki ページで見つかります。
JavaCPP プリセットは、Java 用の強力なビルド システムである Maven に依存しているため、ビルドを試みる前に、必ず以下をインストールして読んでください。
各子モジュールは、デフォルトで、以下で説明する付属のcppbuild.sh
スクリプトに依存して、対応するネイティブ ライブラリをcppbuild
サブディレクトリにインストールします。システム上の別の場所にすでにインストールされているネイティブ ライブラリを使用するには、 pom.xml
ファイルまたは.java
構成ファイルでcppbuild
以外のインストール ディレクトリを指定することもできます。次のバージョンがサポートされています。
すべてをインストールして構成したら、単に実行するだけです
$ mvn install --projects .,opencv,ffmpeg,etc. -Djavacpp.platform.root=/path/to/android-ndk/
親のpom.xml
ファイルを含むディレクトリ内で、コマンド内で必要な子モジュールのみを指定しますが、先頭のピリオド「.」は付けません。カンマ区切りのプロジェクトのリストでは、親のpom.xml
ファイル自体がインストールされない可能性があります。 ( -Djavacpp.platform.root=...
オプションは、Android ビルドの場合にのみ必要です。) cppbuild.sh
スクリプトの実行をスキップするには、オプションとして-Djavacpp.cppbuild.skip
も指定します。 -Djavacpp.platform=...
に加えて、一部のプリセットは-Djavacpp.platform.extension=-gpu
使用して CUDA に対して、または-Djavacpp.platform.extension=-python
を使用して CPython に対してビルドすることもできます。詳細については、 pom.xml
ファイル内のコメントを参照してください。 「platform」サブディレクトリから、同様のコマンドを使用して「platform」アーティファクトをインストールすることもできます。
$ 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 ビルドの場合にのみ必要です。) スクリプトは、必要に応じて適切なサイトからソース アーカイブをダウンロードすることに注意してください。
FPU を持たない Android デバイス用にバイナリをコンパイルするには、まずこれが目的のものであることを確認します。 FPU がなければ、OpenCV または FFmpeg のパフォーマンスは許容できないものになります。それでもその道を進みたい場合は、「armeabi-v7a」を「armeabi」に置き換え、「-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16」を「-march=armv5te -mtune」に置き換えます。 =xscale -msoft-float"、さまざまなファイル内にあります。
JavaCPP はシステムにインストールされているネイティブ ライブラリを取得できますが、スクリプトは複数のプラットフォームにわたるビルド プロセスを容易にするために存在します。また、JavaCPP がネイティブ ライブラリをコピーし、Maven によって上記で作成された JAR ファイルから実行時にロードすることもできます。これは、スタンドアロン アプリケーションまたは 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 >
これをテストしてくれた Jose Gómez に感謝します。
あらゆる種類の貢献を大歓迎です。現時点では、 Parser
機能は限られているため、OpenCV、Caffe、または TensorFlow のヘッダー ファイルよりもさらに複雑な大きな C++ ヘッダー ファイルを正常に解析できるように段階的に改善する予定ですが、ビルド システムが問題を解決する可能性があります。も改善されるでしょう。したがって、特に次の 5 つのタスクに関して助けを求めています (順不同)。
Parser
改善 (LLVM と Clang のプリセットを使用することで?)linux-armhf
など、より多くのプラットフォーム向けのビルドを提供します。貢献するには、フォークしてプル リクエストを作成するか、新しい「問題」として提案を投稿してください。ご貢献いただきまして誠にありがとうございます。
プロジェクトリーダー: Samuel Audet samuel.audet at
gmail.com)
開発者サイト: https://github.com/bytedeco/javacpp-presets
ディスカッション グループ: http://groups.google.com/group/javacpp-project