【发布时间】:2018-07-22 11:04:06
【问题描述】:
所以我正在尝试为最终将在我们办公室周围行驶的机器人编写部分代码。
我们使用的平板电脑可以进行一些人脸识别,同时还可以投影一张动画脸来迎接客户。
此时我有一个简单的应用程序,它可以在前台运行时进行一些基本的运动检测。
我现在开始遇到问题,我必须将应用程序更改为服务,以便它可以在后台连续运行,而“动画人脸应用程序”可以在前台运行。
我仍然面临的最大也是最后的障碍如下:
由于 Activity 是一项服务,我似乎无法找到在服务部分实例化 CameraBridgeViewBase 的方法:
mOpenCvCameraView = (JavaCameraView) findViewById(R.id.show_camera_activity_java_surface_view);
这将引发错误,因为 findViewById 不是 Service 中的可调用函数。
我尝试了很多方法,使 CameraBridgeViewBase 可序列化、可解析并将其作为附加到服务的 Intent 的对象传递,但没有成功。
这是来自 Main_activity_show_camera_service.java:
public int onStartCommand(Intent intent, int flags,int startId) {
mOpenCvCameraView.enableView();
mOpenCvCameraView = (JavaCameraView) findViewById(R.id.show_camera_activity_java_surface_view);
mOpenCvCameraView.setMaxFrameSize(400,300);
mOpenCvCameraView.setVisibility(SurfaceView.VISIBLE);
if (!OpenCVLoader.initDebug()) {
Log.d(TAG, "Internal OpenCV library not found. Using OpenCV Manager for initialization");
OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_0_0, this, mLoaderCallback);
} else {
Log.d(TAG, "OpenCV library found inside package. Using it!");
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
}
return START_STICKY;
}
findViewById 命令会崩溃。
这只是启动服务按钮上的功能:
public void startService(View view) {
Intent i = new Intent(this,MainActivity_show_camera_service.class);
startService(i);
}
我知道还有很多其他库和方法可以获得相同的结果,我肯定会研究这些,但我只想能够使用 OpenCV。
【问题讨论】:
标签: java android opencv service camera