在android L上加载OpenCV时如何删除日志记录
Posted
技术标签:
【中文标题】在android L上加载OpenCV时如何删除日志记录【英文标题】:How to remove logging statements when OpenCV is loaded on android L 【发布时间】:2015-01-23 06:12:37 【问题描述】:我正在使用 OpenCV 库 2.4.9。为了初始化 OpenCv 库,我使用了一个调用
OpenCvLoaded.initDebug()
但是这个调用会产生很多日志语句。我找不到像 OpenCvLoaded.initRelease() 这样的东西。另外当我使用以下代码时
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this)
@Override
public void onManagerConnected(int status)
switch (status)
case LoaderCallbackInterface.SUCCESS:
break;
default:
super.onManagerConnected(status);
break;
;
我得到了错误
Unable to start activity ComponentInfomyclass: java.lang.IllegalArgumentException: Service Intent must be explicit: Intent act=org.opencv.engine.BIND
如何删除这些日志语句。我正在 android L 上构建我的应用程序。我的最小 sdk 是 21。
【问题讨论】:
OpenCV 使用 java.util.logging。您最好的选择可能是配置一个您的 OpenCV 应用程序将在启动期间读取的日志文件:tutorials.jenkov.com/java-logging/configuration.html 至于您的java.lang.IllegalArgumentException: Service Intent must be explicit
运行时错误请看这里:Android L (API 21) Service Intent must be explicit
【参考方案1】:
AFAIK 目前有两种方法可以让 OpenCV 与 Android 5.0(“Lollipop”)一起工作。
-
简单的方法:在您项目的
build.gradle
中设置targetSdkVersion 19
(由于您的最低sdk 版本为21,因此您还必须设置minSdkVersion 19
或更低)。
但如果您必须使用 Android 5.0 版,那么上述解决方法将不适合您。相反,您可以将 Android OpenCV sources 作为模块导入到您的项目中,将您的主应用程序项目设置为依赖它,然后
修改 OpenCV 文件 src/main/java/org/opencv/android/AsyncServiceHelper.java
如下:
将方法createExplicitFromImplicitIntent
(see the link 上面给出的FoggyDay)添加到AsyncServiceHelper
类中。
然后将AsyncServiceHelper
类的initOpenCV
方法修改为:
public static boolean initOpenCV(String Version, final Context AppContext,
final LoaderCallbackInterface Callback)
AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback);
Intent expIntent = createExplicitFromImplicitIntent(AppContext, new Intent("org.opencv.engine.BIND"));
if (AppContext.bindService(expIntent,
helper.mServiceConnection, Context.BIND_AUTO_CREATE))
return true;
else
AppContext.unbindService(helper.mServiceConnection);
InstallService(AppContext, Callback);
return false;
最后不要忘记添加必要的导入:
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import java.util.List;
至于日志消息泛滥,另一种方法是停止输出这些行...
02-01 02:25:10.489 29887-29998/com.ABC.opencv_someapp D/CameraBridge? mStretch value: 1.125
02-01 02:25:10.521 29887-29887/com.ABC.opencv_someapp D/JavaCameraView? Preview Frame received. Frame size: 1843200
...可能是将 OpenCV 源代码包含到您的项目中,如上图所示,然后在以下文件中删除或注释这些行:
src/main/java/org/opencv/android/CameraBridgeViewBase.java line 408: Log.d(TAG, "mStretch value: " + mScale);
和
src/main/java/org/opencv/android/JavaCameraView.java line 276: Log.d(TAG, "Preview Frame received. Frame size: " + frame.length);
【讨论】:
以上是关于在android L上加载OpenCV时如何删除日志记录的主要内容,如果未能解决你的问题,请参考以下文章
Android studio 之 OpenCv库安装与Opencv图像灰度化测试(2023-2-13日)
在 Android 上的 OpenCV 中旋转 VideoCapture