EdgeOCRAppをインテントで呼び出すサンプルです。 Kotlin、Javaのサンプルがそれぞれkotlin、javaディレクトリに入っています。 Android Studioでそれぞれのディレクトリを開いてください。
Kotlinを例にして説明します。
画面には2つのボタンがあり、1つは「全読モード」のシナリオを呼び出すサンプルで、もう1つは「シングルモード」のシナリオを呼び出すサンプルです。
まずは設定で全読モードのシナリオを作成してください。
そのシナリオIDを MainActivity.kt に定義されている allScanScenarioId
に代入します。
private val allScanScenarioId = "シナリオID"
呼び出し部分は MainActivity.kt の下記に定義されています。
Intentに EdgeOCRAppInput
というキーで、EdgeOCRRequest
を Json にシリアライズした値をセットしています。
private fun onClickScanAllButton() {
...
val request = EdgeOCRRequest(title = "全読み", scenarioID = allScanScenarioId)
val requestJson = Json.encodeToString(EdgeOCRRequest.serializer(), request)
intent.putExtra("EdgeOCRAppInput", requestJson)
launcher.launch(intent)
}
EdgeOCRRequest の詳細は ここを参照してください。
受け取り部分も同様に MainActivity.kt に定義されており、具体的には下記に定義されています。
private fun processScanAllResponse(response: EdgeOCRResponse) {
val texts = response.allScanResult?.contents?.map { content: Content ->
content.text
}
val builder = StringBuilder()
texts?.forEach { text ->
builder.append(text)
builder.append("\n")
}
resultTextView.text = builder.toString()
}
全読モードの返り値は EdgeOCRResponse.allScanResult
に定義されています。
この例では allScanResult から、すべてのスキャンされたテキストを取り出して画面に表示しています。
EdgeOCRResponse の詳細は ここを参照してください。
次にシングルモードの説明をします。 まずは設定でシングルモードのシナリオを作成してください。
そのシナリオIDを MainActivity.kt に定義されている customScanScenarioId
に代入します。
private val customScanScenarioId = "シナリオID"
EdgeOCRApp では、スキャン定義を動的に呼び出しアプリから変更することもできます。この例では動的に変更する方法を紹介いたします。 EdgeOCRApp からスキャン定義 ID を取得し、下記のように代入してください。
private val customScanScenarioScanDefinitionId = "スキャン定義ID"
呼び出し部分は MainActivity.kt の下記に定義されています。
private fun onClickScanWithCustomDefinition() {
...
val scanDefinition = ScanDefinition(
dictPattern = DictPattern(
contents = listOf("1234", "5678"), // ここでマスターデータを定義する
fuzzyMode = FuzzyMode.Disabled,
matchingType = MatchingType.Exact
), id = customScanScenarioScanDefinitionId, name = "マスターデータ"
)
val request = EdgeOCRRequest(
title = "マスターデータ指定",
scenarioID = customScanScenarioId,
scanDefinitions = listOf(scanDefinition)
)
...
}
全読モードとの違いは、 EdgeOCRRequest に ScanDefinition
を定義している点です。
ScanDefinition の詳細は、ここを参照してください。
受け取り部分も同様に MainActivity.kt に定義されており、具体的には下記に定義されています。
private fun processScanWithCustomDefinitionResponse(response: EdgeOCRResponse) {
response.singleScanResult?.let {
resultTextView.text = it.content.text
return
}
}
シングルモードの返り値は EdgeOCRResponse.singleScanResult
に定義されています。詳細はここを参照してください。
リクエスト・レスポンスのクラスを Json Schema ファイルから自動生成する方法です。 ほとんどのユースケースでこの操作は必要ありません。生成済みのファイルを使用してください。
リクエスト
cat schema/input.schema.json | quicktype -s schema -l kotlin --package com.nefrock.edgeocrintent.io.request --framework kotlinx --top-level EdgeOCRRequest > kotlin/app/src/main/java/com/nefrock/edgeocrintent/io/request/EdgeOCRRequest.kt
レスポンス
cat schema/output.schema.json | quicktype -s schema -l kotlin --package com.nefrock.edgeocrintent.io.response --framework kotlinx --top-level EdgeOCRResponse > kotlin/app/src/main/java/com/nefrock/edgeocrintent/io/response/EdgeOCRResponse.kt
リクエスト
cat schema/input.schema.json | quicktype -s schema -l kotlin --package com.nefrock.edgeocrintent.io.request --framework kotlinx --top-level EdgeOCRRequest > java/app/src/main/java/com/nefrock/edgeocrintent/io/request/EdgeOCRRequest.kt
レスポンス
cat schema/output.schema.json | quicktype -s schema -l kotlin --package com.nefrock.edgeocrintent.io.response --framework kotlinx --top-level EdgeOCRResponse > java/app/src/main/java/com/nefrock/edgeocrintent/io/response/EdgeOCRResponse.kt