TP Icon 136

Android CameraX: Let’s take a selfie

Problem

Die Benutzung der Kamera war schon immer eine kleine Herausforderung bei Android. Nachdem Google die alte android.hardware.camera-API mit Android 5 (Lollipop) aufgrund zu geringen Funktionsumfangs als „deprecated“ markiert hat, wurde im Gegenzug die Camera2-API eingeführt. Diese ermöglicht es Hersteller und Entwickler, auch komplexe Funktionen in die Kamera zu integrieren. Im Gegenzug hat sich aber auch der Aufwand und die Komplexität der Implementierung stark erhöht.

Lösung

Um der erhöhten Komplexität entgegen zu wirken, wurde auf der Google IO 2019 die CameraX-Bibliothek vorgestellt, welche Teil des Android Jetpack Komponentensets ist. CameraX setzt auf die Camera2-API auf und kann ab Android 5 verwendet werden. Dabei wird die Idee von Use-Cases umgesetzt, um eine einfache API zu gewährleisten. Derzeit werden drei Use Cases bereitgestellt:

  • Preview: Zeigt eine Vorschau der Bilder an.
  • Image Analysis: Bietet einen Zugang zu einem Stream von Bildern zur anschließenden Weiterverarbeitung.
  • Image Capture: Speichert Bilder in hoher Auflösung.

CameraX bietet aber nicht nur verschiedene Use Cases an, sondern übernimmt auch die Konfiguration von gerätespezifischen Einstellungen. Google stellt hierfür ein eigenes Test Lab bereit, worin eine Vielzahl unterschiedlicher Geräte automatisiert getestet werden.

Außerdem wird ein optionales Add-on mit den Namen „extensions“ bereitgestellt, welches den Zugriff auf gerätespezifische Effekte (wie beispielsweise HDR-, Nacht- oder Potrait-Modus) ermöglicht.

Folgendes Snippet zeigt, mit wie wenig Aufwand der Preview-Use-Case in das System eingebunden werden kann. Das Ergebnis ist im Screenshot zu sehen.

Android CameraX Preview-Use-Case

Beispiel

private fun bindPreviewUseCase() {
    // Get screen metrics used to setup camera for full screen resolution
    val metrics = DisplayMetrics().also { textureView.display.getRealMetrics(it) }
    val screenAspectRatio = Rational(metrics.widthPixels, metrics.heightPixels)

    // Set up the view finder use case to display camera preview
    val viewFinderConfig = PreviewConfig.Builder().apply {
        setLensFacing(CameraX.LensFacing.FRONT)
        setTargetAspectRatio(screenAspectRatio)
        setTargetRotation(textureView.display.rotation)
    }.build()

    // Use the auto-fit preview builder to automatically handle size/orientation changes
    preview = AutoFitPreviewBuilder.build(viewFinderConfig, textureView)

    // Apply declared configs to CameraX using the same lifecycle owner
    CameraX.bindToLifecycle(viewLifecycleOwner, preview)
}

Weiterführende Aspekte

---

Autor: Kevin Stieglitz / Software Engineer / Business Division Automotive World

Android CameraX: Let’s take a selfie - jambit ToiletPaper

Wir verwenden Cookies, um unsere Webseite für Sie zu optimieren. Mit dem Besuch unserer Webseite erklären Sie sich damit einverstanden. // Our website is using cookies to improve your experience. By continuing to browse the site, you are agreeing to our use of cookies.

Weitere Informationen finden Sie in unserer Datenschutzerklärung. // For more information, please refer to our privacy policy.