java - 未找到 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
解决方案
推荐阅读
- wix - WIX MSI 从 MSI 创建的目录中的 DLL 库安装驱动程序会导致升级过程中出现问题
- reactjs - 从 DateRangePicker 选择值后反应原生分配值
- python - if 语句不会检测到该列表不为空 | TKINTER 标签
- node.js - Google Cloud Functions 部署 - 创建删除规则后 NoSuchKey 失败(us.artifacts.sha256 图像)
- html - 如何将图片添加到包含您网站的图片地址的网站
- vb.net - 将文本插入 MS 访问单元格
- scala - 如何改进这个“更新”功能?
- prestashop - Prestashop 模板在子主题中扩展
- android - 在 Activity 中调用应用程序上下文
- reactjs - 在 React.js 中获取 api 的 useEffect 钩子中的问题