CameraX: що це, CameraX API та як працює камера

Автор: IT Sectr Опубліковано: 2026-03-26 Час читання: 8 хв

CameraX — бібліотека Android Jetpack для роботи з камерою, що надає простий та консистентний API поверх складного Camera2. Вона абстрагує відмінності між сотнями моделей Android-пристроїв і гарантує однакову поведінку камери на різному апаратному забезпеченні. Згідно з Android Developer CameraX Guide (2026), бібліотека використовується в 25 000+ додатках Google Play і працює на пристроях з API Level 21 і вище.

Головне

  • CameraX — бібліотека Jetpack для Android-камери з use case API: Preview, ImageCapture та ImageAnalysis
  • Use case-архітектура звільняє розробника від ручного керування сесією та станами камери
  • CameraX Extensions додають портретний режим, HDR та нічне знімання на пристроях, де це підтримується
  • Безпека типів — CameraX перевіряє сумісність use cases через ProcessCameraProvider
  • Сумісність з 99% Android-пристроїв починаючи з Android 5.0 (API 21)

Що таке CameraX?

CameraX — це бібліотека зі складу Android Jetpack, вперше випущена Google у 2019 році як заміна застарілому Camera API та спрощена альтернатива складному Camera2. Основна філософія CameraX — «напиши один раз, працює на всіх пристроях». Бібліотека автоматично обробляє апаратні відмінності: розташування камер, підтримувані роздільні здатності, орієнтацію сенсора та доступні формати — розробнику не потрібно писати device-specific код.

Архітектура CameraX побудована на use cases: Preview (показ зображення з камери у Viewfinder), ImageCapture (знімання фотографій), ImageAnalysis (аналіз потоку кадрів для ML) та VideoCapture (запис відео). Кожен use case — це незалежний компонент, який можна комбінувати: одночасно запускати Preview для видошукача та ImageAnalysis для ML-обробки. За даними Google (2026), CameraX підтримується на 99% Android-пристроїв з API 21+.

Основні можливості

CameraX надає автоматичне перемикання між передньою та задньою камерами, підтримку повороту екрана без перестворення сесії, вбудовану обробку життєвого циклу через LifecycleOwner, прив'язку use cases до одного процесу Lifecycle, підтримку Camera2 Extensions для портрета, HDR та нічного режиму, а також TestableCameraX для unit-тестування без реального пристрою.

Use cases CameraX

CameraX визначає чотири стандартних use case, кожен з яких вирішує конкретне завдання роботи з камерою. Use cases можна комбінувати: найпопулярніші зв'язки — Preview + ImageCapture для камери та Preview + ImageAnalysis для ML-сканера.

Use caseПризначенняКлас
PreviewВідображення зображення камери в реальному часіPreviewView
ImageCaptureЗнімання фотографій з налаштуваннями спалаху та роздільної здатностіImageCapture
ImageAnalysisАналіз кожного кадру для ML-обробкиImageAnalysis
VideoCaptureЗапис відео з мікрофоном (з 1.1.0-beta)VideoCapture

Preview

Preview use case відображає відеопотік з камери в PreviewView — спеціальному View з бібліотеки CameraX. PreviewView автоматично підлаштовується під співвідношення сторін камери, підтримує ScaleType (FillCenter, FitCenter) та поворот екрана без перестворення use case. Розробнику потрібно лише прив'язати Preview до Lifecycle через ProcessCameraProvider.

ImageAnalysis

ImageAnalysis use case передає кожен кадр з камери в обробник для аналізу: розпізнавання тексту, виявлення облич, сканування QR-кодів. Аналізатор отримує кадри у форматі YUV_420_888 — універсальному кольоровому просторі Android. Режим роботи (BLOCKING або NON_BLOCKING) керує чергою кадрів: BLOCKING очікує завершення попереднього аналізу, NON_BLOCKING пропускає кадри при затримці.

ImageCapture

ImageCapture use case робить фотографії з камери з налаштуваннями спалаху, роздільної здатності та стиснення. Підтримуються формати JPEG та RAW (на сумісних пристроях). ImageCapture зберігає знімок асинхронно через OnImageCapturedCallback або безпосередньо у файл через ImageCapture.OutputFileOptions.

VideoCapture — запис відео

VideoCapture use case доданий у CameraX 1.1.0 (бета) та дозволяє записувати відео з роздільністю до 4K при 30 FPS. Use case автоматично синхронізується з Preview: зображення у видошукачі відповідає тому, що записується у файл. VideoCapture використовує MediaCodec та MediaMuxer всередині, приховуючи складність налаштування відеокодека та контейнера MP4.

CameraX vs Camera2

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

ХарактеристикаCameraXCamera2
Рівень APIВисокий (use case)Низький (повний контроль)
Device-specific кодНе потрібенПотрібен для кожного пристрою
Прив'язка до LifecycleАвтоматичнаРучна
РозширенняВбудовані (HDR, Portrait, Night)Вимагають OEM-реалізації
Складність впровадження15–30 рядків коду100–300 рядків коду
Підтримка APIAPI 21+API 21+
ГнучкістьСтандартні сценаріїБудь-які сценарії

Використовуйте CameraX для стандартних завдань: камера в додатку, сканер QR, ML-обробка потоку. Використовуйте Camera2, коли потрібне ручне керування експозицією, RAW-знімання з повним контролем параметрів, робота з кількома камерами одночасно.

Приклади коду на Kotlin

Розглянемо повне налаштування CameraX у Android-додатку з використанням усіх трьох основних use cases: Preview, ImageCapture та ImageAnalysis.

Налаштування ProcessCameraProvider

Код прив'язує CameraX до Lifecycle Activity через ProcessCameraProvider. Спочатку запитується екземпляр провайдера, потім створюються use cases і виконується прив'язка.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

cameraProviderFuture.addListener({
    val cameraProvider = cameraProviderFuture.get()

    // Створення Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Створення ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Прив'язка до Lifecycle
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Kotlin-код отримує ProcessCameraProvider через ф'ючерс, створює use cases Preview та ImageCapture, і прив'язує їх до Lifecycle поточної Activity. CameraX автоматично обробляє поворот екрана, перемикання камер та звільнення ресурсів при закритті Activity.

ImageAnalysis для ML-обробки

Додамо ImageAnalysis use case для покадрової обробки потоку з камери, наприклад для інтеграції з ML Kit.

kotlin
val imageAnalysis = ImageAnalysis.Builder()
    .setBackpressureStrategy(
        ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
    )
    .build()

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Конвертація YUV в Bitmap для ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Запуск розпізнавання тексту ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Обробка результату
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis зі стратегією KEEP_ONLY_LATEST обробляє тільки останній доступний кадр, пропускаючи застарілі, якщо аналізатор не встигає. Кожен кадр конвертується з YUV в Bitmap для ML Kit, після чого запускається розпізнавання тексту. Виклик imageProxy.close() обов'язковий — інакше CameraX перестане подавати нові кадри.

CameraX Extensions

CameraX Extensions — модуль, що додає розширені режими знімання: портретний (розмиття фону), HDR (розширений динамічний діапазон), нічний режим (знімання при низькому освітленні), авторетуш (корекція шкіри) та режим «красиве обличчя» (beauty). Розширення активуються тільки на пристроях, де виробник камери надав OEM-реалізацію.

Перевірка та ввімкнення розширень

Перед використанням CameraX Extensions необхідно перевірити, чи доступне розширення на поточному пристрої. Google рекомендує перевіряти через ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Увімкнення портретного режиму
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Код перевіряє підтримку BOKEH (портретного) розширення через ExtensionsManager та вмикає його за наявності OEM-реалізації. CameraX автоматично перемикає налаштування камери для портретного режиму. Якщо розширення недоступне, додаток продовжує роботу в стандартному режимі без падінь.

CameraX Extensions вирішує одну з головних проблем Android-розробки: фрагментацію камер. На різних пристроях портретний режим реалізується по-різному — одні використовують два об'єктиви, інші — програмне розмиття. CameraX абстрагує цю різницю: розробник вмикає BOKEH-режим, а бібліотека сама визначає, як його реалізувати на конкретному пристрої. Google підтримує список перевірених OEM-партнерів: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

При роботі з CameraX важливо враховувати обмеження щодо кількості одночасних use cases: на більшості пристроїв можна одночасно запустити максимум 3 use case. Наприклад, Preview + ImageCapture + ImageAnalysis працюють на всіх сучасних пристроях, а ось Preview + ImageCapture + VideoCapture можуть не підтримуватися на бюджетних моделях. CameraX надає метод ProcessCameraProvider.checkAvailability(), який перевіряє сумісність комбінації use cases до прив'язки, що дозволяє уникнути crash у runtime.

CameraX інтегрується з Jetpack Navigation через CameraXFragment або Compose-сумісний PreviewView. Для Compose використовується елемент AndroidView, в який вбудовується PreviewView. CameraX коректно обробляє поворот екрана та зміну конфігурації без втрати стану сесії камери — достатньо вказати LifecycleOwner, і бібліотека автоматично перестворить прив'язку use cases при повороті пристрою.

Для тестування CameraX без реального пристрою Google надає TestableCameraX — бібліотеку, що емулює поведінку камери в unit-тестах. TestableCameraX дозволяє симулювати кадри з камери, перевіряти роботу ImageAnalysis та коректність обробки ImageCapture без фізичного пристрою. Це суттєво прискорює CI/CD пайплайн для проєктів, що працюють з камерою.

Часті запитання

З яких версій Android працює CameraX?

Android 5.0 (API 21) і вище. CameraX охоплює 99% активних Android-пристроїв. Для розширень (Portrait, HDR) потрібен API 23+ та OEM-підтримка конкретного режиму.

Чи можна використовувати CameraX з ML Kit?

Так, ImageAnalysis use case передає кожен кадр в аналізатор. Кадри конвертуються з YUV_420_888 в InputImage для ML Kit. Це стандартний патерн для створення ML-сканера.

Чим CameraX відрізняється від Camera2?

CameraX — високорівневий API з use case-архітектурою, автоматичною прив'язкою до Lifecycle та обробкою device-specific відмінностей. Camera2 — низькорівневий повний контроль над камерою з великим обсягом boilerplate-коду.

Чи підтримує CameraX запис відео?

Так, VideoCapture use case доданий у CameraX 1.1.0-beta. Він записує відео з мікрофоном і синхронізується з Preview. Для більш складних сценаріїв використовуйте Camera2 безпосередньо.

Як переключити між передньою та задньою камерою?

Через CameraSelector: DEFAULT_BACK_CAMERA або DEFAULT_FRONT_CAMERA. Для перемикання викличте cameraProvider.bindToLifecycle() з новим селектором — CameraX автоматично перезапустить сесію.

Підсумки

  • CameraX — бібліотека Jetpack для Android-камери з use case-архітектурою (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use cases комбінуються в одній сесії: Preview + ImageAnalysis для ML або Preview + ImageCapture для фото
  • Прив'язка до Lifecycle автоматично керує ресурсами камери при повороті екрана та зміні станів Activity
  • CameraX Extensions додають портретний режим, HDR та нічне знімання на сумісних пристроях
  • Сумісність з 99% пристроїв Android починаючи з API 21 без device-specific коду
  • Інтеграція з ML Kit через ImageAnalysis дозволяє аналізувати кожен кадр у реальному часі
  • Для стандартних завдань CameraX — оптимальний вибір, для повного контролю використовуйте Camera2

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також