Wir haben vor Kurzem 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 Zeit bleibt, mehrere Belichtungen zu kombinieren, um eine hochwertige statische Aufnahme zu erstellen. Aber was ist mit den Momenten zwischen den Fotos? Nutzer müssen mehr mit der Kamera interagieren, als nur den Auslöser zu drücken. Außerdem verwenden sie die Vorschau, um die Szene zu komponieren oder QR-Codes zu scannen.
Heute geht es um den Low Light-Modus, eine leistungsstarke Funktion, mit der Kamerastreams in Echtzeit aufgehellt werden können. Im Gegensatz zum Nachtmodus, bei dem du das Smartphone während der Aufnahme ruhig halten musst, funktioniert die Funktion „Optimierung bei wenig Licht“ sofort in der Live-Vorschau und bei Videoaufnahmen. Die Funktion passt die Aufhellung automatisch an das verfügbare Licht an und ist so für jede Umgebung optimiert.
Mit einem kürzlich veröffentlichten Update können Instagram-Nutzer mit dem LLB den perfekten Bildausschnitt wählen. Die vorhandene Nachtmodus-Implementierung sorgt dann für dieselben hochwertigen Fotos bei schlechten Lichtverhältnissen, die Nutzer seit über einem Jahr schätzen.
Warum die Echtzeit-Helligkeit wichtig ist
Während der Nachtmodus die Bildqualität des endgültigen Bildes verbessern soll, ist der Low Light-Modus für die Nutzerfreundlichkeit und Interaktivität in dunklen Umgebungen gedacht. Ein weiterer wichtiger Faktor ist, dass du die Funktion „Bei schwachem Licht“ und den Nachtmodus unabhängig voneinander verwenden kannst, auch wenn sie sehr gut zusammenarbeiten. In einigen dieser Anwendungsfälle wirst du sehen, dass die Funktion „Bei schwachem Licht“ auch ohne den Nachtmodus nützlich ist. So verbessert LLB die Nutzerfreundlichkeit:
- Bessere Bildkomposition und Aufnahme:Bei schlechten Lichtverhältnissen kann die Standard-Kameravorschau komplett schwarz sein. Mit der Funktion „Vorschau bei wenig Licht“ wird der Sucher aufgehellt, sodass Nutzer sehen können, was sie aufnehmen, bevor sie den Auslöser drücken. Für diese Funktion kannst du den Nachtmodus verwenden, um die beste Qualität bei schlechten Lichtverhältnissen zu erzielen, oder du kannst den Low Light-Modus verwenden, um dem Nutzer ein „What you see is what you get“-Fotoergebnis zu liefern.
- Zuverlässiges Scannen:QR-Codes sind allgegenwärtig, aber das Scannen in einem dunklen Restaurant oder Parkhaus ist oft frustrierend. Durch den 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 der wahrnehmbaren Informationen, sodass die Computer-Vision-Modelle genügend Daten haben, mit denen sie arbeiten können.
Der Unterschied bei Instagram
Das Entwicklerteam der Android-App von Instagram arbeitet ständig daran, den Nutzern eine hochmoderne Kamerafunktion zu bieten. Im Beispiel oben siehst du, welchen Unterschied die Funktion „Nachtsicht“ auf dem Pixel 10 Pro macht.
Es ist leicht vorstellbar, welchen Unterschied dies für die Nutzererfahrung macht. 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 Leistung zu erzielen:
- AE-Modus für Low Light-Modus:Dies ist ein automatischer Belichtungsmodus auf Hardwareebene. Sie bietet die höchste Qualität und Leistung, da die Bildverarbeitungsprozessor-Pipeline direkt optimiert wird. Prüfen Sie dies immer zuerst.
- Google Low Light Boost:Wenn das Gerät den AE-Modus nicht unterstützt, kannst du auf diese softwarebasierte Lösung zurückgreifen, die von den Google Play-Diensten bereitgestellt wird. Der Kamerastream wird nachbearbeitet, 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 also mehr Geräte mit LLB erreichen.
AE-Modus für Low Light-Modus (Hardware)
Mechanismus:
Dieser Modus wird auf Geräten mit Android 15 und höher unterstützt und erfordert, dass der OEM die Unterstützung in HAL implementiert hat (derzeit auf Pixel 10-Geräten verfügbar). Es ist direkt in den Bildverarbeitungsprozessor (ISP) der Kamera integriert. Wenn du CaptureRequest.CONTROL_AE_MODE auf CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY setzt, übernimmt das Kamerasystem die Steuerung.
Verhalten:
Der HAL/ISP analysiert die Szene und passt die Sensor- und Verarbeitungsparameter an, um das Bild aufzuhellen. Dazu wird häufig die Belichtungszeit erhöht. 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, anstatt die digitale Sensorverstärkung (ISO) zu erhöhen.
Vorteil:
Potenziell bessere Bildqualität und Energieeffizienz, da dedizierte Hardwarepfade genutzt werden.
Kompromiss:
Kann bei sehr dunklen Bedingungen zu einer niedrigeren Framerate führen, da der Sensor mehr Zeit benötigt, um Licht einzufangen. Bei sehr schlechten Lichtverhältnissen kann die Framerate auf bis zu 10 fps sinken.
Google Low Light Boost (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 hochentwickelte Technologie zur Bildoptimierung in Echtzeit namens HDRNet verwendet.
Google HDRNet:
Dieses Deep-Learning-Modell analysiert das Bild mit einer niedrigeren Auflösung, um eine kompakte Gruppe von Parametern (ein bilaterales Raster) vorherzusagen. Dieses Raster dient dann als Grundlage für die effiziente, räumlich variierende Verbesserung des Bildes mit voller Auflösung auf der GPU. Das Modell ist darauf trainiert, die Bildqualität bei schlechten Lichtverhältnissen zu verbessern und die Sichtbarkeit von Gesichtern zu erhöhen.
Prozess-Orchestrierung:
Das HDRNet-Modell und die zugehörige Logik werden vom Low Light Boost-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 mit wenig Licht optimiert und für die Echtzeitleistung optimiert. - Zusammenführen:
Die Originalframes und die von HDRNet verarbeiteten Frames werden zusammengeführt. Der Grad der Überblendung wird dynamisch vom Helligkeitsrechner der Szene gesteuert, um einen flüssigen Übergang zwischen dem verstärkten und dem nicht verstärkten Zustand zu ermöglichen.
Vorteil:
Funktioniert auf einer größeren Auswahl an 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 Nachbearbeitungseffekt handelt.
Kompromiss:
Da es sich um eine Nachbearbeitungsmethode handelt, 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.
Durch die Kombination von Hardware- und Software-Ansätzen bietet der Low Light-Modus eine skalierbare Lösung, um die Kameraleistung bei schlechten Lichtverhältnissen im gesamten Android-Ökosystem zu verbessern. Entwickler sollten den AE-Modus priorisieren, sofern verfügbar, und die Google-Funktion „Nachtsicht-Boost“ als robuste Fallback-Option verwenden.
Low Light Boost in Ihrer App implementieren
Sehen wir uns nun an, wie die beiden LLB-Angebote implementiert werden. Sie können die folgenden Schritte implementieren, 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: AE-Modus für Low Light-Modus
Der LLB-AE-Modus ist auf ausgewählten Geräten mit Android 15 und höher verfügbar und fungiert als spezieller Auto-Exposure-Modus (AE).
1. Verfügbarkeit prüfen
Prüfe zuerst, ob das Kameragerät den LLB-AE-Modus unterstützt.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val isLlbSupported = cameraInfo.isLowLightBoostSupported
2. Modus aktivieren
Falls unterstützt, können Sie den LLB-AE-Modus 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 du den Modus angefordert hast, bedeutet das nicht, dass er gerade aktiv ist. Das System aktiviert die Optimierung nur, wenn die Szene tatsächlich dunkel ist. Sie können einen Observer einrichten, um die Benutzeroberfläche 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)
}
}Hier findest du den vollständigen Leitfaden zum AE-Modus für die Funktion „Nachtmodus-Boost“.
Schritt 2: Google Low Light Boost
Bei Geräten, die den Hardware-AE-Modus nicht unterstützen, dient die Google-Funktion „Low Light Boost“ als leistungsstarke Alternative. Dabei wird eine LowLightBoostSession verwendet, 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. LLB-Sitzung erstellen
Google LLB verarbeitet jeden Frame. Du musst also deine Display-Surface an die LowLightBoostSession übergeben, die dir dann eine Surface mit der angewendeten Aufhellung zurückgibt. Bei Camera2-Apps können Sie die resultierende Oberfläche mit CaptureRequest.Builder.addTarget() hinzufügen. Bei CameraX passt diese Verarbeitungspipeline am besten zur Klasse CameraEffect. Hier können Sie den Effekt mit einem SurfaceProcessor anwenden und mit einem SurfaceProvider wieder in der Vorschau bereitstellen, wie in diesem Code zu sehen ist.
// 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 Status der automatischen Belichtung der Kamera analysieren. Sie müssen die Erfassungsergebnisse an die LLB-Sitzung zurückgeben. In CameraX können Sie dazu Ihren 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 findest du im Leitfaden zur Google-Funktion „Low Light Boost“.
Nächste Schritte
Durch die Implementierung dieser beiden Optionen können Nutzer unabhängig von den Lichtverhältnissen alles gut sehen, zuverlässig scannen und effektiv interagieren.
Wenn Sie diese Funktionen in einer vollständigen, produktionsreifen Codebasis in Aktion sehen möchten, sehen Sie sich die Jetpack Camera App auf GitHub an. Es implementiert sowohl den LLB AE-Modus als auch Google LLB und bietet Ihnen eine Referenz für Ihre eigene Integration.
-
ProduktneuigkeitenApps, die auf die kommende Android-Version ausgerichtet sind, können mit der Berechtigung WRITE_CONTACTS nicht mehr direkt in Kontakte schreiben.
Roxanna Aliabadi Walker • Lesezeit: 6 Minuten -
ProduktneuigkeitenDie Entwicklung von KI-Agenten schreitet rasant voran und die Android-Entwicklung erreicht einen spannenden neuen Meilenstein: von der unterstützenden Codevervollständigung hin zu KI-Agenten, die unter Ihrer Anleitung End-to-End-Aufgaben ausführen. Sie haben die volle Auswahl und Flexibilität bei den Modellen und Agents, die Sie verwenden.
Jason Buchel • Lesezeit: 3 Minuten -
ProduktneuigkeitenHeute haben wir euch gezeigt, wie wir unsere Vision „Mehr als nur ein Store“ weiterentwickeln. Vom Tab „Mein Play“, der mittlerweile die persönliche Anlaufstelle für über 250 Millionen monatlich aktive Nutzer ist, bis hin zu unserer einheitlichen Gaming-Plattform, die über 700 Millionen Spielerprofile verbindet – Google Play ist immer da, wo die Nutzer sind.
Paul Feng • Lesezeit: 3 Minuten
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.