Подтвердить что ты не робот

Можно ли использовать android.hardware.camera2.CaptureRequest с OpenCV?

Я работал над этим уже несколько дней. У меня есть проект на основе OpenCV/JavaCameraView, который я пытаюсь интегрировать с объектом Android android.hardware.camera2.CaptureRequest, который я использую для управления чувствительностью камеры к свету.

Работает проект CameraBridgeViewBase.CvCameraViewListener2/JavaCameraView (я вижу изображение на экране), а проект CaptureRequest работает (см. также), но объединение двух технологий в одном проекте оказалось большой проблемой.

Кто-нибудь получил эти две технологии для совместной работы? Моя цель состоит в том, чтобы камера находилась под контролем CaptureRequest (ограниченная SENSOR_SENSITIVITY + SENSOR_EXPOSURE_TIME), но на экране отображалось потоковое изображение, фильтрованное через общую библиотеку OpenCV, которую я написал.

Чтобы управлять камерой, я могу использовать что-то вроде этого:

        mCameraDevice.createCaptureSession(Arrays.asList(surface, mImageReader.getSurface()),
                new CameraCaptureSession.StateCallback() {
                    @Override
                    public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) {
                        // The camera is already closed
                        if (null == mCameraDevice) {
                            return;
                        }
                        long exposureTime = 66259688,frameDuration = 1000;
                        int sensitivity = 1512;

                        mCaptureSession = cameraCaptureSession;
                        try {

                            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AF_MODE,
                                    CaptureRequest.CONTROL_AF_MODE_CONTINUOUS_PICTURE);

                            setAutoFlash(mPreviewRequestBuilder);
                            mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CaptureRequest.CONTROL_AE_MODE_OFF);
                            mPreviewRequestBuilder.set(CaptureRequest.SENSOR_EXPOSURE_TIME, Long.valueOf(exposureTime));
                            mPreviewRequestBuilder.set(CaptureRequest.SENSOR_SENSITIVITY, Integer.valueOf(sensitivity));
                            mPreviewRequestBuilder.set(CaptureRequest.SENSOR_FRAME_DURATION, Long.valueOf(frameDuration));

                            mPreviewRequest = mPreviewRequestBuilder.build();
                            mCaptureSession.setRepeatingRequest(mPreviewRequest,
                                    mCaptureCallback, mBackgroundHandler);


                        } catch (CameraAccessException e) {
                            e.printStackTrace();
                        }catch (Exception e) {
                            e.printStackTrace();
                        }
                    }

Чтобы фильтровать поток изображений, я могу использовать что-то вроде этого:

public class MyCoolScanner extends AppCompatActivity implements CameraBridgeViewBase.CvCameraViewListener2 {
...
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    mRgba = inputFrame.rgba();

    OpenCVNative.myCoolLibrary(mRgba.getNativeObjAddr(),mGray.getNativeObjAddr());
    return mGray;
}

Спасибо заранее.

4b9b3361

Ответ 2

Я считаю, что OpenCV не поддерживает связь с android.camera2

Ответ 3

Ответ: нет, OpenCV не будет работать с android.camera2, не без какой-либо запутанной работы.