This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class ExtractDataUseCase(private val textRecognizer: TextRecognizer) { | |
suspend operator fun invoke(image: Image, rotationDegrees: Int): CardDetails { | |
val imageInput = InputImage.fromMediaImage(image, rotationDegrees) | |
val text = textRecognizer.process(imageInput).await().text | |
return Extractor.extractData(text) //We are going to see this shortly | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<meta-data | |
android:name="com.google.mlkit.vision.DEPENDENCIES" | |
android:value="ocr" /> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:16.1.0' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun bindUseCases(cameraProvider: ProcessCameraProvider) { | |
val preview = buildPreview() | |
val takePicture = buildTakePicture() | |
val cameraSelector = buildCameraSelector() | |
cameraProvider.bindToLifecycle(this, cameraSelector, preview, takePicture) | |
button.setOnClickListener { | |
lifecycle.coroutineScope.launchWhenResumed { | |
val imageProxy = takePicture.takePicture(executor) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
suspend fun ImageCapture.takePicture(executor: Executor): ImageProxy { | |
return suspendCoroutine { continuation -> | |
takePicture(executor, object : ImageCapture.OnImageCapturedCallback() { | |
override fun onCaptureSuccess(image: ImageProxy) { | |
continuation.resume(image) | |
super.onCaptureSuccess(image) | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun buildTakePicture(): ImageCapture = ImageCapture.Builder() | |
.setTargetRotation(previewView.display.rotation) | |
.setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY) | |
.build() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
lifecycle.coroutineScope.launchWhenResumed { | |
bindUseCases(getCameraProvider()) | |
} | |
} | |
private fun bindUseCases(cameraProvider: ProcessCameraProvider) { | |
val preview = buildPreview() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun buildCameraSelector(): CameraSelector = CameraSelector.Builder() | |
.requireLensFacing(CameraSelector.LENS_FACING_BACK) | |
.build() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
suspend fun Context.getCameraProvider(): ProcessCameraProvider = | |
suspendCoroutine { continuation -> | |
ProcessCameraProvider.getInstance(this).apply { | |
addListener(Runnable { | |
continuation.resume(get()) | |
}, executor) | |
} | |
} | |
val Context.executor: Executor |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private fun buildPreview(): Preview = Preview.Builder() | |
.build() | |
.apply { | |
setSurfaceProvider(previewView.createSurfaceProvider()) | |
} |