【问题标题】:Unable to start service Intent: initOpenCV无法启动服务意图:initOpenCV
【发布时间】:2016-01-17 17:47:31
【问题描述】:

我尝试初始化 openCv 以使用相机。库已成功初始化,但是当我尝试初始化 openCc 时,它返回此错误:

01-17 14:19:24.606 8747-8747/com.pettracker.objecttracker E/OpenCV could not be loaded!: CameraTest::CameraPreview
01-17 14:19:24.606 1267-1476/system_process W/ActivityManager: Unable to start service Intent { act=org.opencv.engine.BIND pkg=org.opencv.engine } U=0: not found
01-17 14:19:24.606 1267-1278/system_process W/ActivityManager: Unbind failed: could not find connection for android.os.BinderProxy@b15c6c98

我正在尝试使用 openCv 库来使用相机进行颜色跟踪。代码如下图:

public CameraPreview(ICameraPreviewCallback context, IFrameProcessor frameProcessor) {
        super((Context)context);
        mContext = context;
        System.out.println(mContext);
        mFrameProcessor = frameProcessor;
        if (!loadOpenCV()) {
            Log.e("OpenCV could not be loaded!", TAG);
        }
    }


private boolean loadOpenCV() {
    return OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_2, (Context)mContext, this);
}

另外,我修改了initOpenCv,这样我就不会遇到intent的隐式调用,代码如下图:

public static boolean initOpenCV(String Version, final Context AppContext,
        final LoaderCallbackInterface Callback)
{
    AsyncServiceHelper helper = new AsyncServiceHelper(Version, AppContext, Callback);
    Intent intent = new Intent("org.opencv.engine.BIND");
    intent.setPackage("org.opencv.engine");
    if (AppContext.bindService(intent,
            helper.mServiceConnection, Context.BIND_AUTO_CREATE))
    {
        return true;
    }
    else
    {
        AppContext.unbindService(helper.mServiceConnection);
        InstallService(AppContext, Callback);
        return false;
    }
}

此错误的原因可能是什么?我该如何解决?

【问题讨论】:

    标签: android opencv android-intent android-studio camera


    【解决方案1】:

    您似乎使用了 OpenCv 静态初始化。 您是否在项目目录中复制了本机库 你可以看看这个教程here

    //try useing this code for initilization of OpenCv insted of yours.
    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
            case LoaderCallbackInterface.SUCCESS: {
                Log.i(TAG, "OpenCV loaded successfully");
    
            }
                break;
            default: {
                super.onManagerConnected(status);
            }
                break;
            }
        }
    };
    
    @Override
    public void onResume() {
        super.onResume();
        if (!OpenCVLoader.initDebug()) {
            Log.d(TAG,
                    "Internal OpenCV library not found. Using OpenCV Manager for initialization");
            OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this,
                    mLoaderCallback);
        } else {
            Log.d(TAG, "OpenCV library found inside package. Using it!");
            mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
        }
    }
    

    【讨论】:

    • 上传了我的项目代码的错误 sn-p,正确的版本在我上面的问题的编辑版本中说明,我已经修改了错误以澄清。另外,我已经在我的项目中添加了原生库。
    • 我已经为您编辑了答案,并且在使用 OpenCVLoader.initAsync() 时,您无需添加本机库。您只需从 Play 商店下载 opencv 管理器
    • 非常感谢,我在模拟器上下载了最新版本的 openCv 管理器,一切正常。
    • 原来我没有在我的 android studio 上下载 ndk,您提供的教程和您的评论帮助我找到了答案。谢谢你拯救我的一天!
    • 如果你能接受那个对你很好的答案
    猜你喜欢
    • 2011-03-27
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多