quem somos - amazon s3...2019/10/11  · android l podendo ser utilizado em 90% dos celulares...

63

Upload: others

Post on 27-Feb-2021

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes
Page 2: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Quem somos

Wellington Cabral José Carlos Moura

Engenheiro de software no CESAR e professor de

Android na CESAR School

Engenheiro de software no CESAR. Associated Android

Developer

Page 3: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes
Page 4: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1

Page 5: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

2

Page 6: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

3

Page 7: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

API's Camera

Camera1Deprecated desde o Lollipop Simples, porém limitada

CameraXSimplicidade eAbstração

Camera2Substituiu a Camera1Poderosa, porém muito boilerplate

Page 8: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Camera2 API

● Requer uma "tonelada" de código● É muito complexo!● Exige que você implemente e gerencie muitos estados● Apresenta erros na parte da lanterna da câmera. Há muita confusão

sobre as diferenças entre o modo “lanterna” e o modo “flash” na Camera2.● Tratar bugs específicos do fornecedor

Page 9: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

CameraXJetpack support library

Google I/O 2019

Alpha https://developer.android.com/training/camerax

Open-source

Page 10: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

CameraX

Compatibilidade Consistência Usabilidade

● Compatível com Android L

● Podendo ser utilizado em 90% dos celulares Android.

● Usa a API do camera2

● Comportamento validado em diferentes dispositivos

● Testes realizados no Laboratório do Google

● Abstração do gerenciamento da câmera

● Flexibilidade para customização

● Menos boilerplate

Page 11: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

CameraX test lab

● Centenas de dispositivos testados● Vários fabricantes● Do Android L ao Q● 24 por 7● Vários tipos de testes:

Orientação, rotação funcional, capturar imagem, integração, casos de uso end-to-end, performance e etc.

Page 12: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

● Erros ao trocar camera front/back● Otimização de camera closures● Orientação incorreta● Flash não é disparado

Page 13: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Processo

Camera app

Camera2 API

Device HAL

Page 14: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Processo

Camera app

Camera2 API

Device HAL

Page 15: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Processo

Camera app

Camera2 API

Device HAL

CameraX

CameraX API

Page 16: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Processo

Camera app

Camera2 API

Device HAL

CameraX

CameraX API

Page 17: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Processo

Camera app

Camera2 API

Device HAL

CameraX

CameraX API

EXPERIMENTAL VERSION

Page 18: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

CameraX é Lifecycle aware

Page 19: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

CameraX é Lifecycle aware

Page 20: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes
Page 21: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1

Page 22: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1 2

Page 23: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1 2 3

Page 24: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Gradle Dependencies

def version = "1.0.0-alpha04"implementation "androidx.camera:camera-core:${version}"implementation "androidx.camera:camera-camera2:${version}"

Page 25: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Use Cases Como implementar em 3 passos?

1 2 3

Page 26: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1

Page 27: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

val previewConfig = PreviewConfig.Builder().build()

// configure preview

1

Page 28: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

val previewConfig = PreviewConfig.Builder().build()

val preview = Preview(previewConfig)

// create preview

1

Page 29: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

val previewConfig = PreviewConfig.Builder().build()

val preview = Preview(previewConfig)

// Every time the viewfinder(TextureView) is updated, recompute layoutpreview.setOnPreviewOutputUpdateListener { previewOutput: Preview.PreviewOutput? ->

// To update the SurfaceTexture, we have to remove it and re-add it val parent = viewFinder.parent as ViewGroup parent.removeView(viewFinder) parent.addView(viewFinder, 0)

viewFinder.surfaceTexture = previewOutput.surfaceTexture}

// attach output to view

1

2

Page 30: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

val previewConfig = PreviewConfig.Builder().build()

val preview = Preview(previewConfig)

// Every time the viewfinder(TextureView) is updated, recompute layoutpreview.setOnPreviewOutputUpdateListener { previewOutput: Preview.PreviewOutput? ->

// To update the SurfaceTexture, we have to remove it and re-add it val parent = viewFinder.parent as ViewGroup parent.removeView(viewFinder) parent.addView(viewFinder, 0)

viewFinder.surfaceTexture = previewOutput.surfaceTexture}

// Bind use cases to lifecycleCameraX.bindToLifecycle(this as LifecycleOwner, preview)

// attach preview to lifecycle

1

2

3

Page 31: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

val previewConfig = PreviewConfig.Builder().build()

val preview = Preview(previewConfig)

// Every time the viewfinder(TextureView) is updated, recompute layoutpreview.setOnPreviewOutputUpdateListener { previewOutput: Preview.PreviewOutput? ->

// To update the SurfaceTexture, we have to remove it and re-add it val parent = viewFinder.parent as ViewGroup parent.removeView(viewFinder) parent.addView(viewFinder, 0)

viewFinder.surfaceTexture = previewOutput.surfaceTexture}

// Bind use cases to lifecycleCameraX.bindToLifecycle(this as LifecycleOwner, preview)

// display preview on screen

Page 32: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1 2

Page 33: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageAnalysisConfig = ImageAnalysisConfig.Builder()

// configure image analysis

1

Page 34: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 720)) .build()

// set resolution

1

Page 35: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 720)) .build()

val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

// create image analysis

1

Page 36: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 720)) .build()

val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

imageAnalysis.setAnalyzer({image: ImageProxy, rotationDegrees: Int -> val cropRect = image.cropRect // insert your code here})

// attach output

1

2

Page 37: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 720)) .build()

val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

imageAnalysis.setAnalyzer({image: ImageProxy, rotationDegrees: Int -> val cropRect = image.cropRect // insert your code here})

CameraX.bindToLifecycle(this as LifecycleOwner, imageAnalysis, preview)

// attach image analysis & preview to lifecycle

1

2

3

Page 38: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageAnalysisConfig = ImageAnalysisConfig.Builder() .setTargetResolution(Size(1280, 720)) .build()

val imageAnalysis = ImageAnalysis(imageAnalysisConfig)

imageAnalysis.setAnalyzer({image: ImageProxy, rotationDegrees: Int -> val cropRect = image.cropRect // insert your code here})

CameraX.bindToLifecycle(this as LifecycleOwner, imageAnalysis, preview)

// full setup to process images

Page 39: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

1 2 3

Page 40: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageCaptureConfig = ImageCaptureConfig.Builder() .setTargetRotation(windowManager.defaultDisplay.rotation) .build()

// manage rotation

1

Page 41: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageCaptureConfig = ImageCaptureConfig.Builder() .setTargetRotation(windowManager.defaultDisplay.rotation) .build()

val imageCapture = ImageCapture(imageCaptureConfig)

// create image capture

1

Page 42: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Create configuration object for the viewfinder use caseval imageCaptureConfig = ImageCaptureConfig.Builder() .setTargetRotation(windowManager.defaultDisplay.rotation) .build()

val imageCapture = ImageCapture(imageCaptureConfig)

CameraX.bindToLifecycle(this as LifecycleOwner, imageCapture, imageAnalysis, preview)

// bind all use cases

1

3

Page 43: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

fun onClick() {

}

// on user action

2

Page 44: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

fun onClick() { val file = File(..) imageCapture.takePicture(

)

}

// on user action save a picture

2

Page 45: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

fun onClick() { val file = File(..) imageCapture.takePicture(file, object : ImageCapture.OnImageSavedListener {

override fun onError( error: ImageCapture.UseCaseError, message: String, exc: Throwable?) { // insert your code here } override fun onImageSaved(file: File) { // insert your code here }

})}

// save a picture on user action

2

Page 46: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes
Page 47: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

val builder = ImageCaptureConfig.Builder()

val config = builder.build()val useCase = ImageCapture(config)CameraX.bindToLifecycle(this as LifecycleOwner, useCase)

Page 48: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

import androidx.camera.extensions.BokehExtender

val builder = ImageCaptureConfig.Builder()

val config = builder.build()val useCase = ImageCapture(config)CameraX.bindToLifecycle(this as LifecycleOwner, useCase)

Page 49: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

import androidx.camera.extensions.BokehExtender

val builder = ImageCaptureConfig.Builder()

val bokehImageCapture = BokehImageCaptureExtender.create(builder)

// Query if extension is available (optional).if (bokehImageCapture.isExtensionAvailable()) { // Enable the extension if available. bokehImageCapture.enableExtension()}

val config = builder.build()val useCase = ImageCapture(config)CameraX.bindToLifecycle(this as LifecycleOwner, useCase)

Page 50: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

import androidx.camera.extensions.BokehExtender

val builder = ImageCaptureConfig.Builder()

val bokehImageCapture = BokehImageCaptureExtender.create(builder)

// Query if extension is available (optional).if (bokehImageCapture.isExtensionAvailable()) { // Enable the extension if available. bokehImageCapture.enableExtension()}

val config = builder.build()val useCase = ImageCapture(config)CameraX.bindToLifecycle(this as LifecycleOwner, useCase)

Page 51: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

DEMOS

Page 52: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Camera 360

● Aplica vários efeitos usando CameraX

● Usa os 3 use cases (Preview, image analysis e captura de imagem)

● Por “debaixo dos panos”, CameraX está conversando com a camada da Camera2

Page 53: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

Camera 360

● Redução dos testes em dispositivos específicos

● 75% de redução de linhas de código comparado ao Camera2

● Fácil leitura do código

● Diminuiu o tamanho do apk

Benefícios da CameraX

Page 54: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Setup image analysis pipeline val analyzerConfig = ImageAnalysisConfig.Builder().apply {

// Use a worker thread for image analysis to prevent glitches val analyzerThread = HandlerThread("LabelAnalysis").apply { start() } setCallbackHandler(Handler(analyzerThread.looper))

setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)}.build()

// Build the image analysis use case and instantiate our analyzerval analyzerUseCase = ImageAnalysis(analyzerConfig).apply { analyzer = LabelAnalyzer(label)}

Page 55: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Setup image analysis pipeline val analyzerConfig = ImageAnalysisConfig.Builder().apply {

// Use a worker thread for image analysis to prevent glitches val analyzerThread = HandlerThread("LabelAnalysis").apply { start() } setCallbackHandler(Handler(analyzerThread.looper))

setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)}.build()

// Build the image analysis use case and instantiate our analyzerval analyzerUseCase = ImageAnalysis(analyzerConfig).apply { analyzer = LabelAnalyzer(label)}

Page 56: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Setup image analysis pipeline val analyzerConfig = ImageAnalysisConfig.Builder().apply {

// Use a worker thread for image analysis to prevent glitches val analyzerThread = HandlerThread("LabelAnalysis").apply { start() } setCallbackHandler(Handler(analyzerThread.looper))

setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)}.build()

// Build the image analysis use case and instantiate our analyzerval analyzerUseCase = ImageAnalysis(analyzerConfig).apply { analyzer = LabelAnalyzer(label)}

Page 57: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

// Setup image analysis pipeline val analyzerConfig = ImageAnalysisConfig.Builder().apply {

// Use a worker thread for image analysis to prevent glitches val analyzerThread = HandlerThread("LabelAnalysis").apply { start() } setCallbackHandler(Handler(analyzerThread.looper))

setImageReaderMode(ImageAnalysis.ImageReaderMode.ACQUIRE_LATEST_IMAGE)}.build()

// Build the image analysis use case and instantiate our analyzerval analyzerUseCase = ImageAnalysis(analyzerConfig).apply { analyzer = LabelAnalyzer(label)}

Page 58: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

class LabelAnalyzer(val textView: TextView) : ImageAnalysis.Analyzer { override fun analyze(image: ImageProxy, rotationDegrees: Int) { val data = imageByteArray(image)

val metadata = FirebaseVisionImageMetadata.Builder() .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) .setHeight(image.height) .setWidth(image.width) .setRotation(getRotation(rotationDegrees)) .build()

val labelImage = FirebaseVisionImage.fromByteArray(data, metadata)

val labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler() labeler.processImage(labelImage).addOnSuccessListener { labels -> textView.run { if (labels.size >= 1) { text = labels[0].text + " " + labels[0].confidence } } } }

Page 59: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

class LabelAnalyzer(val textView: TextView) : ImageAnalysis.Analyzer { override fun analyze(image: ImageProxy, rotationDegrees: Int) { val data = imageByteArray(image)

val metadata = FirebaseVisionImageMetadata.Builder() .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) .setHeight(image.height) .setWidth(image.width) .setRotation(getRotation(rotationDegrees)) .build()

val labelImage = FirebaseVisionImage.fromByteArray(data, metadata)

val labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler() labeler.processImage(labelImage).addOnSuccessListener { labels -> textView.run { if (labels.size >= 1) { text = labels[0].text + " " + labels[0].confidence } } } }

Page 60: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

class LabelAnalyzer(val textView: TextView) : ImageAnalysis.Analyzer { override fun analyze(image: ImageProxy, rotationDegrees: Int) { val data = imageByteArray(image)

val metadata = FirebaseVisionImageMetadata.Builder() .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) .setHeight(image.height) .setWidth(image.width) .setRotation(getRotation(rotationDegrees)) .build()

val labelImage = FirebaseVisionImage.fromByteArray(data, metadata)

val labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler() labeler.processImage(labelImage).addOnSuccessListener { labels -> textView.run { if (labels.size >= 1) { text = labels[0].text + " " + labels[0].confidence } } } }

Page 61: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

class LabelAnalyzer(val textView: TextView) : ImageAnalysis.Analyzer { override fun analyze(image: ImageProxy, rotationDegrees: Int) { val data = imageByteArray(image)

val metadata = FirebaseVisionImageMetadata.Builder() .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) .setHeight(image.height) .setWidth(image.width) .setRotation(getRotation(rotationDegrees)) .build()

val labelImage = FirebaseVisionImage.fromByteArray(data, metadata)

val labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler() labeler.processImage(labelImage).addOnSuccessListener { labels -> textView.run { if (labels.size >= 1) { text = labels[0].text + " " + labels[0].confidence } } } }

Page 62: Quem somos - Amazon S3...2019/10/11  · Android L Podendo ser utilizado em 90% dos celulares Android. Usa a API do camera2 Comportamento validado em diferentes dispositivos Testes

class LabelAnalyzer(val textView: TextView) : ImageAnalysis.Analyzer { override fun analyze(image: ImageProxy, rotationDegrees: Int) { val data = imageByteArray(image)

val metadata = FirebaseVisionImageMetadata.Builder() .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_YV12) .setHeight(image.height) .setWidth(image.width) .setRotation(getRotation(rotationDegrees)) .build()

val labelImage = FirebaseVisionImage.fromByteArray(data, metadata)

val labeler = FirebaseVision.getInstance().getOnDeviceImageLabeler() labeler.processImage(labelImage).addOnSuccessListener { labels -> textView.run { if (labels.size >= 1) { text = labels[0].text + " " + labels[0].confidence } } } }