CameraX : qu'est-ce que c'est, API CameraX et comment fonctionne la caméra

Auteur : IT Sectr Publié le : 2026-03-26 Temps de lecture : 8 min

CameraX est une bibliothèque Android Jetpack pour travailler avec la caméra, fournissant une API simple et cohérente au-dessus de la complexe Camera2. Elle abstrait les différences entre des centaines de modèles d'appareils Android et garantit un comportement uniforme de la caméra sur différents matériels. Selon le Guide Android Developer CameraX (2026), la bibliothèque est utilisée dans plus de 25 000 applications Google Play et fonctionne sur les appareils avec API Level 21 et supérieur.

Points clés

  • CameraX est une bibliothèque Jetpack pour la caméra Android avec API de cas d'utilisation : Preview, ImageCapture et ImageAnalysis
  • L'architecture de cas d'utilisation libère le développeur de la gestion manuelle de session et des états de la caméra
  • Les extensions CameraX ajoutent le mode portrait, le HDR et la prise de vue nocturne sur les appareils compatibles
  • Sécurité des types — CameraX vérifie la compatibilité des cas d'utilisation via ProcessCameraProvider
  • Compatibilité avec 99 % des appareils Android à partir d'Android 5.0 (API 21)

Qu'est-ce que CameraX ?

CameraX est une bibliothèque de la suite Android Jetpack, publiée pour la première fois par Google en 2019 en remplacement de l'ancienne Camera API et comme alternative simplifiée à la complexe Camera2. La philosophie centrale de CameraX est « écrivez une fois, fonctionne sur tous les appareils ». La bibliothèque gère automatiquement les différences matérielles : emplacement des caméras, résolutions prises en charge, orientation du capteur et formats disponibles — le développeur n'a pas besoin d'écrire de code spécifique à l'appareil.

L'architecture de CameraX est construite sur des cas d'utilisation : Preview (affichage du flux de la caméra dans Viewfinder), ImageCapture (prise de photos), ImageAnalysis (analyse du flux d'images pour le ML) et VideoCapture (enregistrement vidéo). Chaque cas d'utilisation est un composant indépendant qui peut être combiné : exécuter Preview pour le viseur et ImageAnalysis pour le traitement ML simultanément. Selon Google (2026), CameraX est pris en charge sur 99 % des appareils Android avec API 21+.

Fonctionnalités principales

CameraX fournit le basculement automatique entre les caméras avant et arrière, la prise en charge de la rotation de l'écran sans recréer la session, la gestion intégrée du cycle de vie via LifecycleOwner, la liaison des cas d'utilisation à un seul processus Lifecycle, la prise en charge des extensions Camera2 pour le portrait, le HDR et le mode nuit, et TestableCameraX pour les tests unitaires sans appareil réel.

Cas d'utilisation de CameraX

CameraX définit quatre cas d'utilisation standard, chacun résolvant une tâche spécifique de la caméra. Les cas d'utilisation peuvent être combinés : les combinaisons les plus populaires sont Preview + ImageCapture pour une application de caméra et Preview + ImageAnalysis pour un scanner ML.

Cas d'utilisationObjectifClasse
PreviewAffichage du flux de la caméra en temps réelPreviewView
ImageCapturePrise de photos avec réglages du flash et de la résolutionImageCapture
ImageAnalysisAnalyse de chaque image pour le traitement MLImageAnalysis
VideoCaptureEnregistrement vidéo avec microphone (depuis 1.1.0-beta)VideoCapture

Preview

Le cas d'utilisation Preview affiche le flux vidéo de la caméra dans PreviewView — une vue spéciale de la bibliothèque CameraX. PreviewView s'adapte automatiquement au rapport d'aspect de la caméra, prend en charge ScaleType (FillCenter, FitCenter) et la rotation de l'écran sans recréer le cas d'utilisation. Le développeur n'a qu'à lier Preview à un Lifecycle via ProcessCameraProvider.

ImageAnalysis

Le cas d'utilisation ImageAnalysis envoie chaque image de la caméra à un gestionnaire pour analyse : reconnaissance de texte, détection de visages, scan de codes QR. L'analyseur reçoit les images au format YUV_420_888 — l'espace colorimétrique universel d'Android. Mode de fonctionnement (BLOCKING ou NON_BLOCKING) contrôle la file d'attente des images : BLOCKING attend la fin de l'analyse précédente, NON_BLOCKING ignore les images en cas de retard.

ImageCapture

Le cas d'utilisation ImageCapture prend des photos de la caméra avec les réglages de flash, de résolution et de compression. Les formats JPEG et RAW sont pris en charge (sur les appareils compatibles). ImageCapture enregistre l'instantané de manière asynchrone via OnImageCapturedCallback ou directement dans un fichier via ImageCapture.OutputFileOptions.

VideoCapture — Enregistrement vidéo

Le cas d'utilisation VideoCapture a été ajouté dans CameraX 1.1.0 (bêta) et permet d'enregistrer une vidéo jusqu'en 4K à 30 FPS. Le cas d'utilisation se synchronise automatiquement avec Preview : l'image dans le viseur correspond à ce qui est enregistré dans le fichier. VideoCapture utilise MediaCodec et MediaMuxer en interne, masquant la complexité de la configuration du codec vidéo et du conteneur MP4.

CameraX vs Camera2

CameraX et Camera2 sont deux approches pour travailler avec la caméra sous Android. Camera2 est une API de bas niveau offrant un contrôle total sur l'appareil. CameraX est une abstraction de haut niveau automatisant les scénarios typiques. Le choix entre eux dépend des exigences du projet.

CaractéristiqueCameraXCamera2
Niveau d'APIHaut (cas d'utilisation)Bas (contrôle total)
Code spécifique à l'appareilNon requisRequis pour chaque appareil
Liaison au cycle de vieAutomatiqueManuelle
ExtensionsIntégrées (HDR, Portrait, Night)Nécessitent une implémentation OEM
Complexité d'implémentation15–30 lignes de code100–300 lignes de code
Support d'APIAPI 21+API 21+
FlexibilitéScénarios standardTout scénario

Utilisez CameraX pour les tâches standard : caméra dans l'application, scanner QR, traitement de flux ML. Utilisez Camera2 lorsque le contrôle manuel de l'exposition, la prise de vue RAW avec contrôle total des paramètres, ou le travail avec plusieurs caméras simultanément est requis.

Exemples de code en Kotlin

Examinons une configuration complète de CameraX dans une application Android utilisant les trois cas d'utilisation principaux : Preview, ImageCapture et ImageAnalysis.

Configuration de ProcessCameraProvider

Le code lie CameraX au cycle de vie de l'Activity via ProcessCameraProvider. D'abord, une instance du fournisseur est demandée, puis les cas d'utilisation sont créés et la liaison est effectuée.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

    // Création de Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Création de ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Liaison au Lifecycle
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Le code Kotlin obtient ProcessCameraProvider via un future, crée les cas d'utilisation Preview et ImageCapture, et les lie au cycle de vie de l'Activity actuelle. CameraX gère automatiquement la rotation de l'écran, le changement de caméra et la libération des ressources lors de la fermeture de l'Activity.

ImageAnalysis pour le traitement ML

Ajoutons un cas d'utilisation ImageAnalysis pour le traitement image par image du flux de la caméra, par exemple pour l'intégration avec ML Kit.

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

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

    // Lancement de la reconnaissance de texte ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Traitement du résultat
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis avec stratégie KEEP_ONLY_LATEST ne traite que la dernière image disponible, ignorant les images obsolètes si l'analyseur ne suit pas le rythme. Chaque image est convertie de YUV en Bitmap pour ML Kit, après quoi la reconnaissance de texte est lancée. L'appel à imageProxy.close() est obligatoire — sinon CameraX cessera de fournir de nouvelles images.

Extensions CameraX

Les extensions CameraX sont un module qui ajoute des modes de prise de vue avancés : portrait (flou d'arrière-plan), HDR (plage dynamique étendue), mode nuit (prise de vue en faible luminosité), retouche automatique (correction de la peau) et mode beauté. Les extensions ne sont activées que sur les appareils où le fabricant de la caméra a fourni une implémentation OEM.

Vérification et activation des extensions

Avant d'utiliser les extensions CameraX, vous devez vérifier si l'extension est disponible sur l'appareil actuel. Google recommande de vérifier via ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Activation du mode portrait
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Le code vérifie la prise en charge de l'extension BOKEH (portrait) via ExtensionsManager et l'active si une implémentation OEM est disponible. CameraX bascule automatiquement les paramètres de la caméra pour le mode portrait. Si l'extension n'est pas disponible, l'application continue de fonctionner en mode standard sans crash.

Les extensions CameraX résolvent l'un des principaux problèmes du développement Android : la fragmentation des caméras. Sur différents appareils, le mode portrait est implémenté différemment — certains utilisent des objectifs doubles, d'autres utilisent un flou logiciel. CameraX abstrait cette différence : le développeur active le mode BOKEH, et la bibliothèque elle-même détermine comment l'implémenter sur un appareil spécifique. Google maintient une liste de partenaires OEM vérifiés : Samsung, Xiaomi, OPPO, vivo, Google Pixel.

Lorsque vous travaillez avec CameraX, il est important de considérer les limitations du nombre de cas d'utilisation simultanés : sur la plupart des appareils, un maximum de 3 cas d'utilisation peuvent être exécutés en même temps. Par exemple, Preview + ImageCapture + ImageAnalysis fonctionne sur tous les appareils modernes, mais Preview + ImageCapture + VideoCapture peut ne pas être pris en charge sur les modèles économiques. CameraX fournit la méthode ProcessCameraProvider.checkAvailability(), qui vérifie la compatibilité de la combinaison de cas d'utilisation avant la liaison, aidant ainsi à éviter les crashs au moment de l'exécution.

CameraX s'intègre avec Jetpack Navigation via CameraXFragment ou PreviewView compatible Compose. Pour Compose, l'élément AndroidView est utilisé, dans lequel PreviewView est intégré. CameraX gère correctement la rotation de l'écran et les changements de configuration sans perdre l'état de la session de la caméra — il suffit de spécifier le LifecycleOwner, et la bibliothèque recréera automatiquement les liaisons des cas d'utilisation lors de la rotation de l'appareil.

Pour tester CameraX sans appareil réel, Google fournit TestableCameraX — une bibliothèque qui émule le comportement de la caméra dans les tests unitaires. TestableCameraX permet de simuler des images de la caméra, de tester le fonctionnement d'ImageAnalysis et la correction d'ImageCapture sans appareil physique. Cela accélère considérablement le pipeline CI/CD pour les projets travaillant avec la caméra.

Foire aux questions

À partir de quelles versions d'Android CameraX fonctionne-t-il ?

Android 5.0 (API 21) et supérieur. CameraX couvre 99 % des appareils Android actifs. Les extensions (Portrait, HDR) nécessitent API 23+ et la prise en charge OEM du mode spécifique.

Peut-on utiliser CameraX avec ML Kit ?

Oui, le cas d'utilisation ImageAnalysis transmet chaque image à l'analyseur. Les images sont converties de YUV_420_888 en InputImage pour ML Kit. C'est le modèle standard pour créer un scanner ML.

Quelle est la différence entre CameraX et Camera2 ?

CameraX est une API de haut niveau avec une architecture de cas d'utilisation, une liaison automatique au cycle de vie et la gestion des différences spécifiques à l'appareil. Camera2 est une API de bas niveau offrant un contrôle complet de la caméra avec une grande quantité de code passe-partout.

CameraX prend-il en charge l'enregistrement vidéo ?

Oui, le cas d'utilisation VideoCapture a été ajouté dans CameraX 1.1.0-beta. Il enregistre la vidéo avec le microphone et se synchronise avec Preview. Pour des scénarios plus complexes, utilisez Camera2 directement.

Comment basculer entre la caméra avant et arrière ?

Via CameraSelector : DEFAULT_BACK_CAMERA ou DEFAULT_FRONT_CAMERA. Pour basculer, appelez cameraProvider.bindToLifecycle() avec un nouveau sélecteur — CameraX redémarrera automatiquement la session.

Résumé

  • CameraX est une bibliothèque Jetpack pour la caméra Android avec une architecture de cas d'utilisation (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Les cas d'utilisation peuvent être combinés en une seule session : Preview + ImageAnalysis pour le ML ou Preview + ImageCapture pour les photos
  • La liaison au cycle de vie gère automatiquement les ressources de la caméra lors de la rotation de l'écran et des changements d'état de l'Activity
  • Les extensions CameraX ajoutent le mode portrait, le HDR et la prise de vue nocturne sur les appareils compatibles
  • Compatibilité avec 99 % des appareils Android à partir de l'API 21 sans code spécifique à l'appareil
  • L'intégration avec ML Kit via ImageAnalysis permet d'analyser chaque image en temps réel
  • Pour les tâches standard CameraX est le choix optimal, pour un contrôle complet utilisez Camera2

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi