CameraX: co to je, CameraX API a jak funguje kamera

Autor: IT Sectr Publikováno: 2026-03-26 Doba čtení: 8 min

CameraX — knihovna Android Jetpack pro práci s kamerou, která poskytuje jednoduché a konzistentní API nad složitým Camera2. Abstrahuje rozdíly mezi stovkami modelů Android zařízení a zaručuje stejné chování kamery na různých přístrojích. Podle Android Developer CameraX Guide (2026) je knihovna používána ve 25 000+ aplikacích Google Play a funguje na zařízeních s API Level 21 a vyšším.

Hlavní body

  • CameraX — knihovna Jetpack pro Android kameru s use case API: Preview, ImageCapture a ImageAnalysis
  • Use case architektura osvobozuje vývojáře od ruční správy relace a stavů kamery
  • CameraX Extensions přidávají portrétový režim, HDR a noční focení na zařízeních, která to podporují
  • Bezpečnost typů — CameraX kontroluje kompatibilitu use cases přes ProcessCameraProvider
  • Kompatibilita s 99% Android zařízení od Android 5.0 (API 21)

Co je CameraX?

CameraX — je knihovna ze sady Android Jetpack, poprvé vydaná Googlem v roce 2019 jako náhrada za zastaralé Camera API a zjednodušená alternativa ke složitému Camera2. Hlavní filozofií CameraX je „napiš jednou, funguje na všech zařízeních". Knihovna automaticky zpracovává hardwarové rozdíly: umístění kamer, podporovaná rozlišení, orientaci senzoru a dostupné formáty — vývojář nemusí psát kód specifický pro zařízení.

Architektura CameraX je postavena na use cases: Preview (zobrazení obrazu z kamery ve Viewfinderu), ImageCapture (focení), ImageAnalysis (analýza toku snímků pro ML) a VideoCapture (nahrávání videa). Každý use case je nezávislá komponenta, kterou lze kombinovat: současně spustit Preview pro hledáček a ImageAnalysis pro ML zpracování. Podle Google (2026) je CameraX podporován na 99% Android zařízení s API 21+.

Hlavní funkce

CameraX poskytuje automatické přepínání mezi přední a zadní kamerou, podporu otáčení obrazovky bez obnovení relace, vestavěné zpracování životního cyklu přes LifecycleOwner, vázání use cases na jeden proces Lifecycle, podporu Camera2 Extensions pro portrét, HDR a noční režim, a také TestableCameraX pro unit testování bez reálného zařízení.

Use cases CameraX

CameraX definuje čtyři standardní use case, z nichž každý řeší konkrétní úkol práce s kamerou. Use cases lze kombinovat: nejoblíbenější kombinace jsou Preview + ImageCapture pro kameru a Preview + ImageAnalysis pro ML skener.

Use caseÚčelTřída
PreviewZobrazení obrazu kamery v reálném časePreviewView
ImageCaptureFocení s nastavením blesku a rozlišeníImageCapture
ImageAnalysisAnalýza každého snímku pro ML zpracováníImageAnalysis
VideoCaptureNahrávání videa s mikrofonem (od 1.1.0-beta)VideoCapture

Preview

Preview use case zobrazuje video stream z kamery v PreviewView — speciálním View z knihovny CameraX. PreviewView se automaticky přizpůsobí poměru stran kamery, podporuje ScaleType (FillCenter, FitCenter) a otáčení obrazovky bez obnovení use case. Vývojář musí pouze připojit Preview k Lifecycle přes ProcessCameraProvider.

ImageAnalysis

ImageAnalysis use case předává každý snímek z kamery handleru k analýze: rozpoznávání textu, detekce obličejů, skenování QR kódů. Analyzátor přijímá snímky ve formátu YUV_420_888 — univerzálním barevném prostoru Android. Režim práce (BLOCKING nebo NON_BLOCKING) spravuje frontu snímků: BLOCKING čeká na dokončení předchozí analýzy, NON_BLOCKING přeskočí snímky při zpoždění.

ImageCapture

ImageCapture use case fotí z kamery s nastavením blesku, rozlišení a komprese. Podporovány jsou formáty JPEG a RAW (na kompatibilních zařízeních). ImageCapture ukládá snímek asynchronně přes OnImageCapturedCallback nebo přímo do souboru přes ImageCapture.OutputFileOptions.

VideoCapture — nahrávání videa

VideoCapture use case byl přidán v CameraX 1.1.0 (beta) a umožňuje nahrávat video v rozlišení až 4K při 30 FPS. Use case se automaticky synchronizuje s Preview: obraz v hledáčku odpovídá tomu, co se nahrává do souboru. VideoCapture interně používá MediaCodec a MediaMuxer, čímž skrývá složitost konfigurace video kodeku a MP4 kontejneru.

CameraX vs Camera2

CameraX a Camera2 — dva přístupy k práci s kamerou v Androidu. Camera2 — nízkoúrovňové API, poskytující plnou kontrolu nad zařízením. CameraX — vysokoúrovňová abstrakce, automatizující typické scénáře. Volba mezi nimi závisí na požadavcích projektu.

VlastnostCameraXCamera2
Úroveň APIVysoká (use case)Nízká (plná kontrola)
Kód specifický pro zařízeníNení vyžadovánVyžadován pro každé zařízení
Vázání na LifecycleAutomatickéRuční
RozšířeníVestavěná (HDR, Portrait, Night)Vyžadují OEM implementaci
Složitost implementace15–30 řádků kódu100–300 řádků kódu
Podpora APIAPI 21+API 21+
FlexibilitaStandardní scénářeJakékoli scénáře

Používejte CameraX pro standardní úkoly: kamera v aplikaci, QR skener, ML zpracování toku. Používejte Camera2, když je vyžadováno ruční ovládání expozice, RAW focení s plnou kontrolou parametrů, práce s více kamerami současně.

Příklady kódu v Kotlinu

Podívejme se na plnou konfiguraci CameraX v Android aplikaci s použitím všech tří hlavních use cases: Preview, ImageCapture a ImageAnalysis.

Konfigurace ProcessCameraProvider

Kód váže CameraX k Lifecycle Activity přes ProcessCameraProvider. Nejprve je vyžádána instance providera, poté jsou vytvořeny use cases a provedeno vázání.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

    // Vytvoření Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Vytvoření ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Připojení k Lifecycle
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Kotlin kód získává ProcessCameraProvider přes future, vytváří use cases Preview a ImageCapture a váže je k Lifecycle aktuální Activity. CameraX automaticky zpracovává otáčení obrazovky, přepínání kamer a uvolňování zdrojů při zavření Activity.

ImageAnalysis pro ML zpracování

Přidáme ImageAnalysis use case pro zpracování toku z kamery snímek po snímku, například pro integraci s ML Kitem.

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

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Konverze YUV na Bitmap pro ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Spuštění rozpoznávání textu ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Zpracování výsledku
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis se strategií KEEP_ONLY_LATEST zpracovává pouze poslední dostupný snímek a přeskočí zastaralé, pokud analyzátor nestíhá. Každý snímek je konvertován z YUV do Bitmap pro ML Kit, poté je spuštěno rozpoznávání textu. Volání imageProxy.close() je povinné — jinak CameraX přestane dodávat nové snímky.

CameraX Extensions

CameraX Extensions — modul přidávající pokročilé režimy focení: portrét (rozmazání pozadí), HDR (rozšířený dynamický rozsah), noční režim (focení při slabém osvětlení), automatický retuš (korekce pleti) a režim „krásná tvář" (beauty). Rozšíření se aktivují pouze na zařízeních, kde výrobce kamery poskytl OEM implementaci.

Kontrola a zapnutí rozšíření

Před použitím CameraX Extensions je třeba zkontrolovat, zda je rozšíření na aktuálním zařízení dostupné. Google doporučuje kontrolu přes ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Zapnutí portrétového režimu
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Kód kontroluje podporu rozšíření BOKEH (portrétového) přes ExtensionsManager a zapíná jej, pokud je k dispozici OEM implementace. CameraX automaticky přepne nastavení kamery pro portrétový režim. Pokud rozšíření není dostupné, aplikace pokračuje v práci ve standardním režimu bez pádů.

CameraX Extensions řeší jeden z hlavních problémů vývoje pro Android: fragmentaci kamer. Na různých zařízeních je portrétový režim implementován odlišně — některá používají dva objektivy, jiná — softwarové rozmazání. CameraX tuto odlišnost abstrahuje: vývojář zapne BOKEH režim a knihovna sama určí, jak jej implementovat na konkrétním zařízení. Google udržuje seznam ověřených OEM partnerů: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

Při práci s CameraX je důležité zohlednit omezení počtu současných use cases: na většině zařízení lze současně spustit maximálně 3 use cases. Například Preview + ImageCapture + ImageAnalysis fungují na všech moderních zařízeních, ale Preview + ImageCapture + VideoCapture nemusí být podporovány na levných modelech. CameraX poskytuje metodu ProcessCameraProvider.checkAvailability(), která kontroluje kompatibilitu kombinace use cases před vázáním, což umožňuje vyhnout se pádům za běhu.

CameraX se integruje s Jetpack Navigation přes CameraXFragment nebo Compose-kompatibilní PreviewView. Pro Compose se používá prvek AndroidView, do kterého je vložen PreviewView. CameraX správně zpracovává otáčení obrazovky a změnu konfigurace bez ztráty stavu relace kamery — stačí uvést LifecycleOwner a knihovna automaticky obnoví vázání use cases při otočení zařízení.

Pro testování CameraX bez reálného zařízení Google poskytuje TestableCameraX — knihovnu emulující chování kamery v unit testech. TestableCameraX umožňuje simulovat snímky z kamery, kontrolovat práci ImageAnalysis a správnost zpracování ImageCapture bez fyzického zařízení. To výrazně urychluje CI/CD pipeline pro projekty pracující s kamerou.

Často kladené otázky

Od jakých verzí Androidu CameraX funguje?

Android 5.0 (API 21) a vyšší. CameraX pokrývá 99% aktivních Android zařízení. Pro rozšíření (Portrait, HDR) je vyžadován API 23+ a OEM podpora konkrétního režimu.

Lze CameraX použít s ML Kitem?

Ano, ImageAnalysis use case předává každý snímek analyzátoru. Snímky jsou konvertovány z YUV_420_888 do InputImage pro ML Kit. To je standardní vzor pro vytvoření ML skeneru.

Čím se CameraX liší od Camera2?

CameraX — vysokoúrovňové API s use case architekturou, automatickým vázáním na Lifecycle a zpracováním rozdílů specifických pro zařízení. Camera2 — nízkoúrovňová plná kontrola nad kamerou s velkým množstvím boilerplate kódu.

Podporuje CameraX nahrávání videa?

Ano, VideoCapture use case byl přidán v CameraX 1.1.0-beta. Nahrává video s mikrofonem a synchronizuje se s Preview. Pro složitější scénáře použijte přímo Camera2.

Jak přepnout mezi přední a zadní kamerou?

Přes CameraSelector: DEFAULT_BACK_CAMERA nebo DEFAULT_FRONT_CAMERA. Pro přepnutí zavolejte cameraProvider.bindToLifecycle() s novým selektorem — CameraX automaticky restartuje relaci.

Shrnutí

  • CameraX — knihovna Jetpack pro Android kameru s use case architekturou (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use cases se kombinují v jedné relaci: Preview + ImageAnalysis pro ML nebo Preview + ImageCapture pro fotky
  • Vázání na Lifecycle automaticky spravuje zdroje kamery při otáčení obrazovky a změně stavů Activity
  • CameraX Extensions přidávají portrétový režim, HDR a noční focení na kompatibilních zařízeních
  • Kompatibilita s 99% Android zařízení od API 21 bez kódu specifického pro zařízení
  • Integrace s ML Kitem přes ImageAnalysis umožňuje analyzovat každý snímek v reálném čase
  • Pro standardní úkoly je CameraX optimální volbou, pro plnou kontrolu použijte Camera2

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také