gpt4 book ai didi

android - DJI Phantom 3 相机在 Android Studio 中出现 openCV 问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:41 25 4
gpt4 key购买 nike

我正在尝试从 DJI 获取相机并使用 OpenCV,问题在于如何设置 OpenCv 以在无人机处于 Activity 状态时获取 DJI 正在录制的视频预览器。无人机实际上正在将视频流式传输到我的手机,但是当我尝试使用我的 OpenCV 代码从我在 Android Studio 中的项目布局中获取视频预览 ID 时,每次我尝试转到应用程序的相机 View 部分。这是我用来将 OpenCv 对象初始化为 DJI 相机捕获的视频预览器的代码。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
setContentView(R.layout.activity_main);

openCvCameraView = (JavaCameraView)findViewById(R.id.video_previewer_surface);
openCvCameraView.setVisibility(SurfaceView.VISIBLE);
openCvCameraView.setCvCameraViewListener(this);

initUI();

// The callback for receiving the raw H264 video data for camera live view
mReceivedVideoDataCallBack = new CameraReceivedVideoDataCallback() {

@Override
public void onResult(byte[] videoBuffer, int size) {
if(mCodecManager != null){
// Send the raw H264 video data to codec manager for decoding
mCodecManager.sendDataToDecoder(videoBuffer, size);
}else {
Log.e(TAG, "mCodecManager is null");
}
}
};

DJICamera camera = FPVDemoApplication.getCameraInstance();

if (camera != null) {

camera.setDJICameraUpdatedSystemStateCallback(new DJICamera.CameraUpdatedSystemStateCallback() {
@Override
public void onResult(CameraSystemState cameraSystemState) {
if (null != cameraSystemState) {

int recordTime = cameraSystemState.getCurrentVideoRecordingTimeInSeconds();
int minutes = (recordTime % 3600) / 60;
int seconds = recordTime % 60;

final String timeString = String.format("%02d:%02d", minutes, seconds);
final boolean isVideoRecording = cameraSystemState.isRecording();

MainActivity.this.runOnUiThread(new Runnable() {

@Override
public void run() {

recordingTime.setText(timeString);

/*
* Update recordingTime TextView visibility and mRecordBtn's check state
*/
if (isVideoRecording){
recordingTime.setVisibility(View.VISIBLE);
}else
{
recordingTime.setVisibility(View.INVISIBLE);
}
}
});
}
}
});

}

}

最佳答案

根据这篇文章,您可能正在使用 JavaCameraView:What is the difference between `opencv.android.JavaCameraView` and `opencv.android.NativeCameraView`

The org.opencv.android.JavaCameraView class is implemented inside OpenCV library. It is inherited from CameraBridgeViewBase, that extends SurfaceView and uses standard Android camera API.

您使用的是来自 DJI SDK 的视频源,而不是手机的硬件摄像头,因此当您调用 OpenCV 时,崩溃可能会与传入的源冲突。

因为我没有无人机,所以我唯一的建议是看看另一个关于视频流解码的 DJI 示例

https://github.com/DJI-Mobile-SDK-Tutorials/Android-VideoStreamDecodingSample

而不是解码流,而是将数据发送到 OpenCV,也许是在 JNI (C/C++) 中。

关于android - DJI Phantom 3 相机在 Android Studio 中出现 openCV 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40252978/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com