Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ML Kit Document Scannerを導入してみた

Avatar for Pike8 Pike8
April 27, 2024

ML Kit Document Scannerを導入してみた

Avatar for Pike8

Pike8

April 27, 2024
Tweet

More Decks by Pike8

Other Decks in Programming

Transcript

  1. 実装 @Composable fun DriverLicenseImageSelectButton( selectDriverLicenseImage: (Uri) -> Unit, modifier: Modifier

    = Modifier, ) { val context = LocalContext.current val documentScannerLauncher = rememberLauncherForActivityResult( ActivityResultContracts.StartIntentSenderForResult(), ) { activityResult -> activityResult.getSelectedImage()?.let(selectDriverLicenseImage) } Box( contentAlignment = Alignment.Center, modifier = modifier // Χʔυͷ֎؍Λઃఆ .clickable { documentScannerLauncher.launchDocumentScan(context) } ) { // Χʔυͷத਎Λදࣔ } } private fun ActivityResult.getSelectedImage(): Uri? { // ࡱӨ͞Εͨը૾ΛऔΓग़͢ } private fun ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>.launchDocumentScan(
 context: Context
 ) { // Document ScannerΛىಈ }
  2. 実装 @Composable fun DriverLicenseImageSelectButton( selectDriverLicenseImage: (Uri) -> Unit, modifier: Modifier

    = Modifier, ) { } private fun ActivityResult.getSelectedImage(): Uri? { if (resultCode != Activity.RESULT_OK) { return null } val result = GmsDocumentScanningResult.fromActivityResultIntent(data) return result?.pages?.firstOrNull()?.imageUri } private fun ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>.launchDocumentScan(
 context: Context
 ) { // Document ScannerΛىಈ } // …
  3. 実装 } private fun ManagedActivityResultLauncher<IntentSenderRequest, ActivityResult>.launchDocumentScan(
 context: Context
 ) {

    val activity = context.findActivity() ?: return val options = GmsDocumentScannerOptions.Builder() // Χϝϥ͚ͩͰ͸ͳ͘ΪϟϥϦʔ͔Βը૾ͷऔΓࠐΈ͕Ͱ͖Δ .setGalleryImportAllowed(true) // ෳ਺ϖʔδΛอଘ͢Δ͜ͱ͕Ͱ͖Δ .setPageLimit(1) // JPEGͷଞʹPDFͰͷอଘ͕Ͱ͖Δ .setResultFormats(GmsDocumentScannerOptions.RESULT_FORMAT_JPEG) // औΓࠐΜͩը૾ʹར༻͢ΔฤूػೳΛબ୒͢Δʢޙड़ʣ .setScannerMode(GmsDocumentScannerOptions.SCANNER_MODE_BASE) .build() val scanner = GmsDocumentScanning.getClient(options) scanner.getStartScanIntent(activity).addOnSuccessListener { intentSender -> this.launch(IntentSenderRequest.Builder(intentSender).build()) } } @Composable fun DriverLicenseImageSelectButton( selectDriverLicenseImage: (Uri) -> Unit, modifier: Modifier = Modifier, ) { } private fun ActivityResult.getSelectedImage(): Uri? { // … // …