android приложение запрашивает установку OpencvManager даже после включения opencv sdk в проект и добавления зависимости - PullRequest
0 голосов
/ 07 мая 2020

Я пытался сделать это последние несколько дней. Цель состоит в том, чтобы получить доступ к android камере и передавать кадры на экране с помощью библиотеки opencv.

Opencv sdk version 4.3.0
Android Studio Version 3.6.3

Я выполнил этот учебник, чтобы начать работу. Изначально мне не удалось добавить библиотеку opencv в качестве зависимости модуля к приложению. Позже, потратив много времени, используя это решение . Теперь я могу добавить библиотеку opencv в качестве зависимости модуля.

Теперь проблема в том, что даже после добавления библиотеки opencv в качестве зависимости модуля, когда приложение запускает его предлагает установить приложение OpencvManager из магазина воспроизведения. (кстати, это приложение не найдено в магазине игр)

Prompt Image

Если у кого-то есть решение или какие-либо предложения, чтобы запустить приложение without installing OpencvManager, я был бы очень благодарен.

Исходный код вдохновлен ( или скопирован ) из этого пример проекта .

AndroidManifest. xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test_opencv">

<supports-screens android:resizeable="true"
    android:smallScreens="true"
    android:normalScreens="true"
    android:largeScreens="true"
    android:anyDensity="true" />

<uses-permission android:name="android.permission.CAMERA"/>

<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front" android:required="false"/>
<uses-feature android:name="android.hardware.camera.front.autofocus" android:required="false"/>

<application
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >

    <activity android:name=".MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboardHidden|orientation">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

activity_main. xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:opencv="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<org.opencv.android.JavaCameraView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:visibility="gone"
    android:id="@+id/tutorial1_activity_java_surface_view"
    opencv:show_fps="true"
    opencv:camera_id="any" />

</FrameLayout>

MainActivity. java, удалите операторы импорта для краткости

package com.example.test_opencv;

public class MainActivity extends CameraActivity implements CvCameraViewListener2 {
    private static final String TAG = "OCVSample::Activity";

    private CameraBridgeViewBase mOpenCvCameraView;
    private boolean              mIsJavaCamera = true;
    private MenuItem             mItemSwitchCamera = null;

    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;
        }
    }
    };

    static {
        if (OpenCVLoader.initDebug()) {
            Log.d(TAG, "open cv initialized");
        } else {
            Log.d(TAG, "opec cv not initialized");
        }
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "called onCreate");
        super.onCreate(savedInstanceState);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        setContentView(R.layout.activity_main);

        mOpenCvCameraView = findViewById(R.id.tutorial1_activity_java_surface_view);
        mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
        mOpenCvCameraView.setCvCameraViewListener(this);
    }

    @Override
    public void onPause()
    {
        super.onPause();
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }

    @Override
    public void onResume() {
    super.onResume();
    if (!OpenCVLoader.initDebug()) {
        Log.d(TAG, "Internal OpenCV library not found");
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
    } else {
        Log.d(TAG, "OpenCV library found inside package. Using it!");
        mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
    }
   enter image description here }

    @Override
    protected List<? extends CameraBridgeViewBase> getCameraViewList() {
        return Collections.singletonList(mOpenCvCameraView);
    }

    public void onDestroy() {
        super.onDestroy();
        if (mOpenCvCameraView != null)
            mOpenCvCameraView.disableView();
    }

    public void onCameraViewStarted(int width, int height) {}

    public void onCameraViewStopped() {}

    public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
        return inputFrame.rgba();
    }
}

1 Ответ

2 голосов
/ 08 мая 2020

Я только что следил за этим с последней (такой же, как и вы) версией всего. И это работает! Наслаждайтесь!

Я даю свою версию инструкций, думая, не сломается ли когда-нибудь ссылка.

  1. Загрузите opencv sdk для android по адресу: https://opencv.org/releases.html
  2. Распакуйте opencv sdk и поместите его в ту же root папку с образцом проекта

    -> MyProjects

    ->OpenCV-android-sdk
    ->OpenCVSample
    
  3. В вашем проекте (например, OpenCVSample) откройте файл settings.gradle и добавьте конфигурацию ниже

    def opencvsdk = '<path_to_opencv_android_sdk_rootdir>' include ':opencv' project(':opencv').projectDir = new File(opencvsdk + '/sdk') Example with my settings.gradle file include ':app'

В моем случае:

rootProject.name='OpenCVSample'
include ':app'
def opencvsdk = '../OpenCV-android-sdk'
include ':opencv'
project(':opencv').projectDir = new File(opencvsdk + '/sdk')
В app / build.gradle добавьте модуль opencv к зависимостям. implementation project(':opencv')

Syn c сейчас, и среда готова. После этого я скопировал манифест, макет и коды активности из вашего вопроса, и он работал точно так же, как вы хотели.

...