$30 off During Our Annual Pro Sale. View Details »

After I/O Istanbul Jetpack CameraX

After I/O Istanbul Jetpack CameraX

Hadi Tok

June 29, 2019
Tweet

More Decks by Hadi Tok

Other Decks in Technology

Transcript

  1. Jetpack CameraX
    GDG Istanbul After I/O 2019

    View Slide

  2. Jetpack CameraX
    Hadi Tok
    CitizenMe
    @hadi_tok

    View Slide

  3. Android
    versiyonlari
    End
    Android Kamera API Problemleri
    Cihaz ve
    Üretici
    Çeşitliliği
    Karmaşık
    API

    View Slide

  4. CameraX nedir?
    ● Daha kolay kamera uygulamaları geliştirmeye yardımcı
    ● Açık kaynak
    ● Alpha

    View Slide

  5. Android 5+
    End
    CameraX
    Tüm köşe
    senaryolar
    kapsanmış
    Arka planda
    Camera2
    API kullanan
    basit API

    View Slide

  6. CameraX
    ● Lifecycle ile uyumlu
    ● Portrait, HDR, Night, ve Beauty
    ● Eklenti alabiliyor

    View Slide

  7. CameraX
    Ön İzleme Görüntü Analizi Görüntü
    Yakalama

    View Slide

  8. Ön İzleme

    View Slide

  9. val viewFinderConfig = PreviewConfig.Builder().build()

    View Slide

  10. val viewFinderConfig = PreviewConfig.Builder().build()
    val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)

    View Slide

  11. val viewFinderConfig = PreviewConfig.Builder().build()
    val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)
    preview.setOnPreviewOutputUpdateListener { previewOutput ->
    //use previewOutput.surfaceTexture if needed
    }

    View Slide

  12. val viewFinderConfig = PreviewConfig.Builder().build()
    val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)
    preview.setOnPreviewOutputUpdateListener { previewOutput ->
    //use previewOutput.surfaceTexture if needed
    }
    CameraX.bindToLifecycle(this, preview)

    View Slide

  13. val viewFinderConfig = PreviewConfig.Builder().build()
    val preview = AutoFitPreviewBuilder.build(viewFinderConfig, viewFinder)
    preview.setOnPreviewOutputUpdateListener { previewOutput ->
    //use previewOutput.surfaceTexture if needed
    }
    CameraX.bindToLifecycle(this, preview)

    View Slide

  14. Görüntü Analizi

    View Slide

  15. val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 730))
    .build()

    View Slide

  16. val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 730))
    .build()
    val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

    View Slide

  17. val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 730))
    .build()
    val imageAnalysis = ImageAnalysis(imageAnalysisConfig)
    imageAnalysis.setAnalyzer { imageProxy, rotationDegrees ->
    //do image analysis
    }

    View Slide

  18. val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 730))
    .build()
    val imageAnalysis = ImageAnalysis(imageAnalysisConfig)
    imageAnalysis.setAnalyzer { imageProxy, rotationDegrees ->
    //do image analysis
    }
    CameraX.bindToLifecycle(this, imageAnalysis, preview)

    View Slide

  19. val imageAnalysisConfig = ImageAnalysisConfig.Builder()
    .setTargetResolution(Size(1280, 730))
    .build()
    val imageAnalysis = ImageAnalysis(imageAnalysisConfig)
    imageAnalysis.setAnalyzer { imageProxy, rotationDegrees ->
    //do image analysis
    }
    CameraX.bindToLifecycle(this, imageAnalysis, preview)

    View Slide

  20. Görüntü Yakalama

    View Slide

  21. val imageCaptureConfig = ImageCaptureConfig.Builder()
    .build()

    View Slide

  22. val imageCaptureConfig = ImageCaptureConfig.Builder()
    .build()
    val imageCapture = ImageCapture(imageCaptureConfig)

    View Slide

  23. val imageCaptureConfig = ImageCaptureConfig.Builder()
    .build()
    val imageCapture = ImageCapture(imageCaptureConfig)
    CameraX.bindToLifecycle(
    this, preview, imageCapture, imageAnalyzer)

    View Slide

  24. val imageCaptureConfig = ImageCaptureConfig.Builder()
    .build()
    val imageCapture = ImageCapture(imageCaptureConfig)
    CameraX.bindToLifecycle(
    this, preview, imageCapture, imageAnalyzer)

    View Slide

  25. val imageSaveListener = object : ImageCapture.OnImageSavedListener {
    override fun onImageSaved(file: File) {
    //use the image file
    }
    override fun onError(useCaseError: ImageCapture.UseCaseError,
    message: String, cause: Throwable?) {
    //handle error
    }
    }

    View Slide

  26. val imageSaveListener = object : ImageCapture.OnImageSavedListener {
    override fun onImageSaved(file: File) {
    //use the image file
    }
    override fun onError(useCaseError: ImageCapture.UseCaseError,
    message: String, cause: Throwable?) {
    //handle error
    }
    }
    val photoFile = createFile(outputDirectory, FILENAME, PHOTO_EXTENSION)

    View Slide

  27. val imageSaveListener = object : ImageCapture.OnImageSavedListener {
    override fun onImageSaved(file: File) {
    //use the image file
    }
    override fun onError(useCaseError: ImageCapture.UseCaseError,
    message: String, cause: Throwable?) {
    //handle error
    }
    }
    val photoFile = createFile(outputDirectory, FILENAME, PHOTO_EXTENSION)
    imageCapture.takePicture(photoFile, imageSaveListener)

    View Slide

  28. val imageSaveListener = object : ImageCapture.OnImageSavedListener {
    override fun onImageSaved(file: File) {
    //use the image file
    }
    override fun onError(useCaseError: ImageCapture.UseCaseError,
    message: String, cause: Throwable?) {
    //handle error
    }
    }
    val photoFile = createFile(outputDirectory, FILENAME, PHOTO_EXTENSION)
    imageCapture.takePicture(photoFile, imageSaveListener)

    View Slide

  29. Kaynaklar
    ● https://developer.android.com/training/camerax
    ● https://www.youtube.com/watch?v=kuv8uK-5CLY
    ● https://github.com/android/camera/tree/master/CameraXBasic

    View Slide

  30. Hadi Tok, CitizenMe
    @hadi_tok
    Teşekkürler

    View Slide

  31. Soru-Cevap

    View Slide