Vor Kurzem haben wir darüber berichtet, wie Instagram Nutzern mit dem Nachtmodus ermöglicht, beeindruckende Fotos bei wenig Licht aufzunehmen. Diese Funktion eignet sich perfekt für Standbilder, bei denen genügend Zeit ist, mehrere Belichtungen zu kombinieren, um eine hochwertige statische Aufnahme zu erstellen. Aber was ist mit den Momenten, die zwischen den Fotos passieren? Nutzer interagieren mit der Kamera nicht nur, wenn sie auf den Auslöser drücken. Sie verwenden auch die Vorschau, um die Szene zu komponieren oder QR-Codes zu scannen.
Heute sehen wir uns den Low Light-Modus (LLB) an, eine leistungsstarke Funktion, mit der Echtzeit-Kamerastreams aufgehellt werden können. Im Gegensatz zum Nachtmodus, bei dem eine bestimmte Aufnahmezeit erforderlich ist, funktioniert der Low Light Boost sofort bei der Live-Vorschau und bei Videoaufnahmen. LLB passt die Aufhellung automatisch an das verfügbare Licht an und ist daher für jede Umgebung optimiert.
Mit einem aktuellen Update können Instagram-Nutzer mit LLB die perfekte Aufnahme machen. Die vorhandene Nachtmodus-Implementierung führt dann zu den gleichen hochwertigen Fotos bei wenig Licht, die Nutzer seit über einem Jahr verwenden.
Warum Echtzeit-Helligkeit wichtig ist
Der Nachtmodus soll die Bildqualität des endgültigen Bildes verbessern, während der Low Light-Modus die Nutzerfreundlichkeit und Interaktivität in dunklen Umgebungen verbessern soll. Ein weiterer wichtiger Faktor ist, dass LLB und der Nachtmodus zwar sehr gut zusammenarbeiten, aber auch unabhängig voneinander verwendet werden können. In einigen Anwendungsfällen ist LLB allein nützlich, wenn keine Fotos im Nachtmodus erforderlich sind. So verbessert LLB die Nutzerfreundlichkeit:
- Bessere Bildkomposition und Aufnahme:In schwach beleuchteten Szenen kann eine Standard-Kameravorschau völlig schwarz sein. LLB hellt den Sucher auf, sodass Nutzer sehen können, was sie aufnehmen, bevor sie auf den Auslöser drücken. Für diese Funktion können Sie den Nachtmodus verwenden, um das bestmögliche Foto bei wenig Licht zu erhalten, oder Sie können LLB verwenden, um ein Foto zu erhalten, das genau dem entspricht, was der Nutzer sieht.
- Zuverlässiges Scannen:QR-Codes sind überall zu finden, aber das Scannen in einem dunklen Restaurant oder Parkhaus ist oft frustrierend. Mit einem deutlich helleren Kamerafeed können Scan-Algorithmen QR-Codes auch in sehr dunklen Umgebungen zuverlässig erkennen und decodieren.
- Verbesserte Interaktionen:Bei Apps mit Live-Videointeraktionen (z. B. KI-Assistenten oder Videoanrufe) erhöht LLB die Menge an wahrnehmbaren Informationen, sodass die Modelle für maschinelles Sehen genügend Daten zur Verfügung haben.
Der Unterschied bei Instagram
Das Entwicklungsteam hinter der Android-App von Instagram arbeitet ständig daran, Nutzern ein optimales Kameraerlebnis zu bieten. Im obigen Beispiel sehen Sie, wie viel Unterschied LLB auf einem Pixel 10 Pro macht.
Der Unterschied für die Nutzerfreundlichkeit ist leicht vorstellbar. Wenn Nutzer nicht sehen können, was sie aufnehmen, ist die Wahrscheinlichkeit höher, dass sie die Aufnahme abbrechen.
Implementierung auswählen
Es gibt zwei Möglichkeiten, den Low Light-Modus zu implementieren, um auf möglichst vielen Geräten die bestmögliche Nutzerfreundlichkeit zu bieten:
- Low Light-Modus AE:Dies ist ein Auto-Exposure-Modus (AE) auf Hardwareebene. Er bietet die höchste Qualität und Leistung, da er die Image Signal Processor-Pipeline (ISP) direkt feinabstimmt. Prüfen Sie zuerst, ob dieser Modus verfügbar ist.
- Google Low Light-Modus:Wenn das Gerät den AE-Modus nicht unterstützt, können Sie auf diese softwarebasierte Lösung zurückgreifen, die von Google Play-Diensten bereitgestellt wird. Dabei wird der Kamerastream nach der Aufnahme verarbeitet, um ihn aufzuhellen. Da es sich um eine reine Softwarelösung handelt, ist sie auf mehr Geräten verfügbar. Mit dieser Implementierung können Sie LLB also auf mehr Geräten anbieten.
Low Light-Modus AE (Hardware)
Mechanismus:
Dieser Modus wird auf Geräten mit Android 15 und höher unterstützt. Der OEM muss die Unterstützung in HAL implementiert haben (derzeit auf Pixel 10-Geräten verfügbar). Er ist direkt in den Image Signal Processor (ISP) der Kamera integriert. Wenn Sie CaptureRequest.CONTROL_AE_MODE auf CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY setzen, übernimmt das Kamerasystem die Steuerung.
Verhalten:
HAL/ISP analysiert die Szene und passt die Sensor- und Verarbeitungsparameter an, oft auch die Belichtungszeit, um das Bild aufzuhellen. Dadurch können Frames mit einem deutlich verbesserten Signal-Rausch-Verhältnis (SNR) entstehen, da der Sensor durch die längere Belichtungszeit mehr Lichtinformationen erfassen kann als durch eine Erhöhung der digitalen Sensorverstärkung (ISO).
Vorteil:
Potenziell bessere Bildqualität und Energieeffizienz, da spezielle Hardwarepfade genutzt werden.
Nachteil:
Bei sehr dunklen Bedingungen kann die Framerate sinken, da der Sensor mehr Zeit benötigt, um Licht zu erfassen. Bei sehr wenig Licht kann die Framerate auf bis zu 10 FPS sinken.
Google Low Light-Modus (Software über Google Play-Dienste)
Mechanismus:
Bei dieser Lösung, die als optionales Modul über Google Play-Dienste bereitgestellt wird, wird der Kamerastream nach der Aufnahme verarbeitet. Dabei wird eine ausgefeilte Technologie zur Bildverbesserung in Echtzeit namens HDRNet verwendet.
Google HDRNet:
Dieses Deep-Learning-Modell analysiert das Bild mit einer niedrigeren Auflösung, um eine kompakte Reihe von Parametern (ein bilaterales Raster) vorherzusagen. Dieses Raster steuert dann die effiziente, räumlich variierende Verbesserung des Bildes mit voller Auflösung auf der GPU. Das Modell ist darauf trainiert, die Bildqualität bei wenig Licht aufzuhellen und zu verbessern, wobei der Fokus auf der Sichtbarkeit von Gesichtern liegt.
Prozessorchestrierung:
Das HDRNet-Modell und die zugehörige Logik werden vom Low Light-Modus-Prozessor orchestriert. Dazu zählen die folgenden Funktionen und Dienste:
-
Szenenanalyse:
Ein benutzerdefinierter Rechner, der die tatsächliche Helligkeit der Szene anhand von Kamerametadaten (Sensorempfindlichkeit, Belichtungszeit usw.) und Bildinhalten schätzt. Diese Analyse bestimmt die Boost-Stufe. -
HDRNet-Verarbeitung:
Das HDRNet-Modell wird angewendet, um den Frame aufzuhellen. Das verwendete Modell ist für Szenen bei wenig Licht optimiert und für die Echtzeitleistung optimiert. -
Überblenden:
Die ursprünglichen und die mit HDRNet verarbeiteten Frames werden überblendet. Die Menge der angewendeten Überblendung wird dynamisch vom Rechner für die Szenenhelligkeit gesteuert, um einen reibungslosen Übergang zwischen dem Boost-Modus und dem normalen Modus zu gewährleisten.
Vorteil:
Funktioniert auf einer größeren Auswahl von Geräten (derzeit werden Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra und Pixel 6 bis Pixel 9 unterstützt), ohne dass eine spezielle HAL-Unterstützung erforderlich ist. Die Framerate der Kamera bleibt erhalten, da es sich um einen Effekt handelt, der nach der Aufnahme angewendet wird.
Nachteil:
Da es sich um eine Methode handelt, die nach der Aufnahme angewendet wird, ist die Qualität durch die Informationen in den vom Sensor gelieferten Frames begrenzt. Details, die aufgrund extremer Dunkelheit auf Sensorebene verloren gegangen sind, können nicht wiederhergestellt werden.
Mit Hardware- und Softwarepfaden bietet Low Light Boost eine skalierbare Lösung zur Verbesserung der Kameraleistung bei wenig Licht im gesamten Android-Ökosystem. Entwickler sollten den AE-Modus nach Möglichkeit priorisieren und den Google Low Light-Modus als robuste Fallback-Lösung verwenden.
Low Light-Modus in Ihrer App implementieren
Sehen wir uns nun an, wie Sie beide LLB-Optionen implementieren können. Sie können die folgenden Schritte ausführen, unabhängig davon, ob Sie CameraX oder Camera2 in Ihrer App verwenden. Für die besten Ergebnisse empfehlen wir, sowohl Schritt 1 als auch Schritt 2 zu implementieren.
Schritt 1: Low Light-Modus AE
Der LLB AE-Modus ist auf ausgewählten Geräten mit Android 15 und höher verfügbar und funktioniert als spezieller Auto-Exposure-Modus (AE).
1. Verfügbarkeit prüfen
Prüfen Sie zuerst, ob das Kameragerät den LLB AE-Modus unterstützt.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. Modus aktivieren
Wenn der Modus unterstützt wird, können Sie ihn mit dem CameraControl-Objekt von CameraX aktivieren.
// 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. Status überwachen
Nur weil Sie den Modus angefordert haben, bedeutet das nicht, dass er gerade aktiv ist. Das System aktiviert den Boost nur, wenn die Szene tatsächlich dunkel ist. Sie können einen Observer einrichten, um die UI zu aktualisieren (z. B. ein Mondsymbol anzuzeigen), oder mit der Erweiterungsfunktion asFlow() zu einem Flow konvertieren.
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}
Den vollständigen Leitfaden zum Low Light-Modus AE finden Sie hier.
Schritt 2: Google Low Light-Modus
Für Geräte, die den Hardware-AE-Modus nicht unterstützen, ist der Google Low Light-Modus eine leistungsstarke Fallback-Lösung. Dabei wird eine LowLightBoostSession verwendet, um den Stream abzufangen und aufzuhellen.
1. Abhängigkeiten hinzufügen
Diese Funktion wird über Google Play-Dienste bereitgestellt.
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. Client initialisieren
Bevor Sie die Kamera starten, prüfen Sie mit LowLightBoostClient, ob das Modul installiert ist und das Gerät unterstützt wird.
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. LLB-Sitzung erstellen
Google LLB verarbeitet jeden Frame. Sie müssen also die Display-Surface an die LowLightBoostSession übergeben. Sie erhalten dann eine Surface zurück, auf die die Aufhellung angewendet wurde. Bei Camera2-Apps können Sie die resultierende Surface mit CaptureRequest.Builder.addTarget() hinzufügen. Bei CameraX passt diese Verarbeitungspipeline am besten zur CameraEffect-Klasse. Dort können Sie den Effekt mit einem SurfaceProcessor anwenden und ihn mit einem SurfaceProvider an Ihre Vorschau zurückgeben, wie in diesem Code zu sehen.
// With a SurfaceOutput from SurfaceProcessor.onSurfaceOutput() and a
// SurfaceRequest from Preview.SurfaceProvider.onSurfaceRequested(),
// create a LLB Session.
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. Metadaten übergeben
Damit der Algorithmus funktioniert, muss er den Auto-Exposure-Status der Kamera analysieren. Sie müssen die Aufnahmeergebnisse an die LLB-Sitzung zurückgeben. In CameraX können Sie dazu Preview.Builder mit Camera2Interop.Extender.setSessionCaptureCallback() erweitern.
Camera2Interop.Extender(previewBuilder).setSessionCaptureCallback(
object : CameraCaptureSession.CaptureCallback() {
override fun onCaptureCompleted(
session: CameraCaptureSession,
request: CaptureRequest,
result: TotalCaptureResult
) {
super.onCaptureCompleted(session, request, result)
llbSession?.processCaptureResult(result)
}
}
)
Eine detaillierte Anleitung zur Implementierung für den Client und die Sitzung finden Sie im Leitfaden zum Google Low Light-Modus.
Nächste Schritte
Wenn Sie diese beiden Optionen implementieren, können Ihre Nutzer unabhängig von den Lichtverhältnissen klar sehen, zuverlässig scannen und effektiv interagieren.
Wenn Sie diese Funktionen in einem vollständigen, produktionsreifen Code sehen möchten, sehen Sie sich die Jetpack Camera App auf GitHub an. Dort werden sowohl der LLB AE-Modus als auch der Google Low Light-Modus implementiert. So erhalten Sie eine Referenz für Ihre eigene Integration.
Weiterlesen
-
Neuigkeiten zum Produkt
Android 17 hat die Beta 4 erreicht, die letzte geplante Beta dieses Releasezyklus. Das ist ein wichtiger Meilenstein für die App-Kompatibilität und die Plattformstabilität.
Daniel Galpin • Lesezeit: 4 Minuten
-
Neuigkeiten zum Produkt
Google Play soll so sicher und vertrauenswürdig wie möglich sein. Heute kündigen wir eine Reihe neuer Richtlinienaktualisierungen und eine Funktion zur Kontoübertragung an, um den Datenschutz für Nutzer zu verbessern und Ihr Unternehmen vor Betrug zu schützen.
Bennet Manuel • Lesezeit: 3 Minuten
-
Neuigkeiten zum Produkt
Das Testen von Interaktionen auf mehreren Geräten ist mit dem Android-Emulator jetzt einfacher denn je.
Steven Jenkins • Lesezeit: 2 Minuten
Auf dem Laufenden bleiben
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.