-
Notifications
You must be signed in to change notification settings - Fork 33
/
regions.go
81 lines (72 loc) · 2.1 KB
/
regions.go
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
71
72
73
74
75
76
77
78
79
80
81
package detector
import (
"fmt"
"github.com/snowzach/doods/odrpc"
)
func (m *Mux) FilterResponse(request *odrpc.DetectRequest, response *odrpc.DetectResponse) {
// No filters, return everything
if len(request.Detect) == 0 && len(request.Regions) == 0 {
return
}
temp := response.Detections[:0]
detectionsLoop:
for _, detection := range response.Detections {
// Cleanup the bounds
if detection.Top < 0 {
detection.Top = 0
}
if detection.Left < 0 {
detection.Left = 0
}
if detection.Bottom > 1 {
detection.Bottom = 1
}
if detection.Right > 1 {
detection.Right = 1
}
// We have this class listed explicitly
if score, ok := request.Detect[detection.Label]; ok {
if detection.Confidence >= score {
temp = append(temp, detection)
continue
}
// Wildcard class
} else if score, ok := request.Detect["*"]; ok {
if detection.Confidence >= score {
temp = append(temp, detection)
continue
}
}
for _, region := range request.Regions {
var inRegion bool
if region.Covers {
if detection.Top >= region.Top && detection.Left >= region.Left && detection.Bottom <= region.Bottom && detection.Right <= region.Right {
inRegion = true
}
} else {
if detection.Top <= region.Bottom && detection.Left <= region.Right && detection.Bottom >= region.Top && detection.Right >= region.Left {
inRegion = true
}
}
if inRegion {
// We have this class listed explicitly
if score, ok := region.Detect[detection.Label]; ok {
if detection.Confidence >= score {
temp = append(temp, detection)
continue detectionsLoop
}
// Wildcard class
} else if score, ok := region.Detect["*"]; ok {
if detection.Confidence >= score {
temp = append(temp, detection)
continue detectionsLoop
}
}
}
}
}
response.Detections = temp
for _, detection := range response.Detections {
m.logger.Debugw("Detection", "id", request.Id, "label", detection.Label, "confidence", detection.Confidence, "location", fmt.Sprintf("%f,%f,%f,%f", detection.Top, detection.Left, detection.Bottom, detection.Right))
}
}