Skip to content

Commit f98d0d0

Browse files
bparrishMineskroikie
authored andcommitted
Update Text Recognition for android to 17.0.0 (flutter#732)
* Update Text Recognition for android * Formatting
1 parent 0be2188 commit f98d0d0

File tree

4 files changed

+133
-98
lines changed

4 files changed

+133
-98
lines changed

packages/firebase_ml_vision/android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ android {
3333
}
3434
dependencies {
3535
api 'com.android.support:support-v4:27.1.1'
36-
api 'com.google.firebase:firebase-ml-vision:16.0.0'
36+
api 'com.google.firebase:firebase-ml-vision:17.0.0'
3737
api 'com.google.firebase:firebase-ml-vision-image-label-model:15.0.0'
3838
}
3939
}

packages/firebase_ml_vision/android/src/main/java/io/flutter/plugins/firebasemlvision/FirebaseMlVisionPlugin.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,14 @@ public void onMethodCall(MethodCall call, Result result) {
6161
result.error("labelDetectorError", e.getLocalizedMessage(), null);
6262
}
6363
break;
64-
case "TextDetector#detectInImage":
64+
case "TextRecognizer#detectInImage":
6565
try {
6666
image = filePathToVisionImage((String) call.argument("path"));
67-
TextDetector.instance.handleDetection(image, options, result);
67+
TextRecognizer.instance.handleDetection(image, options, result);
6868
} catch (IOException e) {
69-
result.error("textDetectorIOError", e.getLocalizedMessage(), null);
69+
result.error("textRecognizerIOError", e.getLocalizedMessage(), null);
7070
} catch (Exception e) {
71-
result.error("textDetectorError", e.getLocalizedMessage(), null);
71+
result.error("textRecognizerError", e.getLocalizedMessage(), null);
7272
}
7373
break;
7474
default:

packages/firebase_ml_vision/android/src/main/java/io/flutter/plugins/firebasemlvision/TextDetector.java

Lines changed: 0 additions & 93 deletions
This file was deleted.
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
package io.flutter.plugins.firebasemlvision;
2+
3+
import android.graphics.Point;
4+
import android.graphics.Rect;
5+
import android.support.annotation.NonNull;
6+
import com.google.android.gms.tasks.OnFailureListener;
7+
import com.google.android.gms.tasks.OnSuccessListener;
8+
import com.google.firebase.ml.vision.FirebaseVision;
9+
import com.google.firebase.ml.vision.common.FirebaseVisionImage;
10+
import com.google.firebase.ml.vision.text.FirebaseVisionText;
11+
import com.google.firebase.ml.vision.text.FirebaseVisionTextRecognizer;
12+
import com.google.firebase.ml.vision.text.RecognizedLanguage;
13+
import io.flutter.plugin.common.MethodChannel;
14+
import java.util.ArrayList;
15+
import java.util.HashMap;
16+
import java.util.List;
17+
import java.util.Map;
18+
19+
public class TextRecognizer implements Detector {
20+
public static final TextRecognizer instance = new TextRecognizer();
21+
22+
private TextRecognizer() {}
23+
24+
@Override
25+
public void handleDetection(
26+
FirebaseVisionImage image, Map<String, Object> options, final MethodChannel.Result result) {
27+
FirebaseVisionTextRecognizer textRecognizer =
28+
FirebaseVision.getInstance().getOnDeviceTextRecognizer();
29+
textRecognizer
30+
.processImage(image)
31+
.addOnSuccessListener(
32+
new OnSuccessListener<FirebaseVisionText>() {
33+
@Override
34+
public void onSuccess(FirebaseVisionText firebaseVisionText) {
35+
Map<String, Object> visionTextData = new HashMap<>();
36+
visionTextData.put("text", firebaseVisionText.getText());
37+
38+
List<Map<String, Object>> allBlockData = new ArrayList<>();
39+
for (FirebaseVisionText.TextBlock block : firebaseVisionText.getTextBlocks()) {
40+
Map<String, Object> blockData = new HashMap<>();
41+
addData(
42+
blockData,
43+
block.getBoundingBox(),
44+
block.getConfidence(),
45+
block.getCornerPoints(),
46+
block.getRecognizedLanguages(),
47+
block.getText());
48+
49+
List<Map<String, Object>> allLineData = new ArrayList<>();
50+
for (FirebaseVisionText.Line line : block.getLines()) {
51+
Map<String, Object> lineData = new HashMap<>();
52+
addData(
53+
lineData,
54+
line.getBoundingBox(),
55+
line.getConfidence(),
56+
line.getCornerPoints(),
57+
line.getRecognizedLanguages(),
58+
line.getText());
59+
60+
List<Map<String, Object>> allElementData = new ArrayList<>();
61+
for (FirebaseVisionText.Element element : line.getElements()) {
62+
Map<String, Object> elementData = new HashMap<>();
63+
addData(
64+
elementData,
65+
element.getBoundingBox(),
66+
element.getConfidence(),
67+
element.getCornerPoints(),
68+
element.getRecognizedLanguages(),
69+
element.getText());
70+
71+
allElementData.add(elementData);
72+
}
73+
lineData.put("elements", allElementData);
74+
allLineData.add(lineData);
75+
}
76+
blockData.put("lines", allLineData);
77+
allBlockData.add(blockData);
78+
}
79+
80+
visionTextData.put("blocks", allBlockData);
81+
result.success(visionTextData);
82+
}
83+
})
84+
.addOnFailureListener(
85+
new OnFailureListener() {
86+
@Override
87+
public void onFailure(@NonNull Exception exception) {
88+
result.error("textRecognizerError", exception.getLocalizedMessage(), null);
89+
}
90+
});
91+
}
92+
93+
private void addData(
94+
Map<String, Object> addTo,
95+
Rect boundingBox,
96+
Float confidence,
97+
Point[] cornerPoints,
98+
List<RecognizedLanguage> languages,
99+
String text) {
100+
101+
if (boundingBox != null) {
102+
addTo.put("left", boundingBox.left);
103+
addTo.put("top", boundingBox.top);
104+
addTo.put("width", boundingBox.width());
105+
addTo.put("height", boundingBox.height());
106+
}
107+
108+
addTo.put("confidence", confidence == null ? null : (double) confidence);
109+
110+
List<int[]> points = new ArrayList<>();
111+
if (cornerPoints != null) {
112+
for (Point point : cornerPoints) {
113+
points.add(new int[] {point.x, point.y});
114+
}
115+
}
116+
addTo.put("points", points);
117+
118+
List<Map<String, Object>> allLanguageData = new ArrayList<>();
119+
for (RecognizedLanguage language : languages) {
120+
Map<String, Object> languageData = new HashMap<>();
121+
languageData.put("languageCode", language.getLanguageCode());
122+
allLanguageData.add(languageData);
123+
}
124+
addTo.put("recognizedLanguages", allLanguageData);
125+
126+
addTo.put("text", text);
127+
}
128+
}

0 commit comments

Comments
 (0)