Exemplo n.º 1
0
def processFolder(datasetPath):
	stats = Stats(datasetPath) 
	props = SaliencyProps()
	sal = sal_instance(SaliencyMethods.REGION_CONTRAST,props);
	for category in getDirectories(datasetPath):
		stats.addCategories(category)
		categoryPath = os.path.join(datasetPath,category)
		for image in getDirectories(categoryPath):
			stats.update(category,image,compareWithGroundtruth(sal,categoryPath,image));
		stats.writeCategoryResult(category)
	stats.writeOverallResults()
Exemplo n.º 2
0
def processFolder(datasetPath):
    stats = Stats(datasetPath)
    props = SaliencyProps()
    sal = sal_instance(SaliencyMethods.REGION_CONTRAST, props)
    for category in getDirectories(datasetPath):
        stats.addCategories(category)
        categoryPath = os.path.join(datasetPath, category)
        for image in getDirectories(categoryPath):
            stats.update(category, image,
                         compareWithGroundtruth(sal, categoryPath, image))
        stats.writeCategoryResult(category)
    stats.writeOverallResults()
Exemplo n.º 3
0

if __name__ == "__main__":	
	import argparse
	parser = argparse.ArgumentParser(description='Event tracking algorithm using saliency and bg subtraction')
	parser.add_argument("input",nargs='?',help = "input path",default="../examples/videos/sample_video1.avi");
	parser.add_argument("output",nargs='?',help = "output path",default="test_results/final.avi");
	parser.add_argument("--bg",nargs='?',help = "background subtraction method 1-FD, 2-ES, 3-MG default-2",default=1,type=int);
	parser.add_argument("--sal",nargs='?',help = "saliency method 1-CF, 2-CA, 3-RC, 4-SD default-3",default=3,type=int);
	parser.add_argument("--smoothner",nargs='?',help = "smoothing method 1-Eigen, 2-GMM, 3-SSL,  default-2",default=2,type=int);
	parser.add_argument("--write",nargs='?',help = "write path  default-Dont write",default="test_results/final.avi",type=str);
	parser.add_argument("--extract",nargs='?',help = "extract path default-Dont extract",default="test_results/final.feats",type=str);
	parser.add_argument("--num_prev_frames",nargs='?',help = "num prev frames default-3",default=2,type=int);
	parser.add_argument("--num_blocks",nargs='?',help = "num blocks default-6",default=6,type=int);
	parser.add_argument("--rsz_shape",nargs='+',help = "overlap default-[80 60]",default=[80,60],type=int);
	parser.add_argument("--write_gray",nargs ='?',help = "Write gray value  default-0",default=0,type=int);
	parser.add_argument("--write_bgsub",nargs='?',help = "Write bgsub default-0",default=0,type=int);
	parser.add_argument("--window",nargs='?',help = "window size default-5",default=5,type=int);
	parser.add_argument("--overlap",nargs='?',help = "overlap default-2",default=2,type=int);
	
	args = parser.parse_args()
	inp = args.input;	out = args.output
	vidreader = VideoReader(inp)
	sal = sal_instance(args.sal,SaliencyProps())	
	bg = get_instance(args.bg);
	smoothner = smooth_instance(feats,args.smoothner);
	start = time.time();
	process(vidreader,sal,bg,smoothner,args.num_prev_frames,args.num_blocks,args.write,args.extract,
				args.write_gray==1,args.write_bgsub==1,args.window,args.overlap,args.rsz_shape);
	print "Event Tracker ...",inp,"[DONE] in",(time.time()-start),"seconds";
Exemplo n.º 4
0
from skimage.feature import canny

from pylab import cm
from dnn_predict import get_instance as dnn_instance
from io_module.video_reader import VideoReader
from io_module.video_writer import VideoWriter;
from io_module.block_reader import BlockReader
from saliency import SaliencyProps,SaliencyMethods,get_instance as sal_instance
from bg_sub import get_instance as bg_instance,BGMethods
from tracker import get_instance as tracker_instance,TrackerMethods
from smoothing import get_instance as smooth_instance,SmoothMethods
from features.pixellete import allFeats as feats
from features.color import GRAY
from utils import normalize

sal = sal_instance(SaliencyMethods.REGION_CONTRAST,SaliencyProps())	
bg = bg_instance(BGMethods.FRAME_DIFFERENCING);
smoothner =  smooth_instance(feats,SmoothMethods.GMM_BASED);
tracker = tracker_instance(TrackerMethods.MIXTURE_BASED);

KERNEL = cv2.getStructuringElement(cv2.MORPH_CROSS,(3,3));
def __morphologicalOps__(mask):
	#_mask = binary_fill_holes(mask)
	_mask = cv2.medianBlur(np.uint8(mask),3)
	_mask = cv2.morphologyEx(_mask, cv2.MORPH_CLOSE,KERNEL)
	_mask = binary_fill_holes(_mask)
	_mask = remove_small_objects(_mask,min_size=128,connectivity=2)
	kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(5,5))
	_mask = cv2.dilate(np.uint8(_mask),kernel,iterations = 1)
	return _mask;
	
Exemplo n.º 5
0
                        type=int)
    parser.add_argument("--write_bgsub",
                        nargs='?',
                        help="Write bgsub default-0",
                        default=0,
                        type=int)
    parser.add_argument("--window",
                        nargs='?',
                        help="window size default-5",
                        default=5,
                        type=int)
    parser.add_argument("--overlap",
                        nargs='?',
                        help="overlap default-2",
                        default=2,
                        type=int)

    args = parser.parse_args()
    inp = args.input
    out = args.output
    vidreader = VideoReader(inp)
    sal = sal_instance(args.sal, SaliencyProps())
    bg = get_instance(args.bg)
    smoothner = smooth_instance(feats, args.smoothner)
    start = time.time()
    process(vidreader, sal, bg, smoothner, args.num_prev_frames,
            args.num_blocks, args.write, args.extract, args.write_gray == 1,
            args.write_bgsub == 1, args.window, args.overlap, args.rsz_shape)
    print "Event Tracker ...", inp, "[DONE] in", (time.time() -
                                                  start), "seconds"
Exemplo n.º 6
0
def process(vidreader, vidwriter):
    vidwriter.build()
    bg_es = get_instance(BGMethods.FRAME_DIFFERENCING, vidreader.read_next)
    bg_es.setShape((vidreader.height, vidreader.width))
    sal_rc = sal_instance(SaliencyMethods.REGION_CONTRAST, SaliencyProps())
    zero = np.zeros((vidreader.height, vidreader.width), np.float32)
    zero3 = np.zeros((vidreader.height, 3 * vidreader.width), np.float32)
    frame_idx = 0
    N = vidreader.frames
    prev_saliency = np.zeros((vidreader.height, vidreader.width), np.float32)
    #kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
    prev_rect = np.array([
        vidreader.width / 4, vidreader.height / 4, vidreader.width / 2,
        vidreader.height / 2
    ],
                         dtype=np.float32)
    kernel = np.ones((5, 5), np.uint8)
    bgdModel = np.zeros((1, 65), np.float64)
    fgdModel = np.zeros((1, 65), np.float64)
    while (True):
        frame_idx += 1

        mask_es = bg_es.process()
        mask_es = cv2.medianBlur(mask_es, 5)
        mask_es = cv2.medianBlur(mask_es, 3)
        print 'Proceesing ... {0}%\r'.format((frame_idx * 100 / N)),
        if bg_es.isFinish():
            break
        sal_rc.process(bg_es.cur_frame)

        #mask_lbls = np.unique(mask_es * sal_rc.cut_labels)[1:]
        #if 	len(mask_lbls)>0:
        #	mask = sum([sal_rc.cut_labels==lbl for lbl in mask_lbls])
        #	mask = np.uint8(mask*255)
        #else:
        #	mask = zero
        #out_frame = sal_rc.ncut*mask[:,:,None]
        #frame = np.uint8(sal_rc.ncut * mask[:,:,None]);
        #mask_es = np.uint8(mask_es*255);
        #cv2.accumulateWeighted(sal_rc.saliency,prev_saliency,0.7,None)
        #saliency_prob =  bg_es.variation + prev_saliency;
        #_,mask = cv2.threshold(prev_mask,0.8 * np.max(prev_mask),255,cv2.THRESH_BINARY)

        #mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
        #mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

        #bgdModel = np.zeros((1,65),np.float64); fgdModel = np.zeros((1,65),np.float64)
        saliency_prob = bg_es.variation + sal_rc.saliency
        saliency_prob = normalize(saliency_prob)

        _, mask = cv2.threshold(saliency_prob, 0.6, 1, cv2.THRESH_BINARY)
        #mask = cv2.medianBlur(mask,3)
        pixels = np.where(mask == 1)
        _max = np.max(pixels, 1)
        _min = np.min(pixels, 1)
        rect = np.array(
            [_min[1], _min[0], _max[1] - _min[1], _max[0] - _min[0]],
            dtype=np.float32)
        #out_frame = np.uint8(bg_es.cur_frame.copy());
        #cv2.accumulateWeighted(rect,prev_rect,0.3,None);
        rect = tuple(rect)

        mask_cut = np.zeros(bg_es.cur_frame.shape[:2], np.uint8)
        #mask_cut[_min[1]:_max[1]-_min[1],_min[0]:_max[0]-_min[0]]=3
        mask_cut[saliency_prob >= 0.2] = 2
        mask_cut[saliency_prob >= 0.6] = 3
        mask_cut[saliency_prob >= 0.8] = 1
        #_,mask_cut = cv2.threshold(saliency_prob,0.8,1,cv2.THRESH_BINARY)

        #mask_cut = np.uint8(mask_cut)

        #count = np.array([np.sum((mask_cut%2)==lbl) for lbl in [0,1]]);
        #Laplcian features
        #_frame = np.uint8(cv2.Laplacian(bg_es.cur_frame,3))
        gray = cv2.cvtColor(bg_es.cur_frame, cv2.COLOR_RGB2GRAY)
        #eigen = cv2.cornerEigenValsAndVecs(gray,15,3);
        #eigen = eigen.reshape(gray.shape[0], gray.shape[1], 3, 2)
        #texture_mag = normalize(np.sqrt(eigen[:,:,0,0]**2 +  eigen[:,:,0,1]**2))*255
        #texture_dir1 = normalize(np.arctan2(eigen[:,:,1,1],eigen[:,:,1,0]))*255
        #texture_dir2 = normalize(np.arctan2(eigen[:,:,2,1],eigen[:,:,2,0]))*255

        t_frame = bg_es.cur_frame  #np.uint8(np.dstack((gray,gray,gray)));
        regions = segmentation.slic(t_frame,
                                    50,
                                    20,
                                    convert2lab=True,
                                    multichannel=True)
        _frame = color.label2rgb(regions, bg_es.cur_frame, kind='avg')
        #_frame = np.uint8(np.dstack((gray,gray,texture_mag)));
        #print 'texture flow',texture_flow.shape

        max_iter = 4
        #_frame = np.uint8(np.dstack((luminescence,texture_flow,laplacian)));
        #if np.all(count>4):
        cv2.grabCut(_frame, mask_cut, rect, bgdModel, fgdModel, 1,
                    cv2.GC_INIT_WITH_MASK)
        #else:
        #cv2.grabCut(bg_es.cur_frame,mask_cut,rect,bgdModel,fgdModel,1,cv2.GC_INIT_WITH_RECT)
        for _iter in range(max_iter):
            mask = np.uint8(np.where((mask_cut == 2) | (mask_cut == 0), 0, 1))
            mask_erode = cv2.erode(mask, kernel, 1)
            mask_dilate = cv2.dilate(mask, kernel, 1)
            mask_cut = np.uint8(3 * mask_dilate - 2 * mask_erode)
            if np.unique(mask_cut).__len__() == 1:
                break
            cv2.grabCut(_frame, mask_cut, rect, bgdModel, fgdModel, 1,
                        cv2.GC_INIT_WITH_MASK)
        #out_frame = cv2.cvtColor(stacked*255,cv2.COLOR_GRAY2RGB);
        #_,mask = cv2.threshold(out_frame[:,:,0],0.8*255,255,cv2.THRESH_BINARY)
        mask = np.float32(np.where((mask_cut == 2) | (mask_cut == 0), 0, 1))
        mask[mask_cut == 3] = 0.8
        mask = cv2.medianBlur(np.uint8(mask), 5)
        mask = cv2.medianBlur(mask, 3)

        salProbColor = cv2.cvtColor(saliency_prob * 255, cv2.COLOR_GRAY2RGB)
        _, salMask = cv2.threshold(sal_rc.saliency, 0.8, 1, cv2.THRESH_BINARY)
        mask_frame = np.float32(np.dstack((zero, salMask * 255, zero)))
        salProbColor = cv2.addWeighted(np.float32(salProbColor), 0.6,
                                       mask_frame, 0.4, 0.0)
        pixels = np.where(salMask == 1)
        _max = np.max(pixels, 1)
        _min = np.min(pixels, 1)
        rect = np.array(
            [_min[1], _min[0], _max[1] - _min[1], _max[0] - _min[0]],
            dtype=np.float32)
        cv2.accumulateWeighted(rect, prev_rect, 0.3, None)
        rect = tuple(prev_rect)
        cv2.rectangle(salProbColor, (rect[0], rect[1]),
                      (rect[0] + rect[2], rect[1] + rect[3]), (0, 0, 255))

        mask_frame = np.float32(np.dstack((zero, mask * 255, zero)))
        out_frame = cv2.addWeighted(np.float32(_frame), 0.6, mask_frame, 0.4,
                                    0.0)
        #out_frame = np.uint8( bg_es.cur_frame* mask[:,:,None])
        frame = np.hstack((salProbColor, out_frame))
        frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
        vidwriter.write(np.uint8(frame))
    vidreader.close()
    vidwriter.close()
Exemplo n.º 7
0
def process(vidreader,vidwriter):
	vidwriter.build();
	bg_es = get_instance(BGMethods.FRAME_DIFFERENCING,vidreader.read_next)
	bg_es.setShape((vidreader.height,vidreader.width))
	sal_rc = sal_instance(SaliencyMethods.REGION_CONTRAST,SaliencyProps())
	zero = np.zeros((vidreader.height,vidreader.width),np.float32)
	zero3 = np.zeros((vidreader.height,3*vidreader.width),np.float32)
	frame_idx = 0; N = vidreader.frames;
	prev_saliency = np.zeros((vidreader.height,vidreader.width),np.float32)
	#kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(3,3))
	prev_rect = np.array([vidreader.width/4,vidreader.height/4,vidreader.width/2,vidreader.height/2],dtype=np.float32)
	kernel = np.ones((5,5),np.uint8)
	bgdModel = np.zeros((1,65),np.float64); fgdModel = np.zeros((1,65),np.float64)
	while(True):
		frame_idx += 1
		
		mask_es = bg_es.process();
		mask_es = cv2.medianBlur(mask_es,5)
		mask_es = cv2.medianBlur(mask_es,3)
		print 'Proceesing ... {0}%\r'.format((frame_idx*100/N)),
		if bg_es.isFinish():	
			break;
		sal_rc.process(bg_es.cur_frame);
		
		#mask_lbls = np.unique(mask_es * sal_rc.cut_labels)[1:]
		#if 	len(mask_lbls)>0:
		#	mask = sum([sal_rc.cut_labels==lbl for lbl in mask_lbls])
		#	mask = np.uint8(mask*255)
		#else:
		#	mask = zero
		#out_frame = sal_rc.ncut*mask[:,:,None]
		#frame = np.uint8(sal_rc.ncut * mask[:,:,None]);
		#mask_es = np.uint8(mask_es*255);
		#cv2.accumulateWeighted(sal_rc.saliency,prev_saliency,0.7,None)
		#saliency_prob =  bg_es.variation + prev_saliency;
		#_,mask = cv2.threshold(prev_mask,0.8 * np.max(prev_mask),255,cv2.THRESH_BINARY)
		
		#mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
		#mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
	
		#bgdModel = np.zeros((1,65),np.float64); fgdModel = np.zeros((1,65),np.float64)
		saliency_prob =  bg_es.variation + sal_rc.saliency;
		saliency_prob = normalize(saliency_prob)
		
		_,mask = cv2.threshold(saliency_prob,0.6,1,cv2.THRESH_BINARY)
		#mask = cv2.medianBlur(mask,3)
		pixels = np.where(mask==1); _max = np.max(pixels,1); _min = np.min(pixels,1)
		rect = np.array([_min[1],_min[0],_max[1]-_min[1],_max[0]-_min[0]],dtype=np.float32);
		#out_frame = np.uint8(bg_es.cur_frame.copy());
		#cv2.accumulateWeighted(rect,prev_rect,0.3,None);
		rect = tuple(rect)
		
		mask_cut = np.zeros(bg_es.cur_frame.shape[:2],np.uint8)
		#mask_cut[_min[1]:_max[1]-_min[1],_min[0]:_max[0]-_min[0]]=3
		mask_cut[saliency_prob >= 0.2] = 2
		mask_cut[saliency_prob >= 0.6] = 3
		mask_cut[saliency_prob >= 0.8] = 1
		#_,mask_cut = cv2.threshold(saliency_prob,0.8,1,cv2.THRESH_BINARY)
		
		#mask_cut = np.uint8(mask_cut)
		
		#count = np.array([np.sum((mask_cut%2)==lbl) for lbl in [0,1]]);
		#Laplcian features
		#_frame = np.uint8(cv2.Laplacian(bg_es.cur_frame,3))
		gray = cv2.cvtColor(bg_es.cur_frame,cv2.COLOR_RGB2GRAY)
		#eigen = cv2.cornerEigenValsAndVecs(gray,15,3);
		#eigen = eigen.reshape(gray.shape[0], gray.shape[1], 3, 2)
		#texture_mag = normalize(np.sqrt(eigen[:,:,0,0]**2 +  eigen[:,:,0,1]**2))*255
		#texture_dir1 = normalize(np.arctan2(eigen[:,:,1,1],eigen[:,:,1,0]))*255
		#texture_dir2 = normalize(np.arctan2(eigen[:,:,2,1],eigen[:,:,2,0]))*255
		
		t_frame = bg_es.cur_frame#np.uint8(np.dstack((gray,gray,gray)));
		regions = segmentation.slic(t_frame,50,20,convert2lab=True,multichannel=True)
		_frame = color.label2rgb(regions,bg_es.cur_frame, kind='avg')		
		#_frame = np.uint8(np.dstack((gray,gray,texture_mag)));
		#print 'texture flow',texture_flow.shape
		
		max_iter = 4
		#_frame = np.uint8(np.dstack((luminescence,texture_flow,laplacian)));
		#if np.all(count>4):
		cv2.grabCut(_frame,mask_cut,rect,bgdModel,fgdModel,1,cv2.GC_INIT_WITH_MASK)
		#else:
		#cv2.grabCut(bg_es.cur_frame,mask_cut,rect,bgdModel,fgdModel,1,cv2.GC_INIT_WITH_RECT)
		for _iter  in range(max_iter):	
			mask = np.uint8(np.where((mask_cut==2)|(mask_cut==0),0,1))
			mask_erode = cv2.erode(mask,kernel,1)
			mask_dilate = cv2.dilate(mask,kernel,1)
			mask_cut = np.uint8(3 * mask_dilate - 2 * mask_erode)
			if np.unique(mask_cut).__len__()==1:
				break;
			cv2.grabCut(_frame,mask_cut,rect,bgdModel,fgdModel,1,cv2.GC_INIT_WITH_MASK)
		#out_frame = cv2.cvtColor(stacked*255,cv2.COLOR_GRAY2RGB);	
		#_,mask = cv2.threshold(out_frame[:,:,0],0.8*255,255,cv2.THRESH_BINARY)
		mask = np.float32(np.where((mask_cut==2)|(mask_cut==0),0,1))
		mask[mask_cut==3] = 0.8
		mask = cv2.medianBlur(np.uint8(mask),5)
		mask = cv2.medianBlur(mask,3)
		
		
		salProbColor = cv2.cvtColor(saliency_prob*255,cv2.COLOR_GRAY2RGB);
		_,salMask = cv2.threshold(sal_rc.saliency,0.8,1,cv2.THRESH_BINARY)
		mask_frame = np.float32(np.dstack((zero,salMask*255,zero)))
		salProbColor = cv2.addWeighted(np.float32(salProbColor),0.6,mask_frame,0.4,0.0);
		pixels = np.where(salMask==1); _max = np.max(pixels,1); _min = np.min(pixels,1)
		rect = np.array([_min[1],_min[0],_max[1]-_min[1],_max[0]-_min[0]],dtype=np.float32);
		cv2.accumulateWeighted(rect,prev_rect,0.3,None);
		rect = tuple(prev_rect)
		cv2.rectangle(salProbColor, (rect[0],rect[1]), (rect[0]+rect[2],rect[1]+rect[3]), (0,0,255))
		
		mask_frame = np.float32(np.dstack((zero,mask*255,zero)))
		out_frame = cv2.addWeighted(np.float32(_frame),0.6,mask_frame,0.4,0.0);
		#out_frame = np.uint8( bg_es.cur_frame* mask[:,:,None])
		frame = np.hstack((salProbColor,out_frame))
		frame = cv2.resize(frame,(0,0),fx=0.25, fy=0.25)
		vidwriter.write(np.uint8(frame));
	vidreader.close()
	vidwriter.close()