Как запустить обработку изображений Opencv в реальном времени условно с помощью Android?

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

Я закончил с логикой обработки в реальном времени с частотой кадров 3, а время обработки составляет в среднем 0,4 секунды, что хорошо в моем случае.

Проблема в том, что проект будет использоваться в промышленности, и я хочу начать обработку кадра только тогда, когда продукт находится в поле зрения камеры.

Я сделал какое-то обнаружение движения, чтобы определить, есть ли какое-то движение контура, а затем запустить алгоритм, но ковер промышленной машины также движется, поэтому этот подход не сработает.

Вот код для части обнаружения движения:

   @Override
   public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
    long e1 = Core.getTickCount();
    contours.clear();
    //gray frame because it requires less resource to process
    mGray = inputFrame.gray();

    //this function converts the gray frame into the correct RGB format for the BackgroundSubtractorMOG apply function
    Imgproc.cvtColor(mGray, mRgb, Imgproc.COLOR_GRAY2RGB);

    //apply detects objects moving and produces a foreground mask
    //the lRate updates dynamically dependent upon seekbar changes
    sub.apply(mRgb, mFGMask, lRate);

    //erode and dilate are used  to remove noise from the foreground mask
    Imgproc.erode(mFGMask, mFGMask, new Mat());
    Imgproc.dilate(mFGMask, mFGMask, new Mat());

    //drawing contours around the objects by first called findContours and then calling drawContours
    //RETR_EXTERNAL retrieves only external contours
    //CHAIN_APPROX_NONE detects all pixels for each contour
    Imgproc.findContours(mFGMask, contours, new Mat(), Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_NONE);

    //draws all the contours in red with thickness of 2
    Imgproc.drawContours(mRgb, contours, -1, new Scalar(255, 0, 0), 2);

    long e2 = Core.getTickCount();
    long e = e2 - e1;
    double time = e / Core.getTickFrequency();

    Log.d("timeTAG", "" + contours.size());


    return mRgb;
}

Что вы предлагаете в качестве решения этой проблемы?

Ваш вопрос слишком широк, чтобы на него можно было ответить здесь. У вас действительно есть проблема специфический с точки зрения программирование? Также вы должны как минимум предоставить образцы изображений, а в вашем случае: может лучше видео, чтобы люди, которые хотят вам помочь, получили больше полезной информации.

HansHirse 13.03.2019 11:34

Итак, настоящий вопрос "как я могу узнать, когда продукт находится в поле зрения камеры?"?

Miki 13.03.2019 11:42

Спасибо за ваш быстрый ответ, ребята, мне просто нужно представление о том, как можно решить такие проблемы? Правильно ли я использую обнаружение движения в такой ситуации? В противном случае я попытаюсь записать демонстрационное видео или несколько скриншотов.

Amine 13.03.2019 12:06
0
3
106
0

Другие вопросы по теме