Mercurial Hosting > traffic-intelligence
comparison python/cvutils.py @ 411:31604ef1cad4
added hog functions and the display of road user types if known
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Wed, 21 Aug 2013 00:00:23 -0400 |
parents | 91954c76d12c |
children | 8fdbc13dad8b |
comparison
equal
deleted
inserted
replaced
410:91954c76d12c | 411:31604ef1cad4 |
---|---|
171 return fps | 171 return fps |
172 else: | 172 else: |
173 print 'Cannot load file ' + videoFilename | 173 print 'Cannot load file ' + videoFilename |
174 return None | 174 return None |
175 | 175 |
176 def imageBox(img, obj, frameNum, homography, width, height, px=.2, py=.2, PixelThreshold=800): | |
177 x = [] | |
178 y = [] | |
179 for f in obj.features: | |
180 if f.existsAtInstant(frameNum): | |
181 x.append(f.getPositionAtInstant(frameNum).project(homography).x) | |
182 y.append(f.getPositionAtInstant(frameNum).project(homography).y) | |
183 Xmin = min(x) | |
184 Xmax = max(x) | |
185 Ymin = min(y) | |
186 Ymax = max(y) | |
187 XMm = px * (Xmax - Xmin) | |
188 YMm = py * (Ymax - Ymin) | |
189 a = max(Ymax - Ymin + (2 * YMm), Xmax - (Xmin + 2 * XMm)) | |
190 Y_Crop_min = int(max(0, .5 * (Ymin + Ymax - a))) | |
191 Y_Crop_Max = int(min(height - 1, .5 * (Ymin + Ymax + a))) | |
192 X_Crop_min = int(max(0, .5 * (Xmin + Xmax - a))) | |
193 X_Crop_Max = int(min(width - 1, .5 * (Xmin + Xmax + a))) | |
194 if Y_Crop_Max != Y_Crop_min and X_Crop_Max != X_Crop_min and (Y_Crop_Max - Y_Crop_min) * (X_Crop_Max - X_Crop_min) > PixelThreshold: | |
195 img_crop = img[Y_Crop_min : Y_Crop_Max, X_Crop_min : X_Crop_Max] | |
196 else: | |
197 img_crop = [] | |
198 return img_crop, Y_Crop_min, Y_Crop_Max, X_Crop_min, X_Crop_Max | |
199 | |
200 | |
176 def displayTrajectories(videoFilename, objects, boundingBoxes, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1.): | 201 def displayTrajectories(videoFilename, objects, boundingBoxes, homography = None, firstFrameNum = 0, lastFrameNumArg = None, printFrames = True, rescale = 1.): |
177 '''Displays the objects overlaid frame by frame over the video ''' | 202 '''Displays the objects overlaid frame by frame over the video ''' |
203 from moving import userTypeNames | |
204 | |
178 capture = cv2.VideoCapture(videoFilename) | 205 capture = cv2.VideoCapture(videoFilename) |
206 width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)) | |
207 height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)) | |
179 if capture.isOpened(): | 208 if capture.isOpened(): |
180 key = -1 | 209 key = -1 |
181 ret = True | 210 ret = True |
182 frameNum = firstFrameNum | 211 frameNum = firstFrameNum |
183 capture.set(cv2.CAP_PROP_POS_FRAMES, firstFrameNum) | 212 capture.set(cv2.CAP_PROP_POS_FRAMES, firstFrameNum) |
200 obj.projectedPositions = obj.positions | 229 obj.projectedPositions = obj.positions |
201 draw(img, obj.projectedPositions, cvRed, frameNum-obj.getFirstInstant()) | 230 draw(img, obj.projectedPositions, cvRed, frameNum-obj.getFirstInstant()) |
202 if frameNum in boundingBoxes.keys(): | 231 if frameNum in boundingBoxes.keys(): |
203 for rect in boundingBoxes[frameNum]: | 232 for rect in boundingBoxes[frameNum]: |
204 cv2.rectangle(img, rect[0].asint().astuple(), rect[1].asint().astuple(), cvRed) | 233 cv2.rectangle(img, rect[0].asint().astuple(), rect[1].asint().astuple(), cvRed) |
205 cv2.putText(img, '{0}'.format(obj.num), obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) | 234 objDescription = '{} '.format(obj.num) |
235 if userTypeNames[obj.userType] != 'unknown': | |
236 objDescription += userTypeNames[obj.userType][0].upper() | |
237 cv2.putText(img, objDescription, obj.projectedPositions[frameNum-obj.getFirstInstant()].asint().astuple(), cv2.FONT_HERSHEY_PLAIN, 1, cvRed) | |
238 if obj.features != None: | |
239 img_crop, Y_Crop_min, Y_Crop_Max, X_Crop_min, X_Crop_Max = imageBox(img, obj, frameNum, homography, width, height) | |
240 cv2.rectangle(img, (X_Crop_min, Y_Crop_min), (X_Crop_Max, Y_Crop_Max), cvBlue, 1) | |
206 cvImshow('frame', img, rescale) | 241 cvImshow('frame', img, rescale) |
207 key = cv2.waitKey() | 242 key = cv2.waitKey() |
208 if saveKey(key): | 243 if saveKey(key): |
209 cv2.imwrite('image.png', img) | 244 cv2.imwrite('image.png', img) |
210 frameNum += 1 | 245 frameNum += 1 |
297 else: | 332 else: |
298 print(dp) | 333 print(dp) |
299 return None | 334 return None |
300 | 335 |
301 if skimageAvailable: | 336 if skimageAvailable: |
302 def createHOGTrainingSet(imageDirectory, classLabel, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(3, 3), visualize=False, normalize=False): | 337 def HOG(image, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(2, 2), visualize=False, normalize=False): |
303 from os import listdir | |
304 from matplotlib.pyplot import imread, imshow, figure, subplot | |
305 from skimage.feature import hog | 338 from skimage.feature import hog |
306 from skimage import color, transform | 339 from skimage import color, transform |
340 | |
341 bwImg = color.rgb2gray(image) | |
342 inputImg = transform.resize(bwImg, rescaleSize) | |
343 features = hog(inputImg, orientations, pixelsPerCell, cellsPerBlock, visualize, normalize) | |
344 if visualize: | |
345 from matplotlib.pyplot import imshow, figure, subplot | |
346 hogViz = features[1] | |
347 features = features[0] | |
348 figure() | |
349 subplot(1,2,1) | |
350 imshow(img) | |
351 subplot(1,2,2) | |
352 imshow(hogViz) | |
353 return features | |
354 | |
355 def createHOGTrainingSet(imageDirectory, classLabel, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(2, 2), visualize=False, normalize=False): | |
356 from os import listdir | |
307 from numpy import array, float32 | 357 from numpy import array, float32 |
358 from matplotlib.pyplot import imread | |
308 | 359 |
309 inputData = [] | 360 inputData = [] |
310 for filename in listdir(imageDirectory): | 361 for filename in listdir(imageDirectory): |
311 img = imread(imageDirectory+filename) | 362 img = imread(imageDirectory+filename) |
312 bwImg = color.rgb2gray(img) | 363 features = HOG(img, rescaleSize, orientations, pixelsPerCell, cellsPerBlock, visualize, normalize) |
313 inputImg = transform.resize(bwImg, rescaleSize) | |
314 features = hog(inputImg, orientations, pixelsPerCell, cellsPerBlock, visualize, normalize) | |
315 if visualize: | |
316 hogViz = features[1] | |
317 features = features[0] | |
318 figure() | |
319 subplot(1,2,1) | |
320 imshow(img) | |
321 subplot(1,2,2) | |
322 imshow(hogViz) | |
323 inputData.append(features) | 364 inputData.append(features) |
324 | 365 |
325 nImages = len(inputData) | 366 nImages = len(inputData) |
326 return array(inputData, dtype = float32), array([classLabel]*nImages, dtype = float32) | 367 return array(inputData, dtype = float32), array([classLabel]*nImages, dtype = float32) |
327 | 368 |