11package org.totschnig.ocr
22
33import android.app.Application
4+ import android.content.SharedPreferences
45import android.graphics.BitmapFactory
56import android.net.Uri
67import androidx.lifecycle.viewModelScope
8+ import androidx.preference.PreferenceManager
79import com.google.mlkit.vision.common.InputImage
810import com.google.mlkit.vision.text.TextRecognition
11+ import com.google.mlkit.vision.text.TextRecognizerOptionsInterface
12+ import com.google.mlkit.vision.text.chinese.ChineseTextRecognizerOptions
13+ import com.google.mlkit.vision.text.devanagari.DevanagariTextRecognizerOptions
14+ import com.google.mlkit.vision.text.japanese.JapaneseTextRecognizerOptions
15+ import com.google.mlkit.vision.text.korean.KoreanTextRecognizerOptions
916import com.google.mlkit.vision.text.latin.TextRecognizerOptions
1017import kotlinx.coroutines.Dispatchers
1118import kotlinx.coroutines.launch
@@ -14,6 +21,23 @@ import timber.log.Timber
1421
1522class OcrViewModel (application : Application ) : BaseViewModel(application) {
1623
24+ val prefKey = application.getString(R .string.pref_mlkit_script_key)
25+
26+ val preferences: SharedPreferences
27+ get() = PreferenceManager .getDefaultSharedPreferences(getApplication())
28+
29+ val script: String?
30+ get() = preferences.getString(prefKey, null )
31+
32+ val options: TextRecognizerOptionsInterface
33+ get() = when (script) {
34+ " Han" -> ChineseTextRecognizerOptions .Builder ().build()
35+ " Deva" -> DevanagariTextRecognizerOptions .Builder ().build()
36+ " Jpan" -> JapaneseTextRecognizerOptions .Builder ().build()
37+ " Kore" -> KoreanTextRecognizerOptions .Builder ().build()
38+ else -> TextRecognizerOptions .DEFAULT_OPTIONS
39+ }
40+
1741 fun runTextRecognition (uri : Uri ) {
1842 viewModelScope.launch {
1943 withContext(Dispatchers .Default ) {
@@ -23,7 +47,7 @@ class OcrViewModel(application: Application) : BaseViewModel(application) {
2347 }?.let {
2448 InputImage .fromBitmap(it, getOrientation(uri))
2549 }?.let {
26- TextRecognition .getClient(TextRecognizerOptions . DEFAULT_OPTIONS ).process(it)
50+ TextRecognition .getClient(options ).process(it)
2751 .addOnSuccessListener { texts ->
2852 result.postValue(Result .success(texts.wrap()))
2953 }
@@ -32,11 +56,13 @@ class OcrViewModel(application: Application) : BaseViewModel(application) {
3256 result.postValue(Result .failure(e))
3357 }
3458 } ? : run {
35- result.postValue(Result .failure(Exception (" Unable to open " + uri)))
59+ result.postValue(Result .failure(Exception (" Unable to open $ uri" )))
3660 }
3761 }
3862 }
3963 }
64+
65+
4066}
4167
4268fun com.google.mlkit.vision.text.Text.wrap () = Text (textBlocks.map { textBlock ->
0 commit comments