@@ -25,10 +25,15 @@ def _loadImg(self, file):
25
25
26
26
def loadData (self , file ):
27
27
original_img = self ._loadImg (file )
28
- img , anns = self ._cropImg (original_img , self ._loadAnn (file ))
28
+ anns , mask = self ._loadAnn (file )
29
+ img , anns = self ._cropImg (original_img , anns )
29
30
img , anns = self ._resize (img , anns )
30
31
img = self ._normalize (img )
31
32
33
+ #mask = self._normalize(self._resize(self._cropImg(mask)))
34
+ #cv2.imshow('result', mask)
35
+ #cv2.waitKey(0)
36
+
32
37
return img , anns
33
38
34
39
def show_results (self , debugger , original_image , anns , save = True ):
@@ -95,18 +100,21 @@ def _normalize(self, img):
95
100
inp = (inp - mean ) / std
96
101
return inp
97
102
98
- def _resize (self , img , anns ):
103
+ def _resize (self , img , anns = None ):
99
104
img_new = cv2 .resize (img , (512 , 256 ), interpolation = cv2 .INTER_CUBIC )
100
105
fx = np .size (img , 1 ) / 512
101
106
fy = np .size (img , 0 ) / 256
102
107
108
+ if anns == None :
109
+ return img_new
110
+
103
111
for ipt in range (1 , self .num_joints + 1 ):
104
112
anns [ipt ]["bbox" ] = (anns [ipt ]["bbox" ]/ np .array ([fx , fy , fx , fy ])).astype (int )
105
113
anns [ipt ]["center" ] = (anns [ipt ]["center" ]/ np .array ([fx , fy ])).astype (int )
106
114
107
115
return img_new , anns
108
116
109
- def _cropImg (self , img , anns ):
117
+ def _cropImg (self , img , anns = None ):
110
118
width = np .size (img , 1 )
111
119
height = np .size (img , 0 )
112
120
@@ -129,13 +137,16 @@ def _cropImg(self, img, anns):
129
137
diffW = int ((width - newW )/ 2 )
130
138
img = img [diffH :diffH + newH ,diffW :diffW + newW ,:]
131
139
140
+ if anns == None :
141
+ return img
142
+
132
143
for ipt in range (1 , self .num_joints + 1 ):
133
144
anns [ipt ]["bbox" ] = anns [ipt ]["bbox" ] - np .array ([diffW + self .w_pad , diffH + self .h_pad , diffW + self .w_pad , diffH + self .h_pad ])
134
145
anns [ipt ]["center" ] = anns [ipt ]["center" ] - np .array ([diffW + self .w_pad , diffH + self .h_pad ])
135
146
136
147
return img , anns
137
148
138
- def _loadAnn (self , file , isBinary = False ):
149
+ def _loadAnn (self , file ):
139
150
'''
140
151
:param file: pano jpg image path
141
152
:return data: { 1 : {"bbox":[(0,0),(0,0),(0,0),(0,0)], "center":(0,0), "visible":1/0} , 2: {} , ... }
@@ -149,30 +160,46 @@ def _loadAnn(self, file, isBinary=False):
149
160
f = open (file .replace ('jpg' , 'txt' ), 'r' )
150
161
txt = f .readlines ()
151
162
f .close ()
152
- for t in txt :
163
+
164
+ for idx , t in enumerate (txt ):
153
165
dict = {}
154
166
t = t .replace ('\n ' , '' ).split (', ' )
155
167
156
168
x_coord = []
157
169
y_coord = []
170
+ coords = np .zeros ((8 , 2 ), np .int32 )
158
171
159
172
for i in range (8 ):
173
+ coords [i ] = [centerX + int (t [2 * i + 3 ]), centerY + int (t [2 * i + 4 ])]
160
174
x_coord .append (centerX + int (t [2 * i + 3 ]))
161
175
y_coord .append (centerY + int (t [2 * i + 4 ]))
162
176
163
- coords = [min (x_coord ), min (y_coord ), max (x_coord ), max (y_coord )] # minX, minY, maxX, maxY
177
+ bboxcoords = [min (x_coord ), min (y_coord ), max (x_coord ), max (y_coord )] # minX, minY, maxX, maxY
164
178
165
- dict ["bbox" ] = np .array ([coords [0 ], coords [1 ], coords [2 ], coords [3 ]]) # from top-left corner, clockwise
179
+ dict ["bbox" ] = np .array ([bboxcoords [0 ], bboxcoords [1 ], bboxcoords [2 ], bboxcoords [3 ]]) # from top-left corner, clockwise
166
180
dict ["center" ] = np .array ([centerX + int (t [27 ]), centerY + int (t [28 ])])
167
181
168
182
if t [1 ]== 'True' :
169
183
dict ["visible" ] = 1
170
184
else :
171
185
dict ["visible" ] = 0
172
186
187
+ dict ["mask" ] = coords
188
+
173
189
data [teeth_num [t [0 ]]] = dict
174
190
175
- return data
191
+ mask = self .getSegMask (np .zeros_like (img ), data )
192
+
193
+ return data , mask
194
+
195
+ def getSegMask (self , img , data ):
196
+ for i in range (1 , 33 ):
197
+ visible = data [i ]["visible" ]
198
+ mask = data [i ]["mask" ]
199
+ if visible == 1 :
200
+ cv2 .fillConvexPoly (img , mask , (255 ,0 ,0 ))
201
+
202
+ return img
176
203
177
204
def showImage (self , img , anns ):
178
205
for ann in anns :
0 commit comments