Как выжать максимум из мобильной оптики с помощью PhotonCamera

27 авг 2026
333
29
5
2 недели

Google Play

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

Недавно я наткнулся на интересный проект bjzhou/PhotonCamera. Автор попытался решить эту дилемму и превратить смартфон в инструмент, похожий на беззеркальную камеру, где упор сделан на художественный цвет и полный контроль над процессом съемки.

Что внутри и зачем это разработчикам

PhotonCamera — это open-source приложение для статичной фотографии под Android 11 и новее. Проект написан на Kotlin с интерфейсом на Jetpack Compose, а под капотом трудится стандартный Camera2 API вместе с шейдерами для шейдинга в реальном времени.

Зачем вообще изучать еще одно приложение камеры?

Реклама

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

Необычные инженерные решения

В репозитории есть несколько фич, на реализацию которых определенно стоит взглянуть в коде.

Работа с LUT и цветовыми профилями на лету

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

Приложение читает файлы .cube, профили .xmp и растровые таблицы .png (форматов halfs и fulls). Картинка на экране смартфона строго соответствует тому кадру, который сохранится в галерею. Это дает честный WYSIWYG без задержек видоискателя.

Режим Phantom Mode для обхода ограничений вендоров

Одна из главных болей сторонних камер на Android — агрессивный овершарпенинг или, наоборот, мыльная картинка, когда система отдает сырой кадр без аппаратной доводки.

Чтобы обойти это, автор придумал режим Phantom Mode. Приложение связывается с механизмом захвата системной камеры, забирает качественный исходник без артефактов и сразу прогоняет его через собственный движок цветокоррекции. В итоге кадр не теряет детализацию вендорской обработки, но приобретает нужный вам профиль тонирования.

Живые фото на устройствах разных брендов

Если вы пробовали делать Motion Photos в своем приложении, то знаете, какой это зоопарк. У Samsung свой формат упаковки видео в контейнер JPEG, у Xiaomi — свой, у Google Pixel — третий.

PhotonCamera содержит адаптеры для склейки коротких видеороликов со статичными снимками под спецификации основных производителей. Для открытых проектов это пока редкая находка, так как обычно разработчики бросают эту затею из-за зоопарка форматов.

ИИ-модели прямо на устройстве

В проект встроена модель midas-v2 для оценки карты глубины сцены. Она считает глубину локально, без отправки данных на сервер, причем автор оптимизировал ее исполнение под чипы Qualcomm. Это дает возможность симулировать размытие диафрагмы с мягким переходом, а не грубой маской вокруг силуэта.

Также автор экспериментирует с технологией Google Nano Banana 2. Она анализирует референсную фотографию, оценивает исходный цветовой баланс и генерирует кастомный LUT прямо на телефоне.

Как устроен стек

Архитектура проекта выглядит достаточно лаконично:

  • Язык: Kotlin
  • Пользовательский интерфейс: полностью на Jetpack Compose
  • Работа с сенсором: Camera2 API
  • Минимальная версия системы: Android 11 (API level 30)

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

Присутствует и мультифреймовый стек для шумоподавления и супер-разрешения. Несколько экспозиций объединяются в один снимок, сохраняя микроконтраст текстур.

Где это может пригодиться

Если вы разрабатываете приложение для съемки документов, карточек товаров или просто хотите добавить в свой проект видоискатель с фильтрами, код PhotonCamera сэкономит вам недели экспериментов.

Вот несколько сценариев, когда стоит заглянуть в репозиторий:

  1. Нужно разобраться с шейдерами OpenGL или Vulkan для превью камеры в реальном времени.
  2. Требуется поддержка импорта .cube и .xmp файлов в мобильном приложении.
  3. Стоит задача подружить проект с Motion Photos под разные оболочки Android.
  4. Вы ищете пример связки Jetpack Compose с низкоуровневым Camera2 API без использования CameraX.

В сухом остатке

PhotonCamera — наглядный пример того, как энтузиаст в одиночку может собрать функциональный и красивый инструмент вокруг капризного системного API. Проект еще развивается, звезд на GitHub пока немного, а документация в основном сведена к краткому описанию возможностей.

Но если вам интересна мобильная фотография, обработка изображений на GPU или чистая реализация камеры на Compose — клонируйте репозиторий и изучайте код. Там есть чему поучиться.

🍪 Мы используем файлы cookie и сервис аналитики Яндекс.Метрика, чтобы сайт работал лучше. Продолжая пользоваться devtrends.ru, вы соглашаетесь с обработкой данных согласно Политике конфиденциальности.