Skip to content

Commit 4e8f865

Browse files
committed
fixing review comments
1 parent 5868158 commit 4e8f865

File tree

11 files changed

+99
-100
lines changed

11 files changed

+99
-100
lines changed

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkBullet.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package CognitiveServices.Ink.Recognition;
22

33
import android.util.DisplayMetrics;
4-
54
import org.json.JSONException;
65
import org.json.JSONObject;
76

87
class InkBullet extends InkRecognitionUnit {
98

10-
119
public String getText() {
1210
return text;
1311
}
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
package CognitiveServices.Ink.Recognition;
22

33
public class InkPoint {
4-
final double x;
5-
final double y;
4+
final float x;
5+
final float y;
66

7-
InkPoint(double x, double y) {
8-
this.y =y;
9-
this.x =x;
7+
InkPoint(float x, float y) {
8+
this.y = y;
9+
this.x = x;
1010
}
1111
}

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkRecognitionDetailsLogger.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,17 +76,17 @@ private static void displayRecognitionUnit(InkRecognitionUnit recognitionUnit) {
7676

7777
private static void displayInkDrawingProperties(InkDrawing drawing) {
7878

79-
Log.d(TAG, "center: " + (float) drawing.getCenter().x + " " +
80-
(float) drawing.getCenter().y);
81-
Log.d(TAG, "rotated angle: "+ (float) drawing.getRotatedAngle());
82-
Log.d(TAG, "confidence: "+ (float) drawing.getConfidence());
79+
Log.d(TAG, "center: " + drawing.getCenter().x + " " +
80+
drawing.getCenter().y);
81+
Log.d(TAG, "rotated angle: "+ drawing.getRotatedAngle());
82+
Log.d(TAG, "confidence: "+ drawing.getConfidence());
8383
for (Shape alternate : drawing.getAlternates()) {
8484
Log.d(TAG," "+ alternate + "\n\r");
8585
}
8686

8787
for (InkPoint point : drawing.getPoints()) {
88-
Log.d(TAG, "Point: " + (float) point.x + " " +
89-
(float) point.y);
88+
Log.d(TAG, "Point: " + point.x + " " +
89+
point.y);
9090
}
9191
Log.d(TAG,"alternates: \n\r");
9292
for (Shape alternate : drawing.getAlternates()) {

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkRecognitionError.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,9 @@ public class InkRecognitionError {
4848
@NonNull
4949
public String toString() {
5050
return "Code: " + errorCode +
51-
"Message: " + message +
52-
"Target: " + target +
53-
"Details:\r" + getErrorDetails();
51+
"Message: " + message +
52+
"Target: " + target +
53+
"Details:\r" + getErrorDetails();
5454
}
5555

5656
private String getErrorDetails() {

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkRecognitionUnit.java

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class InkRecognitionUnit {
2020
private ArrayList<InkPoint> rotatedBoundingBox;
2121
private final float DOT_PER_INCH;
2222
private final InkRoot result;
23+
public static final float INCH_TO_MM = 25.4f;
2324

2425
public InkRecognitionUnitCategory getCategory() {
2526
return category;
@@ -68,13 +69,12 @@ public ArrayList<InkPoint> getRotatedBoundingBox() {
6869
return rotatedBoundingBox;
6970
}
7071

71-
InkRecognitionUnit(String jSONString, DisplayMetrics metrics, InkRoot result) throws JSONException {
72-
72+
InkRecognitionUnit(String jsonString, DisplayMetrics metrics, InkRoot result) throws JSONException {
7373
DOT_PER_INCH = metrics.xdpi;
7474
this.result = result;
7575

7676
try {
77-
JSONObject obj = new JSONObject(jSONString);
77+
JSONObject obj = new JSONObject(jsonString);
7878
this.id = obj.getInt("id");
7979
this.category = getCategory(obj.getString("category"));
8080
this.parentId = obj.getInt("parentId");
@@ -104,18 +104,14 @@ public ArrayList<InkPoint> getRotatedBoundingBox() {
104104
millimetersToPixels((float)boundingRect.getDouble("height")));
105105

106106
//setup rotated bounding box
107-
JSONArray rotatedPoints = obj.getJSONArray("rotatedBoundingRectangle");
108-
109-
107+
JSONArray rotatedBoundingRectPoints = obj.getJSONArray("rotatedBoundingRectangle");
110108
rotatedBoundingBox = new ArrayList<>();
111-
112109
for (int i =0;
113-
i <rotatedPoints.length();
110+
i <rotatedBoundingRectPoints.length();
114111
i++) {
115-
JSONObject point = rotatedPoints.getJSONObject(i);
112+
JSONObject point = rotatedBoundingRectPoints.getJSONObject(i);
116113
this.rotatedBoundingBox.add(new InkPoint(millimetersToPixels((float)point.getDouble("x")), millimetersToPixels((float)point.getDouble("y"))));
117114
}
118-
119115
}
120116
catch (Exception e) {
121117
System.out.print("Data Processing Error: " + e.getMessage());
@@ -159,7 +155,7 @@ private InkRecognitionUnitCategory getCategory(String category) {
159155
}
160156

161157
float millimetersToPixels(float milliValue) {
162-
return (milliValue/25.4f) * DOT_PER_INCH;
158+
return (milliValue/INCH_TO_MM) * DOT_PER_INCH;
163159
}
164160

165161
}

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkRecognizer.java

Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public class InkRecognizer {
2222
private final ArrayList<InkStroke> strokes = new ArrayList<>();
2323
private final String app_key;
2424
private final String url;
25-
private InkRoot inkRoot;
25+
private InkRoot inkRoot; //the root holds the recognition units reported by the service
2626
private DisplayMetrics metrics;
2727
private final boolean displayTree = true;
2828

@@ -36,8 +36,6 @@ public void setMetrics(DisplayMetrics metrics) {
3636
this.metrics = metrics;
3737
}
3838

39-
40-
4139
InkRecognizer(String appKey, String destinationUrl, Context context) {
4240
this.app_key = appKey;
4341
this.url = destinationUrl;
@@ -60,9 +58,8 @@ private InkRoot getRecognitionRoot()
6058
return inkRoot;
6159
}
6260

63-
64-
private void buildResult(String jSONData, int httpResponseCode) {
65-
this.inkRoot = new InkRoot(jSONData, metrics, httpResponseCode);
61+
private void buildResult(String jsonData, int httpResponseCode) {
62+
this.inkRoot = new InkRoot(jsonData, metrics, httpResponseCode);
6663
}
6764

6865
private String getJSONStrokes() throws JSONException {
@@ -75,7 +72,7 @@ private String getJSONStrokes() throws JSONException {
7572
InkStroke stroke = strokes.get(i);
7673
JSONObject jsonStroke = new JSONObject();
7774
jsonStroke.put("id", stroke.strokeId);
78-
jsonStroke.put("language", stroke.language);
75+
jsonStroke.put("language", stroke.language); //The language is an optional field which can be used when dealing with multi-language apps.
7976
if (stroke.kind != StrokeKind.UNKNOWN) {
8077
jsonStroke.put("kind", strokeKindToString(stroke.kind));
8178
}
@@ -98,14 +95,17 @@ private String getJSONStrokes() throws JSONException {
9895
}
9996

10097
private String strokeKindToString(StrokeKind kind) {
101-
String strokeKind = "UnKnown";
98+
String strokeKind;
10299
switch(kind) {
103100
case DRAWING:
104101
strokeKind = "inkDrawing";
105102
break;
106103
case WRITING:
107104
strokeKind = "inkWriting";
108105
break;
106+
default:
107+
strokeKind = "UnKnown";
108+
break;
109109
}
110110
return strokeKind;
111111
}
@@ -117,69 +117,68 @@ private static class RecognitionRESTTask extends AsyncTask<InkRecognizer, Intege
117117
protected InkRecognizer doInBackground(InkRecognizer... params) {
118118

119119
int responseCode;
120+
InkRecognizer inkRecognizer = params[0];
120121

121122
try {
122-
URL url = new URL(params[0].url);
123+
URL url = new URL(inkRecognizer.url);
123124
HttpsURLConnection restConnection = (HttpsURLConnection) url.openConnection();
124125
restConnection.setRequestProperty("Content-Type","application/json");
125-
restConnection.setRequestProperty("Ocp-Apim-Subscription-Key",params[0].app_key);
126+
restConnection.setRequestProperty("Ocp-Apim-Subscription-Key", inkRecognizer.app_key);
126127
restConnection.setRequestMethod("PUT");
127128
restConnection.setDoOutput(true);
128129
OutputStreamWriter jsonStrokesWriter = new OutputStreamWriter(restConnection.getOutputStream());
129-
jsonStrokesWriter.write(params[0].getJSONStrokes());
130+
jsonStrokesWriter.write(inkRecognizer.getJSONStrokes());
130131
jsonStrokesWriter.flush();
131132
jsonStrokesWriter.close();
132133
responseCode = restConnection.getResponseCode();
133134
// read the output from the server
134135
if (responseCode == HttpURLConnection.HTTP_OK ||
135-
responseCode == HttpURLConnection.HTTP_BAD_REQUEST) {
136+
responseCode == HttpURLConnection.HTTP_BAD_REQUEST) {
136137
InputStreamReader streamReader = new InputStreamReader(restConnection.getInputStream());
137138
BufferedReader reader = new BufferedReader(streamReader);
138139
StringBuilder stringBuilder = new StringBuilder();
139-
140140
String line;
141141
while ((line = reader.readLine()) != null) {
142142
stringBuilder.append(line).append("\n");
143143
}
144-
145-
params[0].buildResult(stringBuilder.toString(), responseCode);
146-
144+
inkRecognizer.buildResult(stringBuilder.toString(), responseCode);
147145
}
148146
else {
149147

150-
params[0].buildResult("Error Occurred", responseCode);
148+
inkRecognizer.buildResult("Error Occurred", responseCode);
151149
}
152150
}
153151
catch (Exception e) {
154152
e.printStackTrace();
155-
params[0].buildResult("Error Occurred", 0);
153+
inkRecognizer.buildResult("Error Occurred", 0);
156154
}
157-
return params[0];
155+
return inkRecognizer;
158156
}
159157

160158
@Override
161159
protected void onPostExecute(InkRecognizer analyzer) {
162-
StringBuilder recognisedWords = new StringBuilder();
160+
StringBuilder recognizedWords = new StringBuilder();
163161
InkRoot inkRoot = analyzer.getRecognitionRoot();
164162
if (inkRoot.getResultStatus() == RecognitionResultStatus.UPDATED) {
165163
ArrayList<InkWord> words = inkRoot.getInkWords();
166164

167165
for (int i = 0; i < words.size(); i++) {
168-
recognisedWords.append(words.get(i).getText());
169-
recognisedWords.append(" ");
166+
recognizedWords.append(words.get(i).getText());
167+
recognizedWords.append(" ");
170168
}
169+
171170
ArrayList<InkDrawing> drawings = inkRoot.getInkDrawings();
172-
recognisedWords.append("\r\nRecognized Shapes:\r\n");
171+
recognizedWords.append("\r\nRecognized Shapes:\r\n");
173172
for (int i = 0; i < drawings.size(); i++) {
174-
recognisedWords.append(drawings.get(i).getShape().toString()).append("\r\n");
173+
recognizedWords.append(drawings.get(i).getShape().toString()).append("\r\n");
175174
}
176175
if(analyzer.displayTree) {
177176
InkRecognitionDetailsLogger.displayAnalysisTree(inkRoot);
178177
}
179178
} else {
180-
recognisedWords.append(inkRoot.getRecognitionError().toString());
179+
recognizedWords.append(inkRoot.getRecognitionError().toString());
181180
}
182-
Toast toast = Toast.makeText(analyzer.getContext(), recognisedWords.toString(), Toast.LENGTH_LONG);
181+
Toast toast = Toast.makeText(analyzer.getContext(), recognizedWords.toString(), Toast.LENGTH_LONG);
183182
toast.show();
184183
}
185184
}

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkRoot.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@
1212
import java.util.Set;
1313

1414
class InkRoot {
15-
16-
//containers
15+
//Using different collections to isolate each type for type specific queries.
1716
private final Hashtable<Integer, InkRecognitionUnit> recognizedContainers = new Hashtable<>();
1817
private final ArrayList<InkWord> wordList = new ArrayList<>();
1918
private final Hashtable<Integer, InkRecognitionUnit> recognizedDrawings = new Hashtable<>();
@@ -33,20 +32,20 @@ public RecognitionResultStatus getResultStatus() {
3332

3433
InkRoot(String json, DisplayMetrics metrics, int httpResponseCode)
3534
{
36-
3735
try {
3836
JSONObject jsonResponse = new JSONObject(json);
3937

4038
if (httpResponseCode == HttpURLConnection.HTTP_OK) {
41-
JSONArray recognitionUnits = jsonResponse.getJSONArray("recognitionUnits");
39+
JSONArray jsonRecognitionUnits = jsonResponse.getJSONArray("recognitionUnits");
4240
for (int i = 0;
43-
i < recognitionUnits.length();
41+
i < jsonRecognitionUnits.length() &&
42+
resultStatus != RecognitionResultStatus.FAILED;
4443
i++) {
4544

46-
String category = recognitionUnits.getJSONObject(i).getString("category");
47-
String unitJSON = recognitionUnits.getJSONObject(i).toString();
48-
int id = recognitionUnits.getJSONObject(i).getInt("id");
49-
//leafs
45+
String category = jsonRecognitionUnits.getJSONObject(i).getString("category");
46+
String unitJSON = jsonRecognitionUnits.getJSONObject(i).toString();
47+
int id = jsonRecognitionUnits.getJSONObject(i).getInt("id");
48+
//Instantiate the recognition units
5049
switch (category) {
5150
case "inkWord":
5251
InkWord word = new InkWord(unitJSON, metrics, this);
@@ -82,6 +81,10 @@ public RecognitionResultStatus getResultStatus() {
8281
recognizedContainers.put(id, writingRegion);
8382
recognizedUnits.put(id, writingRegion);
8483
break;
84+
default:
85+
recognitionError = new InkRecognitionError("unknown unit");
86+
resultStatus = RecognitionResultStatus.FAILED;
87+
break;
8588
}
8689
}
8790
resultStatus = RecognitionResultStatus.UPDATED;
Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,43 @@
11
package CognitiveServices.Ink.Recognition;
22

3-
import CognitiveServices.Ink.Recognition.InkPoint;
4-
3+
import android.util.DisplayMetrics;
54
import java.util.ArrayList;
5+
66
class InkStroke {
77
final int strokeId;
88
final ArrayList<InkPoint> inkPoints = new ArrayList<>();
99
final String language;
1010
final StrokeKind kind;
11-
11+
private final float xdpi;
12+
private final float ydpi;
1213
private static int num = 0;
14+
1315
@SuppressWarnings("unused")
14-
InkStroke(int id, String language, StrokeKind kind) {
16+
InkStroke(int id, String language, StrokeKind kind, DisplayMetrics metrics) {
17+
this.xdpi = metrics.xdpi;
18+
this.ydpi = metrics.ydpi;
1519
this.strokeId = id;
1620
this.language = language;
1721
this.kind = kind;
1822
}
1923

20-
InkStroke() {
24+
InkStroke(DisplayMetrics metrics) {
25+
this.xdpi = metrics.xdpi;
26+
this.ydpi = metrics.ydpi;
2127
this.strokeId = getNextNum();
22-
System.out.println(this.strokeId);
2328
this.language = "en-US";
2429
this.kind = StrokeKind.UNKNOWN;
2530
}
2631

27-
public void addPoint(double x, double y) {
28-
InkPoint point = new InkPoint(x,y);
32+
public void addPoint(float x, float y) {
33+
x = x / xdpi * InkRecognitionUnit.INCH_TO_MM;
34+
y = y / ydpi * InkRecognitionUnit.INCH_TO_MM;
35+
InkPoint point = new InkPoint(x, y);
2936
inkPoints.add(point);
3037
}
3138

3239
private int getNextNum()
3340
{
3441
return ++num;
3542
}
36-
37-
}
43+
}

java/InkRecognition/android-sample-app/Recognizer/app/src/main/java/CognitiveServices/Ink/Recognition/InkWord.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,4 @@ public String getText() {
3535

3636
this.text = jsonWord.getString("recognizedText");
3737
}
38-
39-
4038
}

0 commit comments

Comments
 (0)