-
Notifications
You must be signed in to change notification settings - Fork 5
/
DocFields.java
70 lines (54 loc) · 1.8 KB
/
DocFields.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package org.genericsystem.cv.classifier;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.stream.StreamSupport;
import org.genericsystem.cv.Img;
import org.opencv.core.Rect;
import org.opencv.core.Scalar;
public class DocFields implements Iterable<DocField> {
private List<DocField> fields;
public DocFields() {
this.fields = new ArrayList<>();
}
public DocFields(List<DocField> fields) {
this.fields = fields;
}
public static DocFields of(List<Rect> rects) {
DocFields fields = new DocFields();
fields.addFields(rects);
return fields;
}
public void addFields(List<Rect> rects) {
AtomicInteger counter = new AtomicInteger(0);
fields = rects.stream().map(rect -> new DocField(counter.incrementAndGet(), rect)).collect(Collectors.toList());
}
public void drawOcrPerspectiveInverse(Img display, Scalar color, int thickness) {
consolidatedFieldStream().forEach(field -> field.drawOcrPerspectiveInverse(display, color, thickness));
}
public void drawConsolidated(Img stabilizedDisplay) {
consolidatedFieldStream().forEach(field -> field.draw(stabilizedDisplay));
}
public void consolidateOcr(Img rootImg) {
fields.stream().filter(DocField::needOcr).forEach(f -> f.ocr(rootImg));
}
public Stream<DocField> consolidatedFieldStream() {
return fields.stream().filter(f -> f.isConsolidated());
}
public int size() {
return fields.size();
}
public Stream<DocField> stream() {
return StreamSupport.stream(fields.spliterator(), false);
}
public Stream<DocField> parallelStream() {
return StreamSupport.stream(fields.spliterator(), true);
}
@Override
public Iterator<DocField> iterator() {
return fields.iterator();
}
}