Отображение предварительного просмотра камеры по кругу

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

Захваченное изображение будет лицом (позже потребуется реализовать распознавание лиц и автоматический захват). Я просмотрел несколько уже заданных вопросов, но ни один из них не связан с новым API-интерфейсом camera2, и большинство из них говорят о том, что наложенное изображение обрезается прозрачным кругом. Но это не сработает в случае, когда мне нужно автоматически определить лицо (поскольку лицо может появиться за пределами обрезанного круглого изображения).

Есть ли способ реализовать это? Я попробовал пример с TextureView и установил LinearLayout с фиксированной шириной и высотой, но предварительный просмотр выглядел немного сжатым и имел квадратную форму.


person nibz    schedule 08.11.2017    source источник
comment
Если вы используете ImageView для предварительного просмотра, см. этот ответ Как сделать круговое изображение   -  person Sayok Majumder    schedule 08.11.2017


Ответы (1)


Я не понимаю, почему здесь важно обнаружение лиц — если вы включите детектор лиц API камеры, он будет работать с полным изображением, независимо от того, что вы делаете, рисуя его внутри круга.

Вы можете либо использовать наложение круга поверх TextureView или SurfaceView правильной формы, либо выполнить собственный OpenGL-рендеринг круга с предварительным просмотром камеры в виде текстуры EGL.

В последнем случае вам, вероятно, понадобится GLSurfaceView для контекста рисования OpenGL и SurfaceTexture для отправки данных камеры и представления их в виде текстуры EGL.

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

person Eddy Talvala    schedule 08.11.2017
comment
Я не понял, что вы подразумеваете под правильной формой TextureView, вы имеете в виду, что я должен формировать TextureView по кругу? Не могли бы вы дать мне пример кода, если знаете. Я застрял в том, чтобы предварительный просмотр отображался в круглой форме. - person nibz; 11.11.2017
comment
Вы не можете превратить просмотры Android в круги; они всегда прямоугольники. Таким образом, либо вам нужно сделать то, что вы рисуете, одним кругом, для чего требуется ваш OpenGL или другой код рисования, либо вам нужно наложить ImageView или что-то подобное с прозрачным кругом, нарисованным в нем, поверх вашего TextureView. - person Eddy Talvala; 13.11.2017
comment
Я следовал аналогичному подходу, я установил предварительный просмотр камеры на фон и наложил изображение с прозрачным кругом, и все сработало хорошо. Спасибо большое! - person nibz; 16.11.2017
comment
Не могли бы вы предложить, я хочу захватить лицо пользователя, только когда оно входит в круг. - person Chetan Chaudhari; 13.05.2019