OpenCV задержка камеры - PullRequest
0 голосов
/ 26 мая 2019

Я использую OpenCV, чтобы попытаться обнаружить объект на Android.Проблема в том, что экран камеры выглядит нестабильным.

1) Я пытался уменьшить разрешение камеры.

mOpenCvCameraView.setMaxFrameSize(640, 480);

2) Я пытался использовать i % 60 == 0 дляне вызывать функцию JNI (surfWithFlann) в onCameraFrame каждый раз.

@Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
        matInput = inputFrame.rgba();
        Imgproc.cvtColor(matInput, matGray, Imgproc.COLOR_RGB2GRAY);
        i++;
        if(pressedBtn.equals("지폐") && i % 60 == 0) {
            surfWithFlann(matGray.getNativeObjAddr(), image_matches.getNativeObjAddr());
            Imgproc.resize(image_matches, image_matches, matGray.size());

            banknotes_result_tts = new String(getJniStringBytes(), Charset.forName("UTF-8"));

            tts.speak(banknotes_result_tts, TextToSpeech.QUEUE_FLUSH, null);

            return image_matches;
        }

        return matInput;
    }

3) Я попытался использовать AsyncTask, и есть функция JNI (surfWithFlann).surfWithFlann сравнивает изображение, полученное камерой, и другие изображения, отправленные из файла ресурсов.Это мой код.

@Override
    public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {

        matInput = inputFrame.rgba();
        Imgproc.cvtColor(matInput, matGray, Imgproc.COLOR_RGB2GRAY);

        if(pressedBtn.equals("지폐")) {
            try {
                image_matches = new SURFAsyncTask().execute(matGray, image_matches).get();
            } catch (ExecutionException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            return image_matches;
        }

        return matInput;
    }

    private class SURFAsyncTask extends AsyncTask<Mat, Void, Mat> {

        @Override
        protected Mat doInBackground(Mat... mats) {

            surfWithFlann(mats[0].getNativeObjAddr(), mats[1].getNativeObjAddr());
            Imgproc.resize(mats[1], mats[1], mats[0].size());

            banknotes_result_tts = new String(getJniStringBytes(), Charset.forName("UTF-8"));

            tts.speak(banknotes_result_tts, TextToSpeech.QUEUE_FLUSH, null);

            return mats[1];
        }

    }

Но три из них не сработали.Экран камеры все еще выглядит изменчивым.Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...