Skip to content

Commit c99a01d

Browse files
committed
Android implementation ready
1 parent 63b0536 commit c99a01d

File tree

2 files changed

+54
-4
lines changed

2 files changed

+54
-4
lines changed

android/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ android {
3434
compileSdkVersion getExtOrIntegerDefault('compileSdkVersion')
3535
buildToolsVersion getExtOrDefault('buildToolsVersion')
3636
defaultConfig {
37-
minSdkVersion 16
37+
minSdkVersion 19
3838
targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
3939
versionCode 1
4040
versionName "1.0"
@@ -131,6 +131,7 @@ def kotlin_version = getExtOrDefault('kotlinVersion')
131131
dependencies {
132132
// noinspection GradleDynamicVersion
133133
api 'com.facebook.react:react-native:+'
134+
implementation 'com.google.android.gms:play-services-mlkit-text-recognition:17.0.0'
134135
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
135136
implementation "androidx.camera:camera-core:1.1.0-alpha06"
136137
implementation "com.facebook.react:react-native:+" // From node_modules
Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,59 @@
1+
import android.R.attr.label
2+
import android.annotation.SuppressLint
3+
import android.graphics.Rect
4+
import android.media.Image
15
import androidx.camera.core.ImageProxy
6+
import com.facebook.react.bridge.ReadableArray
7+
import com.facebook.react.bridge.WritableArray
8+
import com.facebook.react.bridge.WritableNativeArray
9+
import com.facebook.react.bridge.WritableNativeMap
10+
import com.google.android.gms.tasks.Task
11+
import com.google.android.gms.tasks.Tasks
12+
import com.google.mlkit.vision.common.InputImage
13+
import com.google.mlkit.vision.text.Text
14+
import com.google.mlkit.vision.text.TextRecognition
15+
import com.google.mlkit.vision.text.TextRecognizer
16+
import com.google.mlkit.vision.text.latin.TextRecognizerOptions
217
import com.mrousavy.camera.frameprocessor.FrameProcessorPlugin
18+
import com.mrousavy.camera.utils.pushInt
19+
320

421
class VisionCameraOcrPlugin: FrameProcessorPlugin("scanOCR") {
522

6-
override fun callback(image: ImageProxy, params: Array<Any>): Any? {
7-
// code goes here
8-
return null
23+
override fun callback(frame: ImageProxy, params: Array<Any>): Any? {
24+
@SuppressLint("UnsafeOptInUsageError")
25+
val mediaImage: Image? = frame.image
26+
val textRecognizer: TextRecognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
27+
val array = WritableNativeArray()
28+
29+
30+
if (mediaImage != null) {
31+
val image = InputImage.fromMediaImage(mediaImage, frame.imageInfo.rotationDegrees)
32+
var task: Task<Text> = textRecognizer.process(image)
33+
try {
34+
var extractedInfo = Tasks.await(task)
35+
for (block in extractedInfo.textBlocks) {
36+
for (line in block.lines) {
37+
val lineText = line.text
38+
val lineBoundingBox: Rect? = line.boundingBox
39+
val map = WritableNativeMap()
40+
map.putString("text", lineText)
41+
map.putInt("height", image.height)
42+
map.putInt("width", image.width)
43+
val bounds = WritableNativeArray()
44+
bounds.pushInt(lineBoundingBox?.left)
45+
bounds.pushInt(lineBoundingBox?.bottom)
46+
bounds.pushInt(lineBoundingBox?.right)
47+
bounds.pushInt(lineBoundingBox?.top)
48+
map.putArray("bounds", bounds)
49+
array.pushMap(map)
50+
}
51+
}
52+
} catch (e: Exception) {
53+
e.printStackTrace()
54+
}
55+
56+
}
57+
return array
958
}
1059
}

0 commit comments

Comments
 (0)