-
Notifications
You must be signed in to change notification settings - Fork 0
/
Interface.py
120 lines (107 loc) · 3.27 KB
/
Interface.py
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import json
import cv2
from algorithm.absorb import absorb
from algorithm.Blenometer import checkBleno
from algorithm.SF6 import SF6Reader
from algorithm.oilTempreture import oilTempreture
from algorithm.arrest.countArrester import countArrester
from algorithm.arrest.digitArrester import digitArrester
from algorithm.arrest.doubleArrester import doubleArrester
from algorithm.pressure.digitPressure import digitPressure
from algorithm.pressure.normalPressure import normalPressure
from algorithm.pressure.colorPressure import colorPressure
from algorithm.onoff.onoffIndoor import onoffIndoor
from algorithm.onoff.onoffOutdoor import onoffOutdoor
def meterReaderCallBack(image, info):
"""call back function"""
if not info["type"]:
return None
else:
return info["type"](image, info)
def getInfo(ID):
"""
get info from file
:param ID: meter ID
:return: info = {
"distance": 10,
"horizontal": 10,
"vertical": 20,
"name": "1_1",
"type": SF6,
"template": "template.jpg",
"ROI": {
"x": 200,
"y": 200,
"w": 1520,
"h": 680
},
"startPoint": {
"x": -1,
"y": -1
},
"endPoint": {
"x": -1,
"y": -1
},
"centerPoint": {
"x": -1,
"y": -1
},
"startValue": 0,
"totalValue": 2
}
"""
file = open("config/" + ID + ".json")
info = json.load(file)
# string to pointer
if info["type"] == "absorb":
info["type"] = absorb
elif info["type"] == "digitPressure":
info["type"] = digitPressure
elif info["type"] == "normalPressure":
info["type"] = normalPressure
elif info["type"] == "colorPressure":
info["type"] = colorPressure
elif info["type"] == "SF6":
info["type"] = SF6Reader
elif info["type"] == "digitArrester":
info["type"] = digitArrester
elif info["type"] == "countArrester":
info["type"] = countArrester
elif info["type"] == "doubleArrester":
info["type"] = doubleArrester
elif info["type"] == "oilTempreture":
info["type"] = oilTempreture
elif info["type"] == "blenometer":
info["type"] = checkBleno
elif info["type"] == "onoffIndoor":
info["type"] = onoffIndoor
elif info["type"] == "onoffOutdoor":
info["type"] = onoffOutdoor
else:
info["type"] = None
print("meter type not support!")
info["template"] = cv2.imread("template/" + ID + ".jpg")
return info
def meterReader(image, meterIDs):
"""
global interface
:param image: camera image
:param meterIDs: list of meter ID
:return:
"""
results = {}
for ID in meterIDs:
# get info from file
info = getInfo(ID)
# ROI extract
x = info["ROI"]["x"]
y = info["ROI"]["y"]
w = info["ROI"]["w"]
h = info["ROI"]["h"]
ROI = image[y:y + h, x:x + w]
# call back
if info["type"] in [digitArrester]:#, digitPressure]:
continue
results[ID] = meterReaderCallBack(ROI, info)
return results