Wir haben kürzlich darüber berichtet, wie Nutzer mit dem Nachtmodus auf Instagram beeindruckende Fotos bei wenig Licht aufnehmen können. Diese Funktion eignet sich perfekt für Standbilder, bei denen genügend Zeit ist, mehrere Belichtungen zu kombinieren, um ein hochwertiges statisches Bild zu erstellen. Aber was ist mit den Momenten, die zwischen den Fotos passieren? Nutzer müssen mehr mit der Kamera interagieren als nur im Moment des Auslösens. Sie können die Vorschau auch verwenden, um eine Szene zu komponieren oder QR‑Codes zu scannen.
Heute geht es um Low Light-Modus (LLB), eine leistungsstarke Funktion, mit der Kamerastreams in Echtzeit aufgehellt werden. Im Gegensatz zum Nachtmodus, bei dem das Smartphone während der Aufnahme still gehalten werden muss, funktioniert die Funktion „Optimierung bei wenig Licht“ sofort in der Live-Vorschau und bei Videoaufnahmen. LLB passt die erforderliche Aufhellung automatisch an das verfügbare Licht an und ist so für jede Umgebung optimiert.
Mit einem aktuellen Update können Instagram-Nutzer mit LLB das perfekte Bild ausrichten. Die vorhandene Nachtmodus-Implementierung sorgt dann für die gleiche hohe Qualität bei Fotos, die bei schlechten Lichtverhältnissen aufgenommen werden, die Nutzer seit über einem Jahr gewohnt sind.
Warum die Echtzeit-Helligkeit wichtig ist
Der Nachtmodus soll die Qualität des endgültigen Bildes verbessern, während der Low Light-Modus die Bedienbarkeit 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. Wie Sie an einigen dieser Anwendungsfälle sehen, ist LLB auch dann nützlich, wenn keine Fotos im Nachtmodus benötigt werden. So verbessert LLB die Nutzerfreundlichkeit:
- Bessere Bildgestaltung und Aufnahme:Bei schwach beleuchteten Szenen kann eine Standard-Kameravorschau pechschwarz sein. LLB hellt den Sucher auf, sodass Nutzer sehen können, was sie gerade einrahmen, bevor sie auf den Auslöser drücken. Für diese Funktion können Sie den Nachtmodus verwenden, um die bestmögliche Qualität bei schlechten Lichtverhältnissen zu erzielen. Alternativ kann LLB dem Nutzer ein Fotoergebnis liefern, das dem entspricht, was er sieht.
- Zuverlässiges Scannen:QR‑Codes sind überall zu finden, aber das Scannen in einem dunklen Restaurant oder einer dunklen Parkgarage ist oft frustrierend. Mit einem deutlich helleren Kamerabild können Scan-Algorithmen QR-Codes auch in sehr dunklen Umgebungen zuverlässig erkennen und decodieren.
- Erweiterte Interaktionen:Bei Apps mit Live-Videointeraktionen (z. B. KI-Assistenten oder Videoanrufe) erhöht LLB die Menge an wahrnehmbaren Informationen, sodass die Computer-Vision-Modelle genügend Daten für die Verarbeitung haben.
Der Unterschied bei Instagram
Das Entwicklerteam hinter der Android-Instagram-App arbeitet ständig daran, den Nutzern eine moderne Kamera zu bieten. Im obigen Beispiel sehen Sie, was für einen Unterschied LLB auf einem Pixel 10 Pro macht.
Es ist leicht vorstellbar, wie sich das auf die Nutzerfreundlichkeit auswirkt. 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, Low Light Boost zu implementieren, um die beste Leistung auf einer Vielzahl von Geräten zu erzielen:
- Low Light Boost AE Mode (Modus für automatische Belichtung mit Low Light Boost): Dies ist ein Modus für die automatische Belichtung auf Hardwareebene. Sie bietet die höchste Qualität und Leistung, da sie die ISP-Pipeline (Image Signal Processor) direkt optimiert. Prüfen Sie das immer zuerst.
- Google Low Light Boost: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. Es wird eine Nachbearbeitung auf den Kamerastream angewendet, 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.
Low Light Boost-AE-Modus (Hardware)
Funktionsweise:
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). Sie ist direkt in den Bildsignalprozessor (Image Signal Processor, ISP) der Kamera integriert. Wenn Sie CaptureRequest.CONTROL_AE_MODE auf CameraMetadata.CONTROL_AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY festlegen, übernimmt das Kamerasystem die Steuerung.
Verhalten:
Das HAL/ISP analysiert die Szene und passt die Sensor- und Verarbeitungsparameter an. Dazu gehört oft auch eine längere 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 verlängerte Belichtungszeit und nicht durch eine Erhöhung der digitalen Sensorverstärkung (ISO) mehr Lichtinformationen erfassen kann.
Vorteil:
Potenziell bessere Bildqualität und Energieeffizienz, da dedizierte Hardwarepfade genutzt werden.
Nachteil
Bei sehr dunklen Bedingungen kann es zu einer niedrigeren Bildrate kommen, da der Sensor mehr Zeit benötigt, um Licht aufzunehmen. 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, die als optionales Modul über die Google Play-Dienste verteilt wird, 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 Optimierung des Bildes mit voller Auflösung auf der GPU. Das Modell ist darauf trainiert, die Bildqualität bei schlechten Lichtverhältnissen zu verbessern und aufzuhellen. Dabei wird besonderes Augenmerk auf die Sichtbarkeit von Gesichtern gelegt.
Prozessorchestration
:Das HDRNet-Modell und die zugehörige Logik werden vom Low Light Boost-Prozessor orchestriert. Dazu zählen die folgenden Funktionen und Dienste:
- Szenenanalyse
:Ein benutzerdefinierter Rechner, der die tatsächliche Helligkeit der Szene anhand von Kamerametadaten (Sensor-Empfindlichkeit, Belichtungszeit usw.) und Bildinhalten schätzt. Bei dieser Analyse wird das Boost-Niveau ermittelt. - 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. - Blending:
Die Original- und die von HDRNet verarbeiteten Frames werden zusammengeführt. Die Stärke der Überblendung wird dynamisch vom Helligkeitsrechner für Szenen gesteuert, um einen reibungslosen Übergang zwischen dem verstärkten und dem nicht verstärkten Zustand zu gewährleisten.
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 bestimmte HAL-Unterstützung erforderlich ist. Die Bildrate der Kamera bleibt unverändert, da es sich um einen Nachbearbeitungseffekt handelt.
Nachteil
:Als Nachbearbeitungsmethode ist die Qualität durch die Informationen begrenzt, die in den vom Sensor gelieferten Frames enthalten sind. Es kann keine Details wiederherstellen, die aufgrund extremer Dunkelheit auf Sensorebene verloren gegangen sind.
Da sowohl Hardware- als auch Softwarelösungen angeboten werden, ist der Low Light-Modus eine skalierbare Lösung, um die Kamerafunktionen bei wenig Licht im gesamten Android-Ökosystem zu verbessern. Entwickler sollten den AE-Modus nach Möglichkeit priorisieren und Google Low Light Boost als robusten Fallback verwenden.
Low Light-Modus in Ihre App implementieren
Sehen wir uns nun an, wie Sie beide LLB-Angebote implementieren. Sie können die folgenden Schritte unabhängig davon ausführen, ob Sie CameraX oder Camera2 in Ihrer App verwenden. Für optimale Ergebnisse empfehlen wir, sowohl Schritt 1 als auch Schritt 2 auszuführen.
Schritt 1: Low Light Boost-AE-Modus
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
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 Sie den Modus angefordert haben, bedeutet das nicht, dass er derzeit „geboostet“ wird. Das System aktiviert die Verstärkung 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 zu konvertieren.
if (isLlbSupported) {
camera?.cameraInfo.lowLightBoostState.asFlow().collectLatest { state ->
// Update UI accordingly
updateMoonIcon(state == LowLightBoostState.ACTIVE)
}
}Den vollständigen Leitfaden zum AE-Modus „Low Light Boost“ finden Sie hier.
Schritt 2: Google Low Light Boost
Für Geräte, die den Hardware-AE-Modus nicht unterstützen, ist Google Low Light Boost eine leistungsstarke Alternative. Dazu 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, sollten Sie mit LowLightBoostClient prüfen, 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 Ihre Display-Surface an LowLightBoostSession übergeben und erhalten 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 entspricht diese Verarbeitungspipeline am besten der Klasse CameraEffect. 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 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 Zustand der automatischen Belichtung der Kamera analysieren. Sie müssen die Capture-Ergebnisse an die LLB-Sitzung zurückgeben. In CameraX kann dies durch Erweitern von Preview.Builder mit Camera2Interop.Extender.setSessionCaptureCallback() erfolgen.
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 des Clients und der Sitzung finden Sie im Google Low Light Boost-Leitfaden.
Nächste Schritte
Wenn Sie diese beiden Optionen implementieren, können Ihre Nutzer unabhängig von den Lichtverhältnissen alles deutlich 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. Es implementiert sowohl den LLB AE-Modus als auch Google LLB und bietet Ihnen so eine Referenz für Ihre eigene Integration.
Weiterlesen
-
Produktneuheiten
Die KI-Workflows und ‑Anforderungen jedes Entwicklers sind einzigartig. Daher ist es wichtig, dass Sie selbst entscheiden können, wie KI Sie bei der Entwicklung unterstützen soll. Im Januar haben wir die Möglichkeit eingeführt, ein beliebiges lokales oder Remote-KI-Modell für KI-Funktionen in Android Studio auszuwählen.
Matthew Warner • Lesezeit: 2 Minuten
-
Produktneuheiten
Android Studio Panda 3 ist jetzt stabil und kann für die Produktion verwendet werden. Mit dieser Version haben Sie noch mehr Kontrolle und können Ihre KI-basierten Workflows noch besser anpassen. So wird es noch einfacher, hochwertige Android-Apps zu entwickeln.
Matt Dyor • Lesezeit: 3 Minuten
-
Produktneuheiten
Wir bei Google möchten die leistungsstärksten KI‑Modelle direkt auf die Android-Geräte in Ihrer Tasche bringen. Heute freuen wir uns, die Veröffentlichung unseres neuesten hochmodernen offenen Modells anzukündigen: Gemma 4.
Caren Chang, David Chou • Lesezeit: 3 Minuten
Auf dem Laufenden bleiben
Lassen Sie sich Woche für Woche die neuesten Informationen zur Android-Entwicklung zusenden.