Как интегрировать OpenCV Manager в Android-приложение

Я использую OpenCV2.4.7 Library в своем приложении Android. Когда приложение запускается, он переходит в магазин Google Play для приложения под названием OpenCV Manager. Является ли их каким-либо способом интегрировать это приложение в Android-приложение Android, потому что мы уже используем библиотеку OpenCV, так почему приложение снова нуждается в OpenCV Engine? это их способ интегрировать этот движок.

Ответ 1

Да. Чтобы интегрировать OpenCV внутри приложения и избегать явной установки менеджера OpenCV, вам необходимо сначала прочитать следующий документ, предоставленный OpenCV.

Первое чтение → Статическая инициализация OpenCV

После успешного выполнения шагов вам необходимо написать следующий код, чтобы включить OpenCV в код инициализации приложения перед вызовом API OpenCV. Это можно сделать, например, в статическом разделе класса Activity:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}

Литература:

Изменить

Согласно новому сценарию в документе и благодаря @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);
    }

    ...
}

Ссылки

Ответ 2

(1 Вставьте эти строки после включения $(CLEAR_VARS) в файл opencv.mk

OPENCV_CAMERA_MODULES:=on
OPENCV_INSTALL_MODULES:=on
include D:/opencv_with/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk

(2 В папке с текущей директорией проекта папка libs копирует всю папку внутри opencv libs.

(3 Добавить в свою деятельность

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

            }
            }
        }
    };

Ответ 3

Это то, что документация говорит об установке OpenCV Manager:

Папка

apk содержит пакеты Android, которые должны быть установлены на целевом Android-устройстве, чтобы включить доступ к библиотеке OpenCV через API OpenCV Manager (см. подробности ниже).

На производственных устройствах, имеющих доступ к Google Play Market (и Интернет), эти пакеты будут установлены с Market при первом запуске приложения с использованием API OpenCV Manager.

...

Примечание. Установка из Интернета предпочтительнее, так как команда OpenCV может публиковать обновленные версии этих пакетов на рынке.

Подробнее об этом можно прочитать здесь: https://docs.opencv.org/3.0-beta/doc/tutorials/introduction/android_binary_package/O4A_SDK.html#general-info

Ответ 4

Просто прокомментируйте строку в следующем коде

@Override
public void onResume()
{
    super.onResume();
    //OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);

}