API розширень постачальника CameraX від Google дає змогу стороннім програмам камери використовувати деякі з найкращих функцій стандартної програми камери.
В Інтернеті ходить жарт про те, що можна визначити, чи хтось користується телефоном Android погана якість своїх селфі. Хоча меми, безумовно, трохи перебільшують, у них, на жаль, є частка правди. Телефони Android зазвичай випереджають iPhone з точки зору продуктивності камери, принаймні на папері. Такі OEM-виробники, як LG і Samsung, як правило, використовують камери з більшою кількістю пікселів і більшою діафрагмою, ніж у конкуруючих iPhone. Проте характеристики - це ще не все. Частина причин, чому Apple може конкурувати в грі камери, полягає в програмному забезпеченні iOS. Усі OEM-виробники, від Apple до ZTE, використовують магію програмного забезпечення, щоб зробити фотографії та відео кращими. Компанії використовують алгоритми для зменшення шуму, налаштування насиченості кольорів і контрастності та навіть освітлення темних сцен, щоб зробити кінцеві результати приємнішими. Історично це місце, де OEM-виробники Android поступалися Apple.
Розробка програмного забезпечення
Однак нещодавно все почало змінюватися. Найбільшим прикладом цієї зміни, мабуть, є Google і лінійка Pixel. З точки зору апаратного забезпечення, камери Pixel дійсно не можуть зрівнятися з іншими флагманами. Проте програмне забезпечення – це те, де Google компенсує різницю. Завдяки таким функціям, як «Портретний режим», «Нічне бачення», «HDR+» і «Super Res Zoom», Pixels заслужили репутацію володарів деяких із найкращі камери смартфонів на ринку.
Інші OEM-виробники 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 і введіть слово «камера». Ви знайдете сотні результатів. Навіть з удосконаленнями в програмному забезпеченні камери перших розробників сторонні додатки камери все ще дуже популярні. Деякі мають на меті надати більше технічних функцій, як-от ручну експозицію та фокус (функції, яких може не мати програма камери вашого телефону). Інші прагнуть забезпечити узгоджений UX на ваших пристроях.
Особливо з останньої причини фрагментація камери Android може неймовірно ускладнити розробку та підтримку широкосумісної програми камери. Якщо ви хочете надати додаткові функції, як ви збираєтеся включити всі потенційні функції всіх потенційних додатків першої сторони? Якщо ви шукаєте постійний досвід, як ви можете реалістично гарантувати, що доступ до ширококутного датчика на кожному пристрої, який його має, працюватиме?
Відповідь: не можна. Ви можете спробувати підтримувати якомога більше функцій на якомога більшій кількості пристроїв, але врешті-решт це потребуватиме великої праці за відносно невелику винагороду. Неважко уявити, що принаймні кілька розробників просто відмовилися від створення повнофункціональної програми камери для Android. Насправді, кілька мають.
Загиблі
Виконайте пошук програм для камери в Play Store. Ви помітите кілька речей. Один, є багато варіантів. По-друге, більшість із них роблять досить схожі речі (застосовують фільтри постфактум тощо). По-третє, більш розширені параметри, ймовірно, не оновлюються так часто. Ви навіть можете знайти в Google результати, яких більше немає в магазині.
Нещодавно ми отримали досить серйозний приклад того, як хтось кидає справу. Компанія Moment вирішила припинити розробку програми Pro Camera для Android.
Додаток Moment Pro Camera має на меті запровадити розширені функції фото та відео на Android. Це лише деякі з цих функцій:
- RGB гістограми
- Розділений фокус
- Ручне керування експозицією, ISO, витримкою, балансом білого
- Підкреслення фокуса
- Захоплення RAW
- Динамічні зміни частоти кадрів і роздільної здатності
Проблема в тому, що багато з цих функцій просто не працюють на багатьох пристроях. Дивитися на список сумісних функцій Moment — це все одно, що дивитися на зображення танцполу. Навіть у межах однієї лінійки продуктів підтримка функцій неймовірно фрагментована. Після двох років розробки Moment більше не має можливості продовжувати розробку свого додатка.
Зелений = підтримується камерою Moment Pro. Жовтий = підтримується пристроєм, але не моєю камерою Moment Pro. Червоний = не підтримується пристроєм. Джерело зображення: Момент. Отримано через: 9to5Google.
Рішення?
Минуло майже 12 років з моменту першого випуску Android, але ми нарешті можемо знайти рішення проблеми фрагментації камери.
Це рішення безпосередньо від Google, хоча воно не вбудовано безпосередньо в Android. Натомість це a Бібліотека підтримки Jetpack. Якщо ви знайомі з розробкою додатків для Android, ви, напевно, стикалися з пакетами бібліотек підтримки AppCompat і AndroidX. Ці бібліотеки від Google спрямовані на те, щоб розробникам було легше підтримувати зворотну сумісність зі старішими версіями Android, і водночас мати можливість запроваджувати нові функції та стилі.
Новішим доповненням до Jetpack (начебто) є бібліотека CameraX. Подібно до інших бібліотек Jetpack, мета CameraX — полегшити розробку камери. У своїй основній формі CameraX огортає Android Камера2, API, який дозволяє програмам досліджувати функції камери на пристрої за умови, що OEM надає ці функції камери API. Користувачі можуть перевірити, які функції камери доступні Camera2 API за допомогою програми Camera2 API Probe, а потім порівняти це з функціями, доступними в стандартній програмі камери.
Ціна: безкоштовно.
4.2.
Перевага використання CameraX як оболонки для Camera2 API полягає в тому, що він внутрішньо вирішує будь-які проблеми сумісності, пов’язані з пристроєм, які можуть виникнути. Одне лише це буде корисно для розробників додатків камери, оскільки це може зменшити шаблонний код і час, витрачений на дослідження проблем камери. Але це ще не все, що CameraX може зробити.
Хоча перша частина цікава лише розробникам, є інша частина, яка стосується як розробників, так і кінцевих користувачів: Розширення постачальника. Це відповідь Google на фрагментацію функції камери на Android. Виробники пристроїв можуть постачати бібліотеки розширень зі своїми телефонами, які дозволяють CameraX (а також розробникам і користувачам) використовувати власні функції камери. Наприклад, скажіть, що вам дуже подобається ефект портретного режиму Samsung, але вам не подобається сама програма камери. Якщо Samsung вирішить застосувати розширення CameraX Portrait Mode у своїх телефонах, будь-яка стороння програма, що використовує CameraX, зможе використовувати портретний режим Samsung. Очевидно, це не обмежується лише цією однією функцією. Виробники теоретично можуть відкрити будь-які функції камери для додатків за допомогою CameraX.
На жаль, є застереження, про яке я згадував раніше: це не є вимогою для виробників. Google каже вони підтримуватимуть розширення на всіх нових і майбутніх пристроях Pixel, починаючи з Pixel 4. OPPO каже вони відкрили свої режими Beauty та HDR. Інші OEM-виробники можуть зробити доступними для CameraX лише свої нічні режими або взагалі не застосовувати жодних розширень. Виробник повністю залежить від того, який пристрій підтримує які розширення CameraX (якщо такі є). Google використовується для підтримки списку пристроїв які підтримують розширення постачальників і які функції камери вони відкривають, але вони не оновлювали список протягом останніх кількох місяців. Кілька тижнів тому ми звернулися до Google із запитом, чи можуть вони надати оновлений список, але компанія ще не відповіла, надавши список. Скільки це варте, a остання публікація в блозі Google стверджує, що пристрої від Samsung, LG, OPPO, Xiaomi та Motorola (на Android 10) забезпечують певне розширення функції, але в дописі блогу не вказано, які саме пристрої підтримуються або які вони функції забезпечити.
Якщо достатньо виробників вирішать застосувати розширення, сцена сторонніх камер Android стане набагато яскравішою. Розробникам не доведеться витрачати час на повторну реалізацію функції камери для кожного пристрою, який вони можуть мати, оскільки платформа CameraX подбає про це. Буде менше фрагментації функцій, оскільки схожі функції на різних пристроях будуть доступні через спільний інтерфейс. І є багато інших можливостей.
Звичайно, все це залежить від здатності Google переконати виробників запровадити бібліотеки розширень CameraX Vendor Extension у майбутньому. Якщо CameraX не буде широко реалізовано, це лише посилить поточну фрагментацію. Проте особисто я сподіваюся. Google може бути дуже переконливим, коли хоче, і здається, що CameraX докладає багато роботи. Дуже приємно бачити можливе вирішення проблем із камерою Android на горизонті, і я з нетерпінням чекаю, як CameraX покращиться та розшириться з часом.
Що ви думаєте про CameraX? Чи вдасться Google створити єдину камеру для Android?