Android 无法启动服务意图:initOpenCV

Android 无法启动服务意图:initOpenCV,android,opencv,android-intent,android-studio,camera,Android,Opencv,Android Intent,Android Studio,Camera,我试图初始化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 servi

我试图初始化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;
    }
}

这一错误的原因可能是什么?我如何修复它呢?

您似乎已经使用了OpenCv静态初始化。 是否已将本机libs复制到项目目录中 您可以查看本教程


我上传了错误的项目代码片段,正确的版本在我上面问题的编辑版本中有说明,我修改了错误以澄清。此外,我已经在我的项目中添加了本机lib。我已经为您编辑了答案,并且在使用OpenCVLoader.initAsync()时,您不需要添加本机lib。你只需要从play Store下载opencv manager。非常感谢,我在模拟器上下载了最新版本的opencv manager,一切都很顺利。结果我没有在android studio上下载ndk,你提供的教程和你的评论帮我找到了答案。谢谢你救了我一天!!如果你愿意接受这个答案,那你就太好了
//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);
    }
}