Dans le monde trépidant de la photographie mobile, capturer l’instant parfait est un défi constant, surtout lorsque la lumière vient à manquer. Alors que le mode Nuit a déjà transformé nos clichés statiques, une nouvelle innovation de Google, le « Low Light Boost » (LLB), s’apprête à révolutionner l’expérience caméra en temps réel. Oubliez les prévisualisations sombres : préparez-vous à voir clair, instantanément, même dans les environnements les plus pénombreux.
Récemment, nous avions exploré comment Instagram a permis à ses utilisateurs de prendre des photos époustouflantes en basse lumière grâce au Mode Nuit. Cette fonctionnalité est idéale pour les images fixes, où le temps permet de fusionner plusieurs expositions pour un cliché statique de haute qualité. Mais qu’en est-il des moments qui se déroulent entre les photos ? Les utilisateurs interagissent avec leur appareil photo bien au-delà de la simple pression du déclencheur, utilisant la prévisualisation pour cadrer une scène ou scanner des QR codes.
Aujourd’hui, Google lève le voile sur le Low Light Boost (LLB), une fonctionnalité puissante conçue pour illuminer les flux caméra en temps réel. Contrairement au Mode Nuit, qui exige une courte période d’immobilité pour la capture, le LLB opère instantanément sur votre prévisualisation en direct et vos enregistrements vidéo. Mieux encore, il ajuste automatiquement la luminosité nécessaire en fonction de l’éclairage ambiant, garantissant une optimisation parfaite pour chaque environnement.
Grâce à une récente mise à jour, le LLB permet aux utilisateurs d’Instagram de composer le cliché idéal. Ensuite, l’implémentation existante du Mode Nuit prend le relais, offrant les mêmes photos en basse lumière de haute qualité dont ils profitent depuis plus d’un an.
L’importance cruciale de la luminosité en temps réel
Alors que le Mode Nuit vise à améliorer la qualité finale de l’image, le Low Light Boost se concentre sur l’utilisabilité et l’interactivité dans les environnements sombres. Il est également important de noter que, bien que ces deux technologies travaillent en synergie, elles peuvent être utilisées indépendamment. Dans certains cas d’usage, le LLB prouve sa valeur même lorsque le Mode Nuit n’est pas requis. Voici comment le LLB enrichit l’expérience utilisateur :
- Un cadrage et une capture optimisés : Dans les scènes faiblement éclairées, la prévisualisation d’une caméra standard peut être totalement noire. Le LLB illumine le viseur, permettant aux utilisateurs de réellement voir ce qu’ils cadrent avant même de presser le bouton de l’obturateur. Pour une qualité optimale en photo basse lumière, vous pouvez ensuite enchaîner avec le Mode Nuit, ou laisser le LLB vous offrir un résultat « ce que vous voyez est ce que vous obtenez » en temps réel.
- Une lecture fiable des QR codes : Les QR codes sont omniprésents, mais les scanner dans un restaurant sombre ou un parking souterrain est souvent une source de frustration. Grâce à un flux caméra considérablement plus lumineux, les algorithmes de lecture peuvent détecter et décoder les QR codes de manière fiable, même dans des conditions de très faible luminosité.
- Des interactions enrichies : Pour les applications impliquant des interactions vidéo en direct, comme les assistants IA ou les appels vidéo, le LLB augmente la quantité d’informations perceptibles. Cela garantit que les modèles de vision par ordinateur disposent de suffisamment de données pour fonctionner efficacement.
« Voir, c’est croire, surtout quand il s’agit de capturer un instant. Le Low Light Boost élimine les approximations et donne aux utilisateurs le contrôle visuel qu’ils méritent, même dans l’obscurité. »
L’impact transformateur sur Instagram
L’équipe d’ingénieurs derrière l’application Instagram pour Android travaille sans relâche pour offrir une expérience caméra de pointe à ses utilisateurs. Des démonstrations visuelles impressionnantes (comme celles que vous pouvez retrouver dans l’article original) illustrent clairement la différence que le LLB apporte, par exemple, sur un Pixel 10 Pro. Il est facile d’imaginer l’amélioration significative de l’expérience utilisateur. Si les utilisateurs ne peuvent pas voir ce qu’ils capturent, il y a de fortes chances qu’ils abandonnent la prise de vue.
Les données sont sans appel : une prévisualisation claire réduit le taux d’abandon de la capture, augmentant ainsi l’engagement des utilisateurs.
Comment choisir votre implémentation
Pour intégrer le Low Light Boost et offrir la meilleure expérience sur une large gamme d’appareils, deux approches sont possibles :
- Mode AE Low Light Boost : Il s’agit d’un mode d’exposition automatique (AE) directement géré par le matériel. Il offre la meilleure qualité et performance car il ajuste précisément le pipeline du Processeur de Signal d’Image (ISP). Il est toujours recommandé de vérifier sa disponibilité en premier.
- Google Low Light Boost : Si l’appareil ne prend pas en charge le mode AE matériel, vous pouvez vous rabattre sur cette solution logicielle fournie via les services Google Play. Elle applique un post-traitement au flux de la caméra pour l’éclaircir. Étant une solution entièrement logicielle, elle est disponible sur un plus grand nombre d’appareils, élargissant ainsi la portée du LLB.
Mode AE Low Light Boost (Matériel)
Mécanisme : Disponible sur les appareils sous Android 15 et versions ultérieures, et nécessitant une implémentation du fabricant (OEM) dans le HAL (Hardware Abstraction Layer), actuellement sur les Pixel 10. Ce mode s’intègre directement au Processeur de Signal d’Image (ISP) de l’appareil photo. En définissant CaptureRequest.CONTROL_AE_MODE sur CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY, le système de la caméra prend le contrôle.
Comportement : Le HAL/ISP analyse la scène et ajuste les paramètres du capteur et du traitement, souvent en augmentant le temps d’exposition, pour éclaircir l’image. Cela permet d’obtenir des images avec un rapport signal/bruit (SNR) significativement amélioré, car un temps d’exposition prolongé (plutôt qu’une augmentation du gain numérique du capteur, ou ISO) permet au capteur de capturer plus d’informations lumineuses.
Avantage : Potentiellement une meilleure qualité d’image et une efficacité énergétique accrue grâce à l’exploitation des chemins matériels dédiés.
Compromis : Peut entraîner une fréquence d’images plus faible (jusqu’à 10 FPS dans des conditions de très faible luminosité) car le capteur a besoin de plus de temps pour capter la lumière.
Google Low Light Boost (Logiciel via Google Play Services)
Mécanisme : Cette solution, distribuée comme un module optionnel via les services Google Play, applique un post-traitement au flux de la caméra. Elle utilise une technologie sophistiquée d’amélioration d’image en temps réel appelée HDRNet.
Google HDRNet : Ce modèle de deep learning analyse l’image à une résolution inférieure pour prédire un ensemble compact de paramètres (une grille bilatérale). Cette grille guide ensuite l’amélioration efficace et spatialement variable de l’image en pleine résolution sur le GPU. Le modèle est entraîné pour éclaircir et améliorer la qualité d’image dans des conditions de faible luminosité, en mettant l’accent sur la visibilité des visages.
Orchestration du processus : Le modèle HDRNet et sa logique associée sont orchestrés par le processeur Low Light Boost, qui inclut :
- Analyse de scène : Un calculateur personnalisé qui estime la véritable luminosité de la scène à l’aide des métadonnées de la caméra (sensibilité du capteur, temps d’exposition, etc.) et du contenu de l’image. Cette analyse détermine le niveau d’amplification.
- Traitement HDRNet : Applique le modèle HDRNet pour éclaircir l’image. Le modèle utilisé est optimisé pour les scènes à faible luminosité et pour des performances en temps réel.
- Mélange (Blending) : Les images originales et celles traitées par HDRNet sont mélangées. La quantité de mélange appliquée est contrôlée dynamiquement par le calculateur de luminosité de la scène, assurant une transition fluide entre les états amplifiés et non amplifiés.
Avantage : Fonctionne sur une gamme plus étendue d’appareils (actuellement pris en charge sur les Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra, et les Pixel 6 à 9) sans nécessiter de support HAL spécifique. Maintient la fréquence d’images de la caméra puisqu’il s’agit d’un effet de post-traitement.
Compromis : En tant que méthode de post-traitement, la qualité est limitée par les informations présentes dans les images fournies par le capteur. Elle ne peut pas récupérer les détails perdus en raison d’une obscurité extrême au niveau du capteur.
En offrant ces deux chemins, matériel et logiciel, le Low Light Boost propose une solution évolutive pour améliorer les performances des caméras en basse lumière à travers l’écosystème Android. Les développeurs devraient privilégier le mode AE lorsqu’il est disponible et utiliser le Google Low Light Boost comme une alternative robuste.
Implémentation du Low Light Boost dans votre application
Voyons maintenant comment implémenter les deux offres LLB. Que vous utilisiez CameraX ou Camera2 dans votre application, ces étapes sont applicables. Pour des résultats optimaux, nous recommandons d’implémenter les deux approches.
Étape 1 : Mode AE Low Light Boost
Disponible sur certains appareils sous Android 15 et versions ultérieures, le mode AE LLB fonctionne comme un mode d’exposition automatique (AE) spécifique.
1. Vérifier la disponibilité
Vérifiez d’abord si l’appareil photo prend en charge le mode AE LLB :
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. Activer le mode
Si pris en charge, activez le mode AE LLB via l’objet CameraControl de CameraX :
// After setting up your camera, use the CameraInfo object to enable LLB AE Mode.
camera = cameraProvider.bindToLifecycle(...)
if (isLlbSupported) {
try {
// The .await() extension suspends the coroutine until the
// ListenableFuture completes. If the operation fails, it throws
// an exception which we catch below.
camera?.cameraControl.enableLowLightBoostAsync(true).await()
} catch (e: IllegalStateException) {
Log.e(TAG, "Failed to enable low light boost: not available on this device or with the current camera configuration", e)
} catch (e: CameraControl.OperationCanceledException) {
Log.e(TAG, "Failed to enable low light boost: camera is closed or value has changed", e)
}
}
3. Surveiller l’état
La demande n’implique pas une activation constante du « boost ». Le système l’active uniquement lorsque la scène est réellement sombre. Utilisez un Observer pour mettre à jour votre interface utilisateur (par exemple, afficher une icône de lune) ou convertissez en un Flow via l’extension asFlow().
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}
Consultez le guide complet sur le mode AE Low Light Boost ici.
Étape 2 : Google Low Light Boost
Pour les appareils ne supportant pas le mode AE matériel, le Google Low Light Boost est une solution de repli puissante. Il utilise une LowLightBoostSession pour intercepter et éclaircir le flux.
1. Ajouter les dépendances
Cette fonctionnalité est fournie via les services Google Play :
implementation("com.google.android.gms:play-services-camera-low-light-boost:16.0.1-beta06")
// Add coroutines-play-services to simplify Task APIs
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.10.2")
2. Initialiser le client
Avant de démarrer votre caméra, utilisez le LowLightBoostClient pour vérifier que le module est installé et que l’appareil est pris en charge :
val llbClient = LowLightBoost.getClient(context)
// Check support and install if necessary
val isSupported = llbClient.isCameraSupported(cameraId).await()
val isInstalled = llbClient.isModuleInstalled().await()
if (isSupported && !isInstalled) {
// Trigger installation
llbClient.installModule(installCallback).await()
}
3. Créer une session LLB
Google LLB traite chaque image. Vous devez donc fournir votre Surface d’affichage à la LowLightBoostSession, qui vous renvoie une Surface avec l’éclaircissement appliqué. Pour les applications Camera2, vous pouvez ajouter la Surface résultante avec CaptureRequest.Builder.addTarget(). Pour CameraX, ce pipeline de traitement s’aligne idéalement avec la classe CameraEffect, où vous pouvez appliquer l’effet avec un SurfaceProcessor et le fournir à votre Preview avec un SurfaceProvider, comme illustré ici :
suspend fun createLlbSession(surfaceRequest: SurfaceRequest, outputSurfaceForLlb: Surface) {
// 1. Create the LLB Session configuration
val options = LowLightBoostOptions(
outputSurfaceForLlb,
cameraId,
surfaceRequest.resolution.width,
surfaceRequest.resolution.height,
true // Start enabled
)
// 2. Create the session.
val llbSession = llbClient.createSession(options, callback).await()
// 3. Get the surface to use.
val llbInputSurface = llbSession.getCameraSurface()
// 4. Provide the surface to the CameraX Preview UseCase.
surfaceRequest.provideSurface(llbInputSurface, executor, resultListener)
// 5. Set the scene detector callback to monitor how much boost is being applied.
val onSceneBrightnessChanged = object : SceneDetectorCallback {
override fun onSceneBrightnessChanged(
session: LowLightBoostSession,
boostStrength: Float
) {
// Monitor the boostStrength from 0 (no boosting) to 1 (maximum boosting)
}
}
llbSession.setSceneDetectorCallback(onSceneBrightnessChanged, null)
}
4. Transmettre les métadonnées
Pour que l’algorithme fonctionne, il doit analyser l’état d’auto-exposition de la caméra. Vous devez renvoyer les résultats de capture à la session LLB. Dans CameraX, cela peut être fait en étendant votre Preview.Builder avec Camera2Interop.Extender.setSessionCaptureCallback().
Camera2Interop.Extender(previewBuilder).setSessionCaptureCallback(
object : CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(
session: CameraCaptureSession,
request: CaptureRequest,
result: TotalCaptureResult
) {
super.onCaptureCompleted(session, request, result)
llbSession?.processCaptureResult(result)
}
}
)
Des étapes d’implémentation détaillées pour le client et la session sont disponibles dans le guide Google Low Light Boost.
Prochaines étapes : Illuminez l’avenir de vos applications
En implémentant ces deux options, vous garantissez à vos utilisateurs de voir clairement, de scanner de manière fiable et d’interagir efficacement, quelles que soient les conditions d’éclairage. Le Low Light Boost n’est pas seulement une amélioration technique ; c’est un bond en avant pour l’accessibilité et la convivialité des caméras sur Android, ouvrant la voie à des expériences utilisateur plus fluides et immersives dans des environnements autrefois hostiles à la capture visuelle.
Pour découvrir ces fonctionnalités en action au sein d’une codebase complète et prête pour la production, explorez la Jetpack Camera App sur GitHub. Cette application de référence implémente à la fois le mode AE LLB et le Google LLB, vous offrant une base solide pour votre propre intégration.
Mots-clés : Low Light Boost, Android, caméra, basse lumière, Night Mode, développement mobile
Source : Article original
