私はAndroidアプリでOpenCV2.4.7ライブラリを使用しています。アプリが起動すると、OpenCVマネージャーと呼ばれるアプリケーション用のGoogle Playストアに行きます。このアプリケーションをAndroid apkはOpenCVライブラリを既に使用しているため、アプリに再びOpenCVエンジンが必要な理由は?このエンジンを統合する方法はありますか?
はい。アプリケーション内にOpenCVを統合し、OpenCVマネージャーの明示的なインストールを回避するには、まずOpenCVが提供する次のドキュメントを読む必要があります。
最初の読み取り-> OpenCVの静的初期化
正常に手順を実行した後、OpenCV APIを呼び出す前に、アプリケーション初期化コードでOpenCVを有効にする次のコードを記述する必要があります。たとえば、Activityクラスの静的セクションで実行できます。
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
参照:
Documentの新しいシナリオに従って、新しい情報を提供してくれた@rozhokに感謝します。initDebug()メソッドは本番ビルドには使用できません
注このメソッドは、実動コードでは非推奨です。これは、実験的およびローカル開発の目的でのみ設計されています。アプリを公開する場合は、非同期初期化を使用したアプローチを使用します。
あなたはそのために次の方法を使用する必要があります
構文
static boolean initAsync(String Version, Context AppContext, LoaderCallbackInterface Callback)
例
public class Sample1Java extends Activity implements CvCameraViewListener {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS:
{
Log.i(TAG, "OpenCV loaded successfully");
mOpenCvCameraView.enableView();
} break;
default:
{
super.onManagerConnected(status);
} break;
}
}
};
@Override
public void onResume()
{
super.onResume();
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
}
...
}
参考文献
これは、OpenCVマネージャーのインストールに関するドキュメントの記述です。
apkフォルダーにはAndroidターゲットにインストールするパッケージAndroidデバイスOpenCV Manager APIを介したOpenCVライブラリへのアクセスを有効にします(以下の詳細を参照)。
Google Playマーケット(およびインターネット)にアクセスできる実稼働デバイスでは、これらのパッケージはOpenCVマネージャーAPIを使用したアプリケーションの最初の起動時にマーケットからインストールされます。
...
注:インターネットからのインストールは、OpenCVチームが市場でこのパッケージの更新バージョンを公開する可能性があるため、望ましい方法です。
詳しくはこちらをご覧ください: https://docs.opencv.org/3.0-beta/doc/tutorials/introduction/Android_binary_package/O4A_SDK.html#general-info
OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include D:/opencv_with/OpenCV-2.4.10-Android-sdk/sdk/native/jni/OpenCV.mk
現在のプロジェクトディレクトリのlibsフォルダーで、OpenCV libs内のすべてのフォルダーをコピーします。
アクティビティに追加する
if (!OpenCVLoader.initDebug()) {
Log.d("ERROR", "Unable to load OpenCV");
} else {
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
@Override
public void onManagerConnected(int status) {
switch (status) {
case LoaderCallbackInterface.SUCCESS: {
//Your opencv Operation code
}
}
}
};