Skip to content

Commit 4a4e7ff

Browse files
committed
Add Images result type
1 parent 87ffbe4 commit 4a4e7ff

File tree

10 files changed

+150
-23
lines changed

10 files changed

+150
-23
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@
22
.idea
33
build
44
gradle.properties
5+
normalizedInputImage.jpg
6+
portraitFromVisual.jpg

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,13 +101,15 @@ openapitools/openapi-generator-cli generate \
101101
openapitools/openapi-generator-cli generate \
102102
-i /definitions/index.yml -g java -o /client/client \
103103
-c /client/java-generator-config.json -t /client/client/generator-templates/ \
104-
--import-mappings $ENUM_MAPPINGS,TextField=com.regula.documentreader.webclient.model.ext.TextField \
104+
--import-mappings $ENUM_MAPPINGS,TextField=com.regula.documentreader.webclient.model.ext.TextField,\
105+
ImagesField=com.regula.documentreader.webclient.model.ext.ImagesField \
105106
\
106107
&& docker run --rm -v "${PWD}:/client" -v "${DEFINITION_FOLDER}:/definitions" \
107108
openapitools/openapi-generator-cli generate \
108109
-i /definitions/index.yml -g java -o /client/client \
109110
-c /client/java-generator-config.json -t /client/client/generator-templates/ \
110-
--import-mappings $ENUM_MAPPINGS,Text=com.regula.documentreader.webclient.model.ext.Text \
111+
--import-mappings $ENUM_MAPPINGS,Text=com.regula.documentreader.webclient.model.ext.Text,\
112+
Images=com.regula.documentreader.webclient.model.ext.Images \
111113
\
112114
&& ./gradlew -p ./ goJF
113115
```

client/.openapi-generator/FILES

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ src/main/generated/com/regula/documentreader/webclient/model/GraphicField.java
2828
src/main/generated/com/regula/documentreader/webclient/model/GraphicFieldsList.java
2929
src/main/generated/com/regula/documentreader/webclient/model/GraphicsResult.java
3030
src/main/generated/com/regula/documentreader/webclient/model/ImageData.java
31-
src/main/generated/com/regula/documentreader/webclient/model/Images.java
3231
src/main/generated/com/regula/documentreader/webclient/model/ImagesAvailableSource.java
3332
src/main/generated/com/regula/documentreader/webclient/model/ImagesField.java
3433
src/main/generated/com/regula/documentreader/webclient/model/ImagesFieldValue.java

client/src/main/generated/com/regula/documentreader/webclient/model/Images.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ public class Images {
2727
public static final String SERIALIZED_NAME_FIELD_LIST = "fieldList";
2828

2929
@SerializedName(SERIALIZED_NAME_FIELD_LIST)
30-
private List<ImagesField> fieldList = new ArrayList<ImagesField>();
30+
private List<com.regula.documentreader.webclient.model.ext.ImagesField> fieldList =
31+
new ArrayList<com.regula.documentreader.webclient.model.ext.ImagesField>();
3132

3233
public Images withAvailableSourceList(List<ImagesAvailableSource> availableSourceList) {
3334
this.availableSourceList = availableSourceList;
@@ -52,12 +53,14 @@ public void setAvailableSourceList(List<ImagesAvailableSource> availableSourceLi
5253
this.availableSourceList = availableSourceList;
5354
}
5455

55-
public Images withFieldList(List<ImagesField> fieldList) {
56+
public Images withFieldList(
57+
List<com.regula.documentreader.webclient.model.ext.ImagesField> fieldList) {
5658
this.fieldList = fieldList;
5759
return this;
5860
}
5961

60-
public Images addFieldListItem(ImagesField fieldListItem) {
62+
public Images addFieldListItem(
63+
com.regula.documentreader.webclient.model.ext.ImagesField fieldListItem) {
6164
this.fieldList.add(fieldListItem);
6265
return this;
6366
}
@@ -67,11 +70,12 @@ public Images addFieldListItem(ImagesField fieldListItem) {
6770
*
6871
* @return fieldList
6972
*/
70-
public List<ImagesField> getFieldList() {
73+
public List<com.regula.documentreader.webclient.model.ext.ImagesField> getFieldList() {
7174
return fieldList;
7275
}
7376

74-
public void setFieldList(List<ImagesField> fieldList) {
77+
public void setFieldList(
78+
List<com.regula.documentreader.webclient.model.ext.ImagesField> fieldList) {
7579
this.fieldList = fieldList;
7680
}
7781

client/src/main/generated/com/regula/documentreader/webclient/model/ImagesResult.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class ImagesResult extends ResultItem {
2020
public static final String SERIALIZED_NAME_IMAGES = "Images";
2121

2222
@SerializedName(SERIALIZED_NAME_IMAGES)
23-
private Images images;
23+
private com.regula.documentreader.webclient.model.ext.Images images;
2424

25-
public ImagesResult withImages(Images images) {
25+
public ImagesResult withImages(com.regula.documentreader.webclient.model.ext.Images images) {
2626
this.images = images;
2727
return this;
2828
}
@@ -32,11 +32,11 @@ public ImagesResult withImages(Images images) {
3232
*
3333
* @return images
3434
*/
35-
public Images getImages() {
35+
public com.regula.documentreader.webclient.model.ext.Images getImages() {
3636
return images;
3737
}
3838

39-
public void setImages(Images images) {
39+
public void setImages(com.regula.documentreader.webclient.model.ext.Images images) {
4040
this.images = images;
4141
}
4242

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package com.regula.documentreader.webclient.model.ext;
2+
3+
import javax.annotation.Nullable;
4+
5+
public class Images extends com.regula.documentreader.webclient.model.Images {
6+
7+
@Nullable
8+
public ImagesField getField(int fieldType) {
9+
for (ImagesField field : getFieldList()) {
10+
if (field.getFieldType() == fieldType) {
11+
return field;
12+
}
13+
}
14+
return null;
15+
}
16+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.regula.documentreader.webclient.model.ext;
2+
3+
import com.regula.documentreader.webclient.model.ImagesFieldValue;
4+
import com.regula.documentreader.webclient.model.Source;
5+
import java.util.List;
6+
import javax.annotation.Nullable;
7+
8+
public class ImagesField extends com.regula.documentreader.webclient.model.ImagesField {
9+
10+
@Nullable
11+
public byte[] getValue(String source, boolean original) {
12+
for (ImagesFieldValue value : getValueList()) {
13+
if (value.getSource().equals(source)) {
14+
if (original) {
15+
return value.getOriginalValue();
16+
} else {
17+
return value.getValue();
18+
}
19+
}
20+
}
21+
return null;
22+
}
23+
24+
@Nullable
25+
public byte[] getValue(String source) {
26+
return getValue(source, false);
27+
}
28+
29+
@Nullable
30+
public byte[] getValue() {
31+
List<ImagesFieldValue> values = getValueList();
32+
if (values == null || values.isEmpty()) {
33+
return null;
34+
}
35+
ImagesFieldValue bestValue = values.get(0);
36+
for (ImagesFieldValue value : values) {
37+
if (bestValue.getSource() == Source.BARCODE && value.getSource() == Source.VISUAL)
38+
bestValue = value;
39+
if (bestValue.getSource() == Source.BARCODE && value.getSource() == Source.RFID)
40+
bestValue = value;
41+
if (bestValue.getSource() == Source.VISUAL && value.getSource() == Source.RFID)
42+
bestValue = value;
43+
}
44+
return bestValue.getValue();
45+
}
46+
}

client/src/main/java/com/regula/documentreader/webclient/model/ext/RecognitionResponse.java

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,17 @@
11
package com.regula.documentreader.webclient.model.ext;
22

3+
import com.regula.documentreader.webclient.model.ImagesResult;
34
import com.regula.documentreader.webclient.model.ProcessResponse;
5+
import com.regula.documentreader.webclient.model.RawImageResult;
46
import com.regula.documentreader.webclient.model.Result;
57
import com.regula.documentreader.webclient.model.ResultItem;
68
import com.regula.documentreader.webclient.model.Status;
79
import com.regula.documentreader.webclient.model.StatusResult;
810
import com.regula.documentreader.webclient.model.TextResult;
11+
import java.util.ArrayList;
12+
import java.util.Collections;
13+
import java.util.List;
14+
import javax.annotation.Nullable;
915

1016
public class RecognitionResponse {
1117
private final ProcessResponse originalResponse;
@@ -18,14 +24,28 @@ public ProcessResponse getOriginalResponse() {
1824
return originalResponse;
1925
}
2026

21-
public Text text() {
22-
TextResult result = resultByType(Result.TEXT);
27+
@Nullable
28+
public byte[] normalizedInputImage() {
29+
RawImageResult result = resultByType(Result.RAW_IMAGE);
2330
if (result != null) {
24-
return result.getText();
31+
return result.getRawImageContainer().getImage();
2532
}
2633
return null;
2734
}
2835

36+
public List<byte[]> normalizedInputImages() {
37+
List<RawImageResult> results = resultsByType(Result.RAW_IMAGE);
38+
if (results != null) {
39+
List<byte[]> images = new ArrayList<>();
40+
for (RawImageResult r : results) {
41+
images.add(r.getRawImageContainer().getImage());
42+
}
43+
return images;
44+
}
45+
return Collections.emptyList();
46+
}
47+
48+
@Nullable
2949
public Status status() {
3050
StatusResult result = resultByType(Result.STATUS);
3151
if (result != null) {
@@ -34,6 +54,24 @@ public Status status() {
3454
return null;
3555
}
3656

57+
@Nullable
58+
public Text text() {
59+
TextResult result = resultByType(Result.TEXT);
60+
if (result != null) {
61+
return result.getText();
62+
}
63+
return null;
64+
}
65+
66+
@Nullable
67+
public Images images() {
68+
ImagesResult result = resultByType(Result.IMAGES);
69+
if (result != null) {
70+
return result.getImages();
71+
}
72+
return null;
73+
}
74+
3775
public <R> R resultByType(int type) {
3876
for (ResultItem item : originalResponse.getContainerList().getList()) {
3977
if (item.getResultType() == type) {
@@ -42,4 +80,14 @@ public <R> R resultByType(int type) {
4280
}
4381
return null;
4482
}
83+
84+
public <R> List<R> resultsByType(int type) {
85+
List<R> results = new ArrayList<>();
86+
for (ResultItem item : originalResponse.getContainerList().getList()) {
87+
if (item.getResultType() == type) {
88+
results.add((R) item);
89+
}
90+
}
91+
return results;
92+
}
4593
}

client/src/main/java/com/regula/documentreader/webclient/model/ext/TextField.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,6 @@
88

99
public class TextField extends com.regula.documentreader.webclient.model.TextField {
1010

11-
public String getValue() {
12-
return "todo";
13-
}
14-
1511
@Nullable
1612
public String getValue(String source, boolean original) {
1713
for (TextFieldValue value : getValueList()) {

example/src/main/java/com/regula/documentreader/webclient/example/Main.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,30 +11,34 @@
1111

1212
import java.io.IOException;
1313

14+
import java.net.URISyntaxException;
15+
import java.nio.file.Files;
16+
import java.nio.file.Path;
1417
import java.util.List;
1518

19+
import static com.regula.documentreader.webclient.model.GraphicFieldType.PORTRAIT;
1620
import static com.regula.documentreader.webclient.model.TextFieldType.DOCUMENT_NUMBER;
1721

1822
public class Main {
1923
public static final String API_BASE_PATH = "API_BASE_PATH";
2024
public static final String TEST_LICENSE = "TEST_LICENSE";
2125

22-
23-
public static void main(String[] args) throws IOException, ApiException {
26+
27+
public static void main(String[] args) throws IOException, ApiException, URISyntaxException {
2428

2529
var apiBaseUrl = System.getenv(API_BASE_PATH);
2630
if (apiBaseUrl == null) {
2731
apiBaseUrl = "http://localhost:8080";
2832
}
2933
var license = System.getenv(TEST_LICENSE); // optional, used here only for smoke test purpouses
30-
34+
3135

3236
byte[] imageBytes = readFile("australia_passport.jpg");
3337
var image = new ProcessRequestImage(imageBytes, Light.WHITE);
3438

3539
var requestParams = new RecognitionParams()
3640
.withScenario(Scenario.FULL_PROCESS)
37-
.withResultTypeOutput(Result.STATUS, Result.TEXT, Result.LEXICAL_ANALYSIS, 37);
41+
.withResultTypeOutput(Result.RAW_IMAGE, Result.STATUS, Result.TEXT, Result.IMAGES);
3842

3943
RecognitionRequest request = new RecognitionRequest(requestParams, List.of(image));
4044

@@ -64,6 +68,12 @@ public static void main(String[] args) throws IOException, ApiException {
6468
System.out.format(" MRZ-Visual values comparison: %s%n", docNumberMrzVisualMatching);
6569
System.out.format("-----------------------------------------------------------------");
6670

71+
var normalizedInputImage = response.normalizedInputImage();
72+
var portraitField = response.images().getField(PORTRAIT);
73+
var portraitFromVisual = portraitField.getValue(Source.VISUAL);
74+
saveFile("portraitFromVisual.jpg", portraitFromVisual);
75+
saveFile("normalizedInputImage.jpg", normalizedInputImage);
76+
6777
// how to get low lvl individual results
6878
LexicalAnalysisResult lexResult = response.resultByType(Result.LEXICAL_ANALYSIS);
6979
}
@@ -72,4 +82,8 @@ private static byte[] readFile(String filePath) throws IOException {
7282
var classLoader = Main.class.getClassLoader();
7383
return classLoader.getResourceAsStream(filePath).readAllBytes();
7484
}
85+
86+
private static void saveFile(String filePath, byte[] data) throws IOException, URISyntaxException {
87+
Files.write(Path.of(filePath), data);
88+
}
7589
}

0 commit comments

Comments
 (0)