Нічне бачення тепер доступне і для Android

Усі статті, обговорення, новини про Mobile — в одному місці. Підписуйтеся на телеграм-канал!

В решті-решт вдалось реалізувати Green Night для платформи Android. Для тих, хто не знає що це, можна почитати мої попередні статті 1 і 2

Android vs iOS

Почавши розробку на Андроїд я одразу був здивований, що для роботи із камерою там цілий зоопарк бібліотек 🙃, на відмінно від iOS де все відбувається в рамках однієї AVFoundation.

Спочатку мій вибір впав на CameraX у парі із Jetpack Compose. Але дуже швидко стало ясно що ця бібліотека не зможе задовільнити усіх потреб для такої нестандартної задачі, тому я перейшов на Сamera2, і, наскільки я зрозумів, вона не дружить із Compose (можу помилятись, новачок в Андроїді), тому прийшлось вивчати класичний UI тулкіт із блек-джеком та XML-ями.

Другою відмінністю Андроїда від iOS стало те, що будь-яке налаштування камери вимагає відключення автоналаштуваннь, інакше телефон корегує все під свій лад. І це на початку дуже збивало з толку 😅

Наприклад для налаштування експозиції треба обовʼязково відключати автоекспозицію CONTROL_AE_MODE = CONTROL_AE_MODE_OFF

// Без першого рядка ніяк!
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraCharacteristics.CONTROL_AE_MODE_OFF) 
val aeCompensationRange = cameraCharacteristics.get(CameraCharacteristics.CONTROL_AE_COMPENSATION_RANGE)
val maxExposureCompensation = aeCompensationRange?.upper ?: 0
captureRequestBuilder.set(CaptureRequest.CONTROL_AE_EXPOSURE_COMPENSATION, maxExposureCompensation)

Результат

Наразі додаток веде себе по різному. Десь не може використовувати довгу витримку, особливо це помітно для телефонів Samsung. На Google Pixel картинка не стає зеленою, але все ж таки щось більш-менш працююче вдалось створити. Якщо б в коментарях хтось відписав такі данні:

  • число витримки (у верхньому лівому куті)
  • кольорову гаму (зелене чи кольорове)
  • модель телефона

То це б могло дуже допомогти тестуванню.

Вже після релізу я знайшов інформацію, що багато залежить від INFO_SUPPORTED_HARDWARE_LEVEL — це така змінна, яка показує, наскільки повноцінно виробник телефона реалізував API керування камерою.

Висновки

Наразі зробив висновки що створювати такі речі під Андроїд значно важче, ніж під iOS, адже кожен виробник смартфонів надає різні можливості, і різну поведінку камери, а у Huawei навіть є власна бібліотека для розширеного керування камерою 😀. Все це створює великі труднощі, і певно для Андроїд треба тримати більший штат розробників і тестувальників, аніж для iOS

Скачати додаток можна за посиланням:

play.google.com/...​s?id=ua.ribbon.greennight

UPD. ВАЖЛИВО: використовувати додаток треба на вулиці вночі, або в напівзачиненій кімнаті. Інакше в день ви побачите просто білий екран, а в абсолютній темряві — просто чорний

👍ПодобаєтьсяСподобалось1
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

А шо, всьо? Плеймаркет каже 404

100, темний шумний екран, Samsung S10e
У тій же самій кімнаті штатна камера з нічним режимом дала темну фотку, на якій можна відрізнити контури меблів — майже те саме, що видно очима.
Також програма вішається при запуску через раз і її треба вигружати через кнопку таск менеджера.

1000, кольорове на Xiaomi Redmi 8 Pro/Poco F3

1000, кольорове, Xiaomi Mi 9T

При всій повазі до ідеї, але ж нічне бачення працює на інфрачервоних камерах. Наче як.

При всій повазі до ідеї, але ж нічне бачення працює на інфрачервоних камерах. Наче як.

Ввімкніть камеру на телефоні і наведіть на інфрачервоний діод пульта від будь-якого девайсу, а потім натисніть кнопку на пульті.
Результат все пояснить))

Не обов’язково. Ближній інфрачервоний діапазон потрібен, щоб мати можливість використовувати непомітну ІЧ підсвітку. А в даному випадку задача полягає у підсиленні існуючого освітлення, без додаткових підсвіток.

216, білий екран, CAT S62pro

Дякую! спробуйте вночі на вулиці

це було у закритій кладовці без вікон, у майже повній темряві
але вночі спробую

Можливо треба перезапустити апку?

Ніт, бо я її взагалі видаляв

Motorola Moto G8 Power
Android 11

Білий екран та цифри 480 у лівому верхньому кутку :(

Дякую! Спробуйте вночі на вулиці, зображення має з’явитись в темряві

Додаток працює в залежності від часу доби? Я зайшов у темну кімнату — і те саме.
Якщо я тапаю по екрану, то додаток крашиться з попапом «crashed»

Цікаво🤔подумаю над тим, мав би просто збільшувати картинку по тапу двома пальцями в різні сторони

3 години ночі, у кімнаті світяться тільки миша та клавіатура, та ще через штори ліхтар вуличний

Не працює, білий екран :-(

Лог твоя апка пише? З такими репортами що тут понаписали треба збирати у лог усе що є. Зроби нову версію з віконцем окремим))

Подумаю над тим🤔 дякую за такі розширені фідбеки 🤝! Але все ж таки щє рекомендую спробувати на вулиці у темний час доби. Судячи із спостеріганнь, треба все ж таки мати 1000- мілісекунду витримку, щоб хоч якось помітно підсилити рівень яскравості

походу глаз будет видеть лучше

Sony Xperia 1 III, 1000, білий екран, але якщо піднести руку до камери, то її стає видно в кольорі. В темряві чорний екран.

1000 кольорово-рожеве. Lg g8s. 12 Android

В темряві чорний, при денно світлі — білий, через витримку пересвічує повінстю картинку.

Спробуйте вночі на вулиці, або в напівзачиненій ванній кімнаті

Перепрошую, але так і не зрозумів де там нічне бачення.

число витримки (у верхньому лівому куті)
кольорову гаму (зелене чи кольорове)
модель телефона

100. все зелене. samsung s20.

Дякую за інформацію. Ну я так розумію, виходячи із спостерігань, Самсунги напевно всі мають обрізаний рівень доступа до камери, і не дають довгої експозиції

Підписатись на коментарі