Vor Kurzem haben wir darüber berichtet, wie Instagram es Nutzern ermöglicht, mit dem Nachtmodus 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 im Moment des Auslösens. 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-Modus sofort bei der Live-Vorschau und bei Videoaufnahmen. Der Low Light-Modus 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 dem Low Light-Modus 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 endgültige Bildqualität verbessern, während der Low Light-Modus die Nutzerfreundlichkeit und Interaktivität in dunklen Umgebungen verbessern soll. Ein weiterer wichtiger Faktor ist, dass der Low Light-Modus und der Nachtmodus zwar sehr gut zusammenarbeiten, aber auch unabhängig voneinander verwendet werden können. In einigen Anwendungsfällen ist der Low Light-Modus allein nützlich, wenn keine Fotos im Nachtmodus erforderlich sind. So verbessert der Low Light-Modus die Nutzerfreundlichkeit:
- Bessere Bildkomposition und Aufnahme: In schwach beleuchteten Szenen kann eine Standard-Kameravorschau völlig schwarz sein. Der Low Light-Modus 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 beste Ergebnis bei wenig Licht zu erzielen, oder Sie können dem Nutzer mit dem Low Light-Modus ein Foto mit dem WYSIWYG-Prinzip (What You See Is What You Get) liefern.
- Zuverlässiges Scannen: QR-Codes sind allgegenwärtig, 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 der Low Light-Modus die Menge an wahrnehmbaren Informationen, sodass die Modelle für maschinelles Sehen genügend Daten für die Verarbeitung haben.
Der Unterschied bei Instagram
Das Entwicklungsteam hinter der Android-Instagram-App arbeitet ständig daran, Nutzern ein optimales Kameraerlebnis zu bieten. Im obigen Beispiel sehen Sie, wie groß der Unterschied ist, den der Low Light-Modus 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 beste 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 optimiert. Prüfen Sie zuerst immer, 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 den Google Play-Diensten bereitgestellt wird. Sie wendet eine Nachbearbeitung auf den Kamerastream an, 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 den Low Light-Modus 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 Bilder mit einem deutlich verbesserten Signal-Rausch-Verhältnis (SNR) erzielt werden, 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:
Diese Lösung wird als optionales Modul über die Google Play-Dienste bereitgestellt und wendet eine Nachbearbeitung auf den Kamerastream an. Dabei wird eine ausgefeilte Echtzeit-Bildverbesserungstechnologie 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:
- 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:
Wendet das HDRNet-Modell an, um das Bild aufzuhellen. Das verwendete Modell ist für Szenen bei wenig Licht optimiert und für die Echtzeitleistung optimiert. - Überblendung:
Die Originalbilder und die mit HDRNet verarbeiteten Bilder 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 Samsung S22 Ultra, S23 Ultra, S24 Ultra, S25 Ultra und Pixel 6 bis Pixel 9) ohne spezielle HAL-Unterstützung. Die Framerate der Kamera bleibt erhalten, da es sich um einen Nachbearbeitungseffekt handelt.
Nachteil:
Als Nachbearbeitungsmethode ist die Qualität durch die Informationen in den vom Sensor gelieferten Bildern begrenzt. Details, die aufgrund extremer Dunkelheit auf Sensorebene verloren gegangen sind, können nicht wiederhergestellt werden.
Mit Hardware- und Softwarepfaden bietet der Low Light-Modus 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 Low Light-Modus-Angebote 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 Low Light-Modus AE ist auf ausgewählten Geräten mit Android 15 und höher verfügbar und funktioniert als spezifischer Auto-Exposure-Modus (AE).
1. Verfügbarkeit prüfen
Prüfen Sie zuerst, ob das Kameragerät den Low Light-Modus AE unterstützt.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. Modus aktivieren
Wenn der Modus unterstützt wird, können Sie den Low Light-Modus AE 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 „boostet“. 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() in einen 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. Er verwendet eine LowLightBoostSession, um den Stream abzufangen und aufzuhellen.
1. Abhängigkeiten hinzufügen
Diese Funktion wird über die 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 dem 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. Low Light-Modus-Sitzung erstellen
Der Google Low Light-Modus verarbeitet jedes Bild. Sie müssen also die Displayoberfläche an die LowLightBoostSession übergeben. Sie erhalten dann eine Oberfläche zurück, auf die die Aufhellung angewendet wurde. Bei Camera2-Apps können Sie die resultierende Oberfläche mit CaptureRequest.Builder.addTarget() hinzufügen. Bei CameraX entspricht diese Verarbeitungspipeline am besten der CameraEffect-Klasse, in der Sie den Effekt mit einem SurfaceProcessor anwenden und mit einem SurfaceProvider an die Vorschau zurückgeben können, 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 Low Light-Modus-Sitzung zurückgeben. In CameraX können Sie dies tun, indem Sie 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. Sie implementiert sowohl den Low Light-Modus AE als auch den Google Low Light-Modus und bietet Ihnen eine Referenz für Ihre eigene Integration.
-
ProduktneuheitenGoogle Play legt größten Wert auf ein sicheres Onlineerlebnis und den Schutz von Nutzern vor Schaden.
Paul Feng • 2 Minuten Lesezeit -
ProduktneuheitenHeute feiern wir offiziell den fünften Geburtstag von Jetpack Compose 1.0. Von Version 1.0, die am 28. Juli 2021 angekündigt wurde, bis zur neuesten Version 1.11 haben sich die APIs im Laufe der Jahre erheblich weiterentwickelt. Das ist ein Grund zum Feiern.
Rebecca Franks, Nick Butcher, Loryn Hairston • 5 Minuten Lesezeit -
ProduktneuheitenAndroid Studio Quail 2 ist jetzt stabil und kann in der Produktion verwendet werden. Es bietet eine neue IDE mit gleichzeitigen agentenbasierten Workflows, nativ integrierter Speicherleckprofilerstellung und kontextbezogener Fehlerbehebung.
Amman Asfaw • 3 Minuten Lesezeit
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.