首页 > 解决方案 > 未找到 OpenCV 包

问题描述

我已经根据教程视频进行了静态初始化并添加了这 4 个 opencv 文件,但是当我将它加载到手机时仍然如此。未找到 OpenCV 包,它要求我从 google play 安装,但未找到应用程序。谁能帮我?我的项目需要这个。我正在使用 2020.3.1 最新版本的 Android Studio 和 opencv-3.4.13 android sdk

构建.gradle(.app)

dependencies {
 implementation project(':opencv')
}

构建.gradle(.opencv)

apply plugin: 'com.android.library'

println "OpenCV: " + project.buildscript.sourceFile

android {
    compileSdkVersion 27
    //buildToolsVersion "27.0.3" // not needed since com.android.tools.build:gradle:3.0.0

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_6
        targetCompatibility JavaVersion.VERSION_1_6
    }

    sourceSets {
        main {
            jniLibs.srcDirs = ['native/libs']
            java.srcDirs = ['java/src']
            aidl.srcDirs = ['java/src']
            res.srcDirs = ['java/res']
            manifest.srcFile 'java/AndroidManifest.xml'
        }
    }
}

dependencies {
}

MainActivity.java

static
    {
        if(OpenCVLoader.initDebug())
        {
            Log.d("DetectDiseaseFragment","Opencv is loaded");

        }
        else
        {
            Log.d("DetectDiseaseFragment","Opencv failed to load");
        }
    }

ObjectDetectorActivity

package com.example.paddy_disease_tracker;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import org.opencv.android.BaseLoaderCallback;
import org.opencv.android.CameraBridgeViewBase;
import org.opencv.android.LoaderCallbackInterface;
import org.opencv.android.OpenCVLoader;
import org.opencv.core.CvType;
import org.opencv.core.Mat;

import java.io.IOException;

public class ObjectDetectorActivity extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {

    private static final String TAG="DetectDiseaseFragment";
    private Mat mRgba;
    private Mat mGrey;
    private CameraBridgeViewBase mOpenCvCameraView;
    private BaseLoaderCallback mLoaderCallback=new BaseLoaderCallback(this)
    {
        @Override
        public void onManagerConnected(int status)
        {
            switch (status)
            {
                case LoaderCallbackInterface
                        .SUCCESS:{
                    Log.i(TAG,"OpenCv is loaded");
                }
                default:
                {
                    super.onManagerConnected(status);
                }
                break;
            }
        }
    };
    public ObjectDetectorActivity()
    {
        Log.i(TAG,"Instantiated new "+this.getClass());
    }

    private objectDetectorClass objectDetectorClass;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

        int MY_PERMISSIONS_REQUEST_CAMERA=0;
        if(ContextCompat.checkSelfPermission(ObjectDetectorActivity.this, Manifest.permission.CAMERA)== PackageManager.PERMISSION_DENIED)
        {
            ActivityCompat.requestPermissions(ObjectDetectorActivity.this,new String[] {Manifest.permission.CAMERA},MY_PERMISSIONS_REQUEST_CAMERA);

        }

        setContentView(R.layout.activity_object_detector);

        mOpenCvCameraView=(CameraBridgeViewBase) findViewById(R.id.frame_Surface);
        mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
        mOpenCvCameraView.setCvCameraViewListener(this);

        try
        {
            objectDetectorClass=new objectDetectorClass(getAssets(), "modelLive.tflite","labelsLive.txt",300);
            Log.d("DetectDiseaseFragment","Model is successfully loadedr");
        }
        catch (IOException e)
        {
            Log.d("DetectDiseaseFragment","Getting some error");
            e.printStackTrace();
        }





    }
    @Override
    protected void onResume()
    {
        super.onResume();
        if(!OpenCVLoader.initDebug())
        {
            Log.d(TAG,"Opencv initialization is done");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
        else
        {
            Log.d(TAG,"Opencv is not loaded, try again");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_4_0,this,mLoaderCallback);

        }
    }

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

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

    }

    public void onCameraViewStarted(int width,int height)
    {
        mRgba=new Mat(height,width, CvType.CV_8UC4);
        mGrey=new Mat(height,width,CvType.CV_8UC1);
    }
    public void onCameraViewStopped()
    {
        mRgba.release();
    }

    @Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        mRgba=inputFrame.rgba();
        mGrey=inputFrame.gray();

        Mat out=new Mat();
        out=objectDetectorClass.recognizeImage(mRgba);
        out=objectDetectorClass.recognizeImage(mRgba);

        return mRgba;
    }
}

设置.gradle

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
    }
}
rootProject.name = "Paddy_Disease_Tracker"
include ':app'

def opencvsdk='D:\\AndroidStudioProjects\\final3\\paddy-disease-tracker-master\\opencv-3.4.13-android-sdk\\OpenCV-android-sdk'
include ':opencv'
project(':opencv').projectDir = new File(opencvsdk + '/sdk')

```[jniLibs set up dy][1]


  [1]: https://i.stack.imgur.com/avz0N.jpg

标签: javaandroidopencv

解决方案


推荐阅读