Детектор лиц Скорость мобильного зрения не увеличивается с уменьшенным растровым изображением

Резюме. Наше приложение зависит от высокой скорости обнаружения ориентиров на лице (таких как открытые или закрытые глаза). Таким образом, я разработал алгоритм, который берет положение лица из последнего кадра и обрезает изображение из следующего кадра. Это работает отлично, и Детектор лиц должен обработать только четверть изображения.

Но это не увеличивает скорость обнаружения. Кто-нибудь знает почему?

Изменить: все, что делает мой алгоритм, - это кадрирование изображения на основе информации из последнего изображения. Но сам ImageRecognition не выполняет. Мы используем Mobile Vision от Google.

важные фрагменты кода:

Этот фрагмент выполняется перед передачей растрового изображения в Детектор лиц. Он берет положение лица из предыдущего кадра и передает только эту часть изображения:

Bitmap bitmapReturn = Bitmap.createBitmap(bitmap, topLeftX, topLeftY, width, height);

Этот фрагмент выполняется после обработки кадра Детектором лиц. Он показывает расположение изображения для следующего кадра:

        float spotY = getSpotY(face);
        float spotX = getRatioX(face);
        int moveX = (int) (((float)bitMapScanWidth / 2) - spotX) ;
        int moveY = (int) (((float)bitMapScanHeight / 2) - spotY);
        moveValues(moveX, moveY);

Есть еще несколько фрагментов кода, которые гарантируют, что значения topLeftX и topLeftY изображения не достигают значений, превышающих размер растрового изображения, и другие, которые гарантируют, что лицо имеет такой же размер на изображении.

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

Обратите внимание, что когда я сравнивал скорость между двумя версиями (с алгоритмом, который обрезает изображение, и без него), обе версии фактически рассчитывались с помощью необходимых функций для обрезки изображения. Единственная разница заключалась в том, что один из них фактически использовал значения для обрезки изображения, а другой просто вычислял их в фоновом режиме. Это означает, что вычисления, необходимые для моего алгоритма, не были причиной отсутствия улучшения скорости.


person Felix Hegg    schedule 15.12.2019    source источник


Ответы (1)


Если вы создаете свой собственный алгоритм распознавания лиц, вы можете попробовать изменить реальный алгоритм и использовать архитектуру, подходящую для мобильных устройств. например, MobilNetSSD или подобное, вы также можете попробовать изменить способ компиляции алгоритма и развернуть его на мобильных устройствах, потому что оба этих метода могут повысить производительность по сравнению с тем, что может сделать простая функция обрезки. Кроме того, если у вас нет проблем с обменом фактическим алгоритмом, который вы используете, я сделаю все возможное, чтобы понять, почему обрезка не работает в вашем конкретном случае.

person ESDAIRIM    schedule 15.12.2019
comment
Спасибо за ваш быстрый ответ. Кажется, я плохо объяснил свою ситуацию. Алгоритм распознавания объектов я не разрабатывал. Я только разработал алгоритм, который должен увеличить скорость того, который я использую. Я добавил правку в свой вопрос. - person Felix Hegg; 15.12.2019
comment
Я не могу оказать вам дополнительной помощи, потому что я не могу посмотреть на архитектуру вашего алгоритма, и я раньше не использовал Vision API от Google, но я нашел еще одну ветку в StackOverflow, которая может быть вам полезна: здесь - person ESDAIRIM; 15.12.2019