Android에서 ML Kit를 사용한 문서 스캐너
ML Kit Document Scanner API를 사용하여 앱에 문서 스캐너 기능을 쉽게 추가할 수 있습니다.
| 기능 | 세부정보 |
|---|---|
| SDK 이름 | play-services-mlkit-document-scanner |
| 구현 | 모델, 스캔 로직, UI 흐름은 Google Play 서비스에서 동적으로 다운로드됩니다. |
| 앱 크기 영향 | 다운로드 크기가 약 300KB 증가합니다. |
| 초기화 시간 | 사용자는 처음 사용하기 전에 모델, 로직, UI 흐름이 다운로드될 때까지 기다려야 할 수 있습니다. |
사용해 보기
샘플 앱을 사용해 이 API의 사용 예를 확인해 보세요.
시작하기 전에
프로젝트 수준
build.gradle파일의 buildscript 및 allprojects 섹션에 Google의 Maven 저장소가 포함되어야 합니다.ML Kit 문서 스캐너 라이브러리의 종속 항목을 모듈의 앱 수준 Gradle 파일(일반적으로 app/build.gradle)에 추가합니다.
dependencies {
// …
implementation 'com.google.android.gms:play-services-mlkit-document-scanner:16.0.0'
}
문서 스캐너 구성
문서 스캐너 사용자 플로우 (전용 뷰파인더 화면 및 미리보기 화면 포함)는 SDK에서 제공합니다. 뷰파인더 및 미리보기 화면은 다음과 같은 맞춤설정 가능한 컨트롤을 지원합니다.
- 사진 갤러리에서 가져오기
- 스캔되는 페이지 수 제한 설정
- 스캐너 모드 (흐름의 특성 세트 제어)
스캔한 문서의 PDF 및 JPEG 파일을 모두 가져올 수 있습니다.
GmsDocumentScannerOptions를 인스턴스화하여 스캐너 옵션을 구성합니다.
Kotlin
val options = GmsDocumentScannerOptions.Builder()
.setGalleryImportAllowed(false)
.setPageLimit(2)
.setResultFormats(RESULT_FORMAT_JPEG, RESULT_FORMAT_PDF)
.setScannerMode(SCANNER_MODE_FULL)
.build()자바
GmsDocumentScannerOptions options = new GmsDocumentScannerOptions.Builder()
.setGalleryImportAllowed(false)
.setPageLimit(2)
.setResultFormats(RESULT_FORMAT_JPEG, RESULT_FORMAT_PDF)
.setScannerMode(SCANNER_MODE_FULL)
.build();문서 스캔
GmsDocumentScannerOptions를 만든 후 GmsDocumentScanner의 인스턴스를 가져옵니다. 그런 다음 AndroidX에 도입된 Activity Result API에 따라 스캐너 활동을 시작할 수 있습니다.
문서 스캔이 완료되면 GmsDocumentScanningResult 객체는 setResultFormats를 통해 정의된 내용에 따라 스캔된 페이지 수, JPEG 형식의 이미지 URI, PDF에 대한 액세스 권한을 부여합니다.
Kotlin
val scanner = GmsDocumentScanning.getClient(options) val scannerLauncher = registerForActivityResult(StartIntentSenderForResult()) { result -> { if (result.resultCode == RESULT_OK) { val result = GmsDocumentScanningResult.fromActivityResultIntent(result.data) result.getPages()?.let { pages -> for (page in pages) { val imageUri = pages.get(0).getImageUri() } } result.getPdf()?.let { pdf -> val pdfUri = pdf.getUri() val pageCount = pdf.getPageCount() } } } } scanner.getStartScanIntent(activity) .addOnSuccessListener { intentSender -> scannerLauncher.launch(IntentSenderRequest.Builder(intentSender).build()) } .addOnFailureListener { ... }
자바
GmsDocumentScanner scanner = GmsDocumentScanning.getClient(options); ActivityResultLauncher<IntentSenderRequest> scannerLauncher = registerForActivityResult( new StartIntentSenderForResult(), result -> { if (result.getResultCode() == RESULT_OK) { GmsDocumentScanningResult result = GmsDocumentScanningResult.fromActivityResultIntent(result.getData()); for (Page page : result.getPages()) { Uri imageUri = pages.get(0).getImageUri(); } Pdf pdf = result.getPdf(); Uri pdfUri = pdf.getUri(); int pageCount = pdf.getPageCount(); } }); scanner.getStartScanIntent(activity) .addOnSuccessListener(intentSender -> scannerLauncher.launch(new IntentSenderRequest.Builder(intentSender).build())) .addOnFailureListener(...);
실적 개선을 위한 팁
문서 파일을 생성하는 데 시간이 걸리고 처리 능력이 필요하므로 실제로 필요한 출력 형식 (JPEG, PDF 또는 둘 다)만 요청하세요.