API расширений Google CameraX позволяет сторонним приложениям камеры использовать некоторые из лучших функций стандартного приложения камеры.
В Интернете давно ходит шутка: по тому, кто пользуется телефоном Android, можно узнать, плохое качество их селфи. Хотя мемы определенно немного преувеличивают, к сожалению, в них есть доля правды. Телефоны Android обычно опережают iPhone по производительности камеры, по крайней мере, на бумаге. OEM-производители, такие как LG и Samsung, обычно используют камеры с большим количеством пикселей и большей апертурой, чем конкурирующие iPhone. Однако характеристики — это еще не все. Частично Apple может конкурировать в игре с камерами благодаря программному обеспечению iOS. Все OEM-производители, от Apple до ZTE, используют магию программного обеспечения, чтобы фотографии и видео выглядели лучше. Компании используют алгоритмы для уменьшения шума, настройки насыщенности и контрастности цвета и даже осветления темных сцен, чтобы сделать конечные результаты более приятными. Исторически сложилось так, что OEM-производители Android отстают от Apple.
Разработка программного обеспечения
Однако совсем недавно ситуация начала меняться. Самым ярким примером этих изменений, вероятно, являются Google и линейка Pixel. С точки зрения аппаратного обеспечения камеры Pixel действительно не могут сравниться с другими флагманами. Программное обеспечение — это то, где Google компенсирует разницу. Благодаря таким функциям, как портретный режим, ночной прицел, HDR+ и Super Res Zoom, Pixels заслужили репутацию обладателя некоторых из лучшие камеры смартфонов на рынке.
Другие производители Android следуют примеру Google. Samsung, OPPO, Xiaomi, Vivo, OnePlus и т. д. представили свои собственные версии наиболее популярных функций камеры Pixel, и у них даже есть некоторые собственные уникальные функции. Используя такие модные слова, как «ИИ» и «машинное обучение», производители Android пытаются убедить вас, что их программное обеспечение — это то программное обеспечение, которое вы хотите улучшить свои фотографии и видео. Мы подошли к моменту, когда телефоны Android могут по-настоящему конкурировать с iPhone во всех аспектах производительности камеры.
Проблема
К сожалению, есть еще одно серьезное исключение: сторонние приложения. Ваш супер-пупер флагман с 50 камерами может делать потрясающие фотографии с помощью встроенного приложения камеры, но переключитесь на Instagram, Snapchat или даже стороннее приложение для камеры, и это, по сути, гарантия того, что то, что вы снимаете, не будет выглядеть так же, как хороший. Как будто этого было недостаточно, вы также теряете все интересные функции и режимы камеры. Это связано с тем, что, в отличие от iOS, Android на самом деле не имеет единой платформы камеры. Конечно, основные функции есть. Стороннее приложение по-прежнему может снимать фотографии и видео, а также использовать вспышку. Но что произойдет, если у вашего телефона есть дополнительный датчик для широкоугольного или телеобъектива? Вполне возможно, что разработчики смогут получить доступ к этому второму датчику, но используемый ими метод должен быть специфичным для вашего устройства.
Допустим, у вас есть LG V40 (я знаю, знаю, просто представьте, что он у вас есть). V40 имеет три датчика: стандартный, телеобъектив и сверхширокоугольный. Встроенное приложение камеры без проблем переключается между всеми этими датчиками. Но забудьте об использовании сверхширокого сенсора в Instagram. Теперь Instagram может взглянуть на то, как приложение камеры LG использует различные датчики, и разработать способ, позволяющий пользователям делать широкоугольные снимки или снимки с увеличением. Но это, вероятно, будет работать только на LG V40. Несмотря на то, что Galaxy S10 имеет те же три режима сенсора (стандартный, телеобъектив и сверхширокоугольный), команде Instagram придется разработать для Samsung другой метод.
Теперь добавьте к этой смеси Huawei, Vivo, OnePlus, Xiaomi, OPPO, Nokia, ZTE, HTC и любые другие бренды, о которых вы только можете подумать. Как вы можете себе представить, попытка разработать метод доступа только к потенциальным дополнительным датчикам для каждого телефона каждой марки может оказаться невероятно утомительной. И тогда вам придется поддерживать совместимость со всеми текущими и новыми телефонами.
Эти ограничения также касаются функций камеры. Такие вещи, как портретный режим, ночной прицел и HDR+, либо требуют использования специальных методов для каждого устройства, либо полностью недоступны для сторонних приложений.
Очевидно, для такого приложения, как Instagram, это не так уж важно. Это не их задача, и вы всегда можете использовать приложение камеры вашего телефона, чтобы сделать снимок первым. А как насчет специальных приложений для камеры?
Эффекты
Откройте Google Play Store и найдите «камера». Вы найдете сотни результатов. Даже несмотря на улучшения в программном обеспечении камер, сторонние приложения для камер по-прежнему очень популярны. Некоторые стремятся предоставить больше технических функций, таких как ручная экспозиция и фокусировка (функций, которых может не быть в приложении камеры вашего телефона). Другие стремятся обеспечить единообразный UX на всех ваших устройствах.
Особенно по последней причине фрагментация камеры Android может невероятно затруднить разработку и поддержку широко совместимого приложения камеры. Если вы хотите предоставить дополнительные функции, как вы собираетесь включить все потенциальные функции всех потенциальных сторонних приложений? Если вы ищете стабильное качество изображения, как вы можете реально гарантировать, что доступ к широкоугольному датчику на каждом устройстве, на котором он есть, будет работать?
Ответ: вы не можете. Вы можете попытаться поддержать как можно больше функций на как можно большем количестве устройств, но в конечном итоге это будет большой труд за относительно небольшое вознаграждение. Нетрудно представить, что по крайней мере несколько разработчиков просто отказались от создания полнофункционального приложения для камеры для Android. На самом деле, у некоторых это было.
Потери
Найдите приложения для камеры в Play Store. Вы заметите несколько вещей. Во-первых, есть много вариантов. Во-вторых, большинство из них делают очень похожие вещи (применяют фильтры постфактум и тому подобное). В-третьих, более продвинутые параметры, вероятно, обновляются не так часто. Вы даже можете найти в Google результаты, которых больше нет в магазине.
Недавно мы получили довольно яркий пример того, как кто-то заявил, что уходит. Компания Moment решила прекратить разработку приложения Pro Camera для Android.
Приложение Pro Camera от Moment призвано добавить в Android расширенные функции фото и видео. Это лишь некоторые из этих особенностей:
- RGB-гистограммы
- Разделить фокус
- Ручное управление экспозицией, ISO, выдержкой, балансом белого.
- Фокус-пикинг
- Захват RAW
- Динамические изменения частоты кадров и разрешения
Проблема в том, что многие из этих функций просто не работают на многих устройствах. Просмотр списка совместимости функций Moment похож на просмотр изображения танцпола. Даже в пределах одной линейки продуктов поддержка функций невероятно фрагментирована. После двух лет разработки у Moment больше нет возможности продолжать разработку своего приложения.
Зеленый = поддерживается камерой Moment Pro. Желтый = поддерживается устройством, но не моей камерой Moment Pro. Красный = не поддерживается устройством. Источник изображения: Момент. Получено через: 9to5Google.
Решение?
Прошло почти 12 лет с момента первого выпуска Android, но, возможно, мы наконец-то нашли решение проблемы фрагментации камеры.
Это решение исходит непосредственно от Google, хотя оно не встроено непосредственно в Android. Вместо этого это Библиотека поддержки Jetpack. Если вы знакомы с разработкой приложений для Android, вы, вероятно, сталкивались с наборами библиотек поддержки AppCompat и AndroidX. Эти библиотеки от Google призваны облегчить разработчикам поддержку обратной совместимости со старыми версиями Android, сохраняя при этом возможность внедрять новые функции и стили.
Новым дополнением к Jetpack (вроде как) является библиотека CameraX. Как и в случае с другими библиотеками Jetpack, цель CameraX — упростить разработку камеры. В своей самой простой форме CameraX является оболочкой Android. Камера2, API, который позволяет приложениям проверять функции камеры на устройстве при условии, что OEM-производитель предоставляет эти функции камеры API. Пользователи могут проверить, какие функции камеры доступны API Camera2, с помощью приложения Camera2 API Probe, а затем сравнить их с функциями, доступными в стандартном приложении камеры.
Цена: Бесплатно.
4.2.
Преимущество использования CameraX в качестве оболочки для API Camera2 заключается в том, что внутри него решаются любые проблемы совместимости с конкретным устройством, которые могут возникнуть. Уже одно это будет полезно для разработчиков приложений для камер, поскольку позволит сократить шаблонный код и время, затрачиваемое на исследование проблем с камерой. Однако это еще не все, на что способна CameraX.
Хотя первая часть в основном интересна только разработчикам, есть еще одна часть, которая применима как к разработчикам, так и к конечным пользователям: Расширения поставщиков. Это ответ Google на фрагментацию функций камеры на Android. Производители устройств могут поставлять со своими телефонами библиотеки расширений, которые позволяют CameraX (а также разработчикам и пользователям) использовать встроенные функции камеры. Например, предположим, вам очень нравится эффект портретного режима Samsung, но вам не нравится само приложение камеры. Если Samsung решит реализовать расширение портретного режима CameraX в своих телефонах, любое стороннее приложение, использующее CameraX, сможет использовать портретный режим Samsung. Очевидно, дело не ограничивается одной этой особенностью. Производители теоретически могут открыть любые функции своей камеры для приложений с помощью CameraX.
К сожалению, есть нюанс, о котором я упоминал ранее: это не является обязательным требованием для производителей. Google говорит они будут поддерживать расширения на всех новых и будущих устройствах Pixel, начиная с Pixel 4. ОППО говорит они открыли режимы Beauty и HDR. Другие OEM-производители могут сделать для CameraX доступными только свои ночные режимы или вообще не внедрять какие-либо расширения. Производитель полностью решает, какое устройство поддерживает какие расширения CameraX (если таковые имеются). Google используется для ведения списка устройств которые поддерживают расширения поставщиков и какие функции камеры они открыли, но они не обновляли список в течение последних нескольких месяцев. Несколько недель назад мы обратились к Google с вопросом, могут ли они предоставить обновленный список, но компания еще не ответила списком. Чего бы это ни стоило, недавняя запись в блоге Google утверждает, что устройства Samsung, LG, OPPO, Xiaomi и Motorola (на Android 10) предоставляют некоторые расширения функции, но в сообщении блога не указано, какие именно устройства поддерживаются и какие функции они предоставлять.
Если достаточное количество производителей решат внедрить расширения, сцена сторонних камер Android станет намного ярче. Разработчикам не придется тратить время на повторную реализацию функции камеры для каждого возможного устройства, поскольку об этом позаботится инфраструктура CameraX. Будет меньше фрагментации функций, поскольку аналогичные функции на всех устройствах будут доступны через общий интерфейс. И есть еще много возможностей.
Конечно, все это зависит от способности Google убедить производителей внедрять библиотеки расширений CameraX Vendor Extension в будущем. Если CameraX не будет широко внедрена, это лишь усилит текущую фрагментацию. Хотя лично я надеюсь. Google может быть очень убедительным, когда хочет, и кажется, что над CameraX ведется большая работа. Приятно видеть возможное решение проблем с камерой Android на горизонте, и я с нетерпением жду возможности увидеть, как CameraX будет улучшаться и расширяться с течением времени.
Что вы думаете о CameraX? Удастся ли Google создать унифицированную камеру для Android?