проблема положения между двумя устройствами с распознаванием лиц - PullRequest
0 голосов
/ 24 мая 2019

Я использую функцию распознавания лиц в своем приложении с помощью camera2 api.После нескольких проблем с позиционированием с видом наложения это работает на мою честь 5c.Прямоугольник вокруг головы, и это хорошо.Но когда я пытаюсь использовать Huawei P9 lite и некоторые другие устройства, прямоугольник находится не вокруг головы, а немного справа и снизу, так что левый / верхний угол прямоугольника находится на носу.Я использую пример Camera2Basic

Я пытался жестко кодировать корректор положения, но, как вы можете себе представить, если он работает на p9, он больше не работает для чести.

Вот мой код для прямоугольника обнаружения лица:

 int left = (int)((float)(faces[i].getBounds().left)/MGpix.getWidth()*mOverlayView.getHeight());
                            int top = (int)((float)(faces[i].getBounds().top)/MGpix.getHeight()*mOverlayView.getWidth());
                            int right = (int)((float)(faces[i].getBounds().right)/MGpix.getWidth()*mOverlayView.getHeight());
                            int bottom =(int)((float)(faces[i].getBounds().bottom)/MGpix.getHeight()*mOverlayView.getWidth());

MGpix - это размер устройства фронтальной камеры

, и вот исправление, которое я должен сделать, чтобысопоставьте лицо с p9:

int correction=-(int)(80*scale+0.5f);//(int)((float)(top-bottom)*2);
 left=left-correction-(int)(0*scale+0.5f);
                            top=top-correction-(int)(20*scale+0.5f);
                            right=right-correction+(int)(20*scale+0.5f);
                            bottom=bottom-correction+(int)(0*scale+0.5f);

, и, как я уже сказал, вот решение проблемы с позиционированием, которое у меня было раньше:

canvas.scale(-1, 1, getHeight()/2, getWidth()/2);
            //Mirror the canva in order to make it move with the head (and not in the opposite direction)
            //See also: rotation 90° in fragment_camera2_basic.xml

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

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

...