Mercurial Hosting > traffic-intelligence
comparison python/cvutils.py @ 680:da1352b89d02 dev
classification is working
author | Nicolas Saunier <nicolas.saunier@polymtl.ca> |
---|---|
date | Fri, 05 Jun 2015 02:25:30 +0200 |
parents | 5505f9dbb28e |
children | 94b291a5f933 |
comparison
equal
deleted
inserted
replaced
678:97c305108460 | 680:da1352b89d02 |
---|---|
15 except ImportError: | 15 except ImportError: |
16 print('Scikit-image library could not be loaded (HoG-based classification methods will not be available)') | 16 print('Scikit-image library could not be loaded (HoG-based classification methods will not be available)') |
17 skimageAvailable = False | 17 skimageAvailable = False |
18 | 18 |
19 from sys import stdout | 19 from sys import stdout |
20 from numpy import dot, array, append | 20 from numpy import dot, array, append, float32 |
21 | 21 |
22 #import aggdraw # agg on top of PIL (antialiased drawing) | 22 #import aggdraw # agg on top of PIL (antialiased drawing) |
23 | 23 |
24 | 24 |
25 cvRed = (0,0,255) | 25 cvRed = (0,0,255) |
198 '''Returns nFrames images from the video sequence''' | 198 '''Returns nFrames images from the video sequence''' |
199 from math import floor, log10 | 199 from math import floor, log10 |
200 images = [] | 200 images = [] |
201 capture = cv2.VideoCapture(videoFilename) | 201 capture = cv2.VideoCapture(videoFilename) |
202 if capture.isOpened(): | 202 if capture.isOpened(): |
203 nDigits = int(floor(log10(capture.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT))))+1 | 203 rawCount = capture.get(cv2.cv.CV_CAP_PROP_FRAME_COUNT) |
204 if rawCount < 0: | |
205 rawCount = firstFrameNum+nFrames+1 | |
206 nDigits = int(floor(log10(rawCount)))+1 | |
204 ret = False | 207 ret = False |
205 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum) | 208 capture.set(cv2.cv.CV_CAP_PROP_POS_FRAMES, firstFrameNum) |
206 imgNum = 0 | 209 imgNum = 0 |
207 while imgNum<nFrames: | 210 while imgNum<nFrames: |
208 ret, img = capture.read() | 211 ret, img = capture.read() |
230 return fps | 233 return fps |
231 else: | 234 else: |
232 print('Video capture for {} failed'.format(videoFilename)) | 235 print('Video capture for {} failed'.format(videoFilename)) |
233 return None | 236 return None |
234 | 237 |
235 def imageBox(img, obj, frameNum, homography, width, height, px = 0.2, py = 0.2, pixelThreshold = 800): | 238 def imageBox(img, obj, frameNum, homography, width, height, px = 0.2, py = 0.2, minNPixels = 800): |
236 'Computes the bounding box of object at frameNum' | 239 'Computes the bounding box of object at frameNum' |
237 x = [] | 240 x = [] |
238 y = [] | 241 y = [] |
239 if obj.hasFeatures(): | 242 if obj.hasFeatures(): |
240 for f in obj.getFeatures(): | 243 for f in obj.getFeatures(): |
251 a = max(ymax - ymin + (2 * yMm), xmax - (xmin + 2 * xMm)) | 254 a = max(ymax - ymin + (2 * yMm), xmax - (xmin + 2 * xMm)) |
252 yCropMin = int(max(0, .5 * (ymin + ymax - a))) | 255 yCropMin = int(max(0, .5 * (ymin + ymax - a))) |
253 yCropMax = int(min(height - 1, .5 * (ymin + ymax + a))) | 256 yCropMax = int(min(height - 1, .5 * (ymin + ymax + a))) |
254 xCropMin = int(max(0, .5 * (xmin + xmax - a))) | 257 xCropMin = int(max(0, .5 * (xmin + xmax - a))) |
255 xCropMax = int(min(width - 1, .5 * (xmin + xmax + a))) | 258 xCropMax = int(min(width - 1, .5 * (xmin + xmax + a))) |
256 if yCropMax != yCropMin and xCropMax != xCropMin and (yCropMax - yCropMin) * (xCropMax - xCropMin) > pixelThreshold: | 259 if yCropMax != yCropMin and xCropMax != xCropMin and (yCropMax - yCropMin) * (xCropMax - xCropMin) > minNPixels: |
257 croppedImg = img[yCropMin : yCropMax, xCropMin : xCropMax] | 260 croppedImg = img[yCropMin : yCropMax, xCropMin : xCropMax] |
258 else: | 261 else: |
259 croppedImg = [] | 262 croppedImg = [] |
260 return croppedImg, yCropMin, yCropMax, xCropMin, xCropMax | 263 return croppedImg, yCropMin, yCropMax, xCropMin, xCropMax |
261 | 264 |
536 else: | 539 else: |
537 print(dp) | 540 print(dp) |
538 return None | 541 return None |
539 | 542 |
540 if skimageAvailable: | 543 if skimageAvailable: |
544 from skimage.feature import hog | |
545 from skimage import color, transform | |
546 | |
541 def HOG(image, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(2, 2), visualize=False, normalize=False): | 547 def HOG(image, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(2, 2), visualize=False, normalize=False): |
542 from skimage.feature import hog | |
543 from skimage import color, transform | |
544 | |
545 bwImg = color.rgb2gray(image) | 548 bwImg = color.rgb2gray(image) |
546 inputImg = transform.resize(bwImg, rescaleSize) | 549 inputImg = transform.resize(bwImg, rescaleSize) |
547 features = hog(inputImg, orientations, pixelsPerCell, cellsPerBlock, visualize, normalize) | 550 features = hog(inputImg, orientations, pixelsPerCell, cellsPerBlock, visualize, normalize) |
548 if visualize: | 551 if visualize: |
549 from matplotlib.pyplot import imshow, figure, subplot | 552 from matplotlib.pyplot import imshow, figure, subplot |
550 hogViz = features[1] | 553 hogViz = features[1] |
551 features = features[0] | 554 features = features[0] |
552 figure() | 555 figure() |
553 subplot(1,2,1) | 556 subplot(1,2,1) |
554 imshow(img) | 557 imshow(inputImg) |
555 subplot(1,2,2) | 558 subplot(1,2,2) |
556 imshow(hogViz) | 559 imshow(hogViz) |
557 return features | 560 return float32(features) |
558 | 561 |
559 def createHOGTrainingSet(imageDirectory, classLabel, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(2, 2), visualize=False, normalize=False): | 562 def createHOGTrainingSet(imageDirectory, classLabel, rescaleSize = (64, 64), orientations=9, pixelsPerCell=(8, 8), cellsPerBlock=(2, 2), visualize=False, normalize=False): |
560 from os import listdir | 563 from os import listdir |
561 from numpy import float32 | |
562 from matplotlib.pyplot import imread | 564 from matplotlib.pyplot import imread |
563 | 565 |
564 inputData = [] | 566 inputData = [] |
565 for filename in listdir(imageDirectory): | 567 for filename in listdir(imageDirectory): |
566 img = imread(imageDirectory+filename) | 568 img = imread(imageDirectory+filename) |