- Полный список
- Замер света и фокус
- Распознавание лиц
- Настройка камеры на телефоне
- Как происходит настройка камеры на телефоне
- Настройки предустановленной камеры
- Основные настройки
- Меню с настройками
- Дополнительные возможности
- Ручной режим
- Сторонний софт
- Google Камера
- Приложения из магазина
- Что влияет на качество фото
Полный список
— меняем настройки камеры
По работе с камерой нам осталась одна тема – настройки камеры. Т.е. это разрешения, эффекты, фокусы, качество, вспышка и пр. Полный список настроек можно посмотреть в хелпе (обращайте внимание на минимальную версию API).
Для работы с настройками используется объект Camera.Parameters. Он содержит кучу методов, которые можно разделить на несколько групп.
Методы is Supported позволяют узнать поддерживается ли данная опция/настройка камерой.
Методы get Supported и getMax предоставят вам набор поддерживаемых значений или максимальное значение опции/настройки.
Методы get вернут текущее значение настройки.
Методы set установят текущее значение настройки.
В этом уроке рассмотрим на практике работу с парой настроек: цветовые эффекты и режимы вспышки. А также я опишу работу с настройками, которые выбиваются из общего алгоритма.
Напомню, что в Уроке 132 мы разбирались с тем, как совместить размеры экрана и превью камеры, и учесть поворот устройства. А в Уроке 133 – как сохранить фото или видео. В этом уроке я не буду это использовать, чтобы не повторяться и не усложнять материал.
Project name: P1341_CameraFeatures
Build Target: Android 2.3.3
Application name: CameraFeatures
Package name: ru.startandroid.develop.p1341camerafeatures
Create Activity: MainActivity
В strings.xml добавим строки:
На экране у нас SurfaceView для вывода изображения и два спиннера настроек. Первый будет предоставлять выбор цветовых эффектов, а второй – режимы работы вспышки. Про спиннеры я рассказывал в Уроке 56.
В манифесте добавляем права на работу с камерой
В onCreate мы, как обычно, определяем SurfaceView, холдер и callback для холдера.
В onResume подключаемся к камере и вызываем метод initSpinners, который заполнит спиннеры значениями настроек. Об этом чуть ниже.
В onPause освобождаем ресурсы.
В initSpinners мы поочередно настраиваем спиннеры. Сначала тот, который для выбора цветовых эффектов.
Используем метод getParameters, чтобы получить текущие настройки камеры. И метод getSupportedColorEffects, чтобы из этих настроек получить цветовые эффекты, которые поддерживаются этим устройством. Результат приходит в виде списка строк.
Далее вызываем свой метод initSpinner (чуть ниже обсудим и его), который заполнит спиннер. На вход ему передаем:
— id спиннера
— набор значений, которые он будет отображать
— текущее значение настройки цветовых эффектов, которые мы получаем из настроек методом getColorEffect
Методом setOnItemSelectedListener ставим обработчик выбора значения из спиннера. При выборе мы получаем настройки, устанавливаем выбранный цветовой эффект методом setColorEffect и присваиваем эти настройки камере методом setParameters. После этого камера подхватит новые настройки и мы увидим в превью результат.
Аналогично мы настраиваем спиннер для режимов вспышки. Получаем доступные режимы, получаем текущий, заполняем спиннер и в обработчике передаем камере выбранный режим.
Метод initSpinner находит спиннер, создает для него адаптер с полученными данными и устанавливает текущее значение спиннера соответственно текущей настройке камеры.
Читатель на форуме абсолютно верно заметил, что имеет смысл в код добавить проверку на null для списков, которые мы получаем от методов getSupportedColorEffects и getSupportedFlashModes. Т.к. камера может вообще не поддерживать эти настройки.
Все сохраняем и запускаем приложение.
Видим такой экран
Попробуем применить цветовой эффект. Жмем спиннер Color Effect и видим варианты.
У вас, скорее всего, будут другие, это от камеры девайса зависит.
Я выберу negative и получаю такую картинку
Снова выберу цветовой эффект none.
Теперь проверим режимы вспышки. Жмем Flash Mode.
аuto – камера сама решит, использовать ей вспышку или нет
on – вспышка будет использована при снимке
off — вспышка не будет использована при снимке
torch – режим фонарика
Я выберу torch и вспышка начинает гореть, это видно в отражении монитора.
Почти все остальные настройки меняются по такому же алгоритму. Я не буду все их рассматривать. Если будут какие-либо вопросы по ним, давайте обсуждать на форуме.
Есть пара особенных настроек, с другим алгоритмом. О них поговорим. Примеры тут у меня не получится сделать, поэтому без них. Буду использовать код и картинки из хелпа.
Замер света и фокус
Для хорошей съемки камере надо:
— знать на чем фокусироваться, чтобы не получить размытую картинку
— определить уровень освещенности, чтобы не получить пересвеченную или затемненную картинку.
Мы можем указать те области экрана, которые будут использоваться для этих целей. В хелпе приводится пример задания областей замера света.
Здесь мы получаем камеру и ее параметры. Методом getMaxNumMeteringAreas определяем, кол-во областей, которое сможет учитывать камера. Если значение = 0, то эта функция не поддерживается.
Затем создаем список и помещаем в него пару областей. Область представляет из себя Rect-объект. Он должен лежать в пределах от -1000,-1000 до 1000,1000. Т.е. превью камеры представлено как система координат, у которой центр (0,0) находится в центре экрана и обе оси по обоим направлениям имеют длину 1000. И в этой системе мы задаем Rect.
Картинка из хелпа
На рисунке показано где будет расположен Rect с значениями 333,333,666,666.
Созданный Rect оборачивается в объект Camera.Area. При этом указывается вес, от 1 до 1000. Чем больше вес области, тем больше значения будет придаваться полученным из нее данным по замеру света.
Полученный список с двумя областями передаем параметрам камеры с помощью метода )» target=»_blank» rel=»noopener noreferrer»>setMeteringAreas. И в конце отдаем параметры камере.
С областями для фокуса аналогично. Метод getMaxNumFocusAreas дает нам кол-во поддерживаемых областей фокуса. Создаем список областей, указывая координаты и вес, и отдаем список методу )» target=»_blank» rel=»noopener noreferrer»>setFocusAreas.
Распознавание лиц
Для использования этой опции нам необходимо в приложении выполнить следующие действия:
— определить, что такая опция поддерживается
— создать слушателя, который будет получать данные по распознанным лицам
— отдать этого слушателя камере
— включать режим определения лиц после каждого старта превью
Примеры кода из хелпа:
Это создание класса-слушателя, который реализует интерфейс Camera.FaceDetectionListener. В методе onFaceDetection будет получать сведения о распознанных лицах (Face) и выводит в лог координаты первого лица (атрибут rect). Правда, судя по хелпу, координаты эти будут не экранными, а из знакомой нам уже системы (-1000,-1000) – (1000,1000). Но тот же хелп любезно дает код для настройки матрицы преобразования с учетом расположения и поворота камеры.
Также Face имеет атрибуты:
id – идентификатор лица
leftEye – координаты центра левого глаза, может быть null
rightEye — координаты центра правого глаза, может быть null
mouth — координаты центра рта, может быть null
score – уверенность системы в том, что это реальное лицо. Варьируется от 0, до 100. Рекомендуется отфильтровывать лица, с score
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Настройка камеры на телефоне
Качество мобильных снимков зависит от того, как настроить камеру на телефоне Андроид. Делают это через родное ПО или сторонние приложения, загруженные с Google Play или интернета.
Как происходит настройка камеры на телефоне
Параметры камеры делят на :
- Основные — включают/отключают искусственный интеллект, вспышку, соотношение сторон фотоснимка.
- Ручные — изменяют выдержку, чувствительность, экспозицию и баланс белого.
Ручные настройки оставляют в моделях из среднего и флагманского диапазона, куда устанавливают продвинутые сенсоры. Владельцы бюджетных смартфонов довольствуются автоматическими параметрами, выставленными разработчиками.
В отдельных прошивках, юзерам доступно включение/отключение вспышки, зум и режим бьютификации.
Поскольку оригинальное ПО бывает недоработанным, пользователи прибегают к использованию решений из магазина приложений или Google-камере. Если первый вариант является универсальным, то второе представляет модификацию софта с устройства из линейки Google Pixel, оптимизированное под конкретную модель другими пользователями.
Теперь конкретно о настройках родной и сторонних камер на примере Meizu 16th.
Настройки предустановленной камеры
Вначале расскажем о базовых настройках, а затем о расширенных.
Основные настройки
Доступны в интерфейсе автоматического режима съемки и предлагают :
- Включение, отключение или автоматическую работу вспышки. Необходима, чтобы подсветить кадр в сумрачное, темное время суток или осветить темное помещение.
- Активация режима HDR — увеличивает динамический диапазон кадра, делая кадры насыщеннее. Снимки получаются менее естественными и требуют время на постобработку, склеивая серию фото в одно.
- Обратный отсчет — таймер на 3, 5 и более секунд перед созданием фотоснимка.
- Фильтры — набор встроенных фильтров, которые добавляют кадру синевы, делают его черно-белым или накладывают сепию.
- Режим бьютификации или мейкапа — устраняет дефекты кожи на лице, делая его ненатурально гладким.
Набор функций отличается от камеры, предустановленной в оболочку устройства.
Меню с настройками
Это отдельная вкладка, отмеченная иконкой шестеренки. Она включает активацию/деактивацию :
- Сетки — делит экран на блоки, выделяя середину сцены.
- Уровня — определяет, насколько завален объектив влево или вправо
- Даты на снимке — отметка в углу фото, когда был сделан кадр.
- Водяного знака — вотермарка с названием модели.
- Искусственного интеллекта — алгоритмы автоматически определяют сцену в кадре и выбирают настройки. Отличают людей, детей, животных, закат и прочее.
Отдельно устанавливают соотношение сторон фото, выбирая между классическими 4:3, 16:9 или современными 18/19/20:9.
На устройствах с поддержкой карт памяти, здесь выбирают накопитель, куда будут сохранять получившиеся кадры.
Дополнительные возможности
Сюда относятся не настройки, а выбор режима съемки. Во вкладку «Еще» попала :
- Панорама — увеличивает захват кадра.
- Сканер — распознает информацию, сокрытую в QR-кодах.
- Покадровая съемка — делает серию снимков с разницей в 0,5-5 секунд.
- Замедленная съемка — увеличивает частоту кадров, замедляя видео.
- Квадрат — делает кадр в формате 1:1.
- Ночной режим — делает беспрерывную серию фото, чтобы получить с них больше света в темное время суток.
В смартфонах с несколькими сенсорами реализовано переключение между широкоформатным, теле и макро объективом.
Ручной режим
Здесь пользователи самостоятельно меняют настройки камеры смартфона, а именно :
- Выдержку — время, за которое сенсор делает снимок.
- ISO — это светочувствительность (кадр будет темнее или светлее).
- Экспозицию — определяет долю света, которая попадает на сенсор.
- Фокус — настраивает фокусное расстояние от макро до бесконечного значения
- Баланс белого — цветокоррекция в зависимости от типа освещения (солнце, лампы).
Сторонний софт
На телефоне с Андроид настройка камеры, установленной производителем, иногда не способна сравниться с автоматической работой отдельных приложений.
Google Камера
Официально, этот софт выпускают для линейки Pixel от Google. Энтузиасты делают моды для популярных моделей от других производителей, которые выкладывают на тематических форумах. В зависимости от настроек, ПО заметно улучшает снимки и предлагает больше настроек:
- количество снимков для HDR+ режима;
- ограничение выдержи в разных типах съемки;
- разрешение снимков основной и фронтальной камеры;
- определить битрейт, разрешение и включить стабилизацию для видео;
- включить работу жестов, добавление геотегов, отметить папку для сохранения кадров.
Поскольку софт перенесен на другие устройства неофициально, часть функций не работает или камера автоматически сворачивается.
Работает решение от Google в сочетании со смартфонами на базе процессоров Snapdragon. Исключением выступает популярный Redmi Note 8 Pro с процессором MediaTek.
Приложения из магазина
Найти аналогичное Гугл Камере приложение в Play Маркет невозможно. Решения вроде B612 или Snapseed накладывают заготовленные фильтры и помогают повысить качество кадров их постобработкой.
Что влияет на качество фото
Коротко о том, что определяет конечное качество фото :
- Установленная матрица — ее физический размер и размер пикселя. Компактность смартфона вынуждает устанавливать миниатюрные матрицы, но уместить их в тонкий корпус невозможно, из-за чего они “торчат” с телефона.
- Размер апертуры — определяет сколько света, способно попасть на матрицу.
- Линзы.
- Наличие оптической, электронной или ИИ-стабилизации изображения.
- Софт, завязанный на мощностях устройства, которые определяет установленный чипсет.
Разрешение камеры не влияет на качество снимков, но помогает получить больше информации из кадра.
Настройка камеры на смартфонах Android не занимает много времени, но требует знаний фотографии от пользователя. Кто хочет получить максимум от снимков, должны воспользоваться ручными настройками или попробовать Google Камеру.
Источник