def roiframes(indices, side, info, leftroi, rightroi, croproi, cropsize=(300, 300), subtractBackground=False): # Tile step frames vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [ video.video(path, timepath) for path, timepath in zip(vidpaths, timepaths) ] frames = [] for frameindex, side in zip(indices, side): leftwards = side == 'leftwards' roiindex = leftroi if leftwards else rightroi frame = videos[0].frame(frameindex) background = None if subtractBackground: timestamp = videos[0].timestamps[frameindex] background = activitymovies.getbackground(backpaths[0], timestamp) frame = croproi(frame, roiindex, cropsize, background, roiindex == rightroi) frames.append(frame) return frames
def figure1k1(info,path): if not os.path.exists(path): os.makedirs(path) sessions = info.groupby(level=['subject','session']) for (subject,session),sinfo in sessions: subjectpath = os.path.join(activitymovies.datafolder,subject) sact = activitytables.read_subjects(subjectpath,days=[session]) scr = activitytables.read_subjects(subjectpath,days=[session], selector = activitytables.crossings) features = activitytables.stepfeature(sact,scr,4,3) leftwards = features.side == 'leftwards' features.xhead[leftwards] = max_width_cm - features.xhead[leftwards] median = np.sort(features.xhead)[len(features)/2+1] median = features[features.xhead == median].iloc[-1,:] vidpaths = activitymovies.getmoviepath(sinfo) timepaths = activitymovies.gettimepath(info) movie = [video.video(mpath,mtimepath) for mpath,mtimepath in zip(vidpaths,timepaths)][0] medianframe = movie.frame(sact.index.get_loc(median.name)) flip = median.side == 'rightwards' stepindex = 3 if flip else 4 medianframe = activitytables.cropstep(medianframe,stepindex,flip=flip) fname = str.format("{0}_session_{1}_median_step_posture.png", subject, session) fpath = os.path.join(path,subject) if not os.path.exists(fpath): os.makedirs(fpath) fpath = os.path.join(fpath,fname) cv2.imwrite(fpath,medianframe)
def slipframes(slipactivity, info, cropsize=(300, 200), subtractBackground=False): vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [ video.video(path, timepath) for path, timepath in zip(vidpaths, timepaths) ] frames = [] for index, trial in slipactivity.iterrows(): rightwards = trial.side == 'rightwards' frame = videos[0].frame(trial.frame) background = None if subtractBackground: timestamp = videos[0].timestamps[trial.frame] background = activitymovies.getbackground(backpaths[0], timestamp) if cropsize is not None: frame = cropslip(frame, trial.gapindex, cropsize, background, rightwards) frames.append(frame) return frames
def __getclips__(act,cr,info,rowidx=slice(None)): features = [] moviepath = activitymovies.getmoviepath(info) for (subject,session),group in cr.groupby(level=['subject','session']): steps = activitytables.stepfeature(act,group,4,3).iloc[rowidx,:] steps['subject'] = subject steps['session'] = session steps.reset_index(inplace=True) steps.set_index(['subject','session'],inplace=True) features.append(steps[['frame','side']].join(moviepath)) return pd.concat(features)
def __getclips__(act, cr, info, rowidx=slice(None)): features = [] moviepath = activitymovies.getmoviepath(info) for (subject, session), group in cr.groupby(level=['subject', 'session']): steps = activitytables.stepfeature(act, group, 4, 3).iloc[rowidx, :] steps['subject'] = subject steps['session'] = session steps.reset_index(inplace=True) steps.set_index(['subject', 'session'], inplace=True) features.append(steps[['frame', 'side']].join(moviepath)) return pd.concat(features)
def clusterstepframes(cr, info, leftstep, rightstep): # Compute step times stepactivity = cr.iloc[:, 16:24] stepdiff = stepactivity.diff() steppeaks = siphon.findpeaksMax(stepdiff, 1500) pksloc = [[stepdiff.index.get_loc(peak) for peak in step] for step in steppeaks] # Tile step frames vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [ video.video(path, timepath) for path, timepath in zip(vidpaths, timepaths) ] def getstepframes(stepindex, flip=False): stepcenterxcm = stepcenters[stepindex][1] * preprocess.width_pixel_to_cm framehead = [ p for p in pksloc[stepindex] if (cr.xhead[p] < stepcenterxcm if not flip else cr.xhead[p] > stepcenterxcm) ] frames = [ imgproc.croprect(stepcenters[stepindex], (200, 200), videos[0].frame(p)) for p in framehead ] backgrounds = [ imgproc.croprect( stepcenters[stepindex], (200, 200), activitymovies.getbackground(backpaths[0], videos[0].timestamps[p])) for p in framehead ] frames = [cv2.subtract(f, b) for f, b in zip(frames, backgrounds)] if flip: frames = [cv2.flip(f, 1) for f in frames] return frames, framehead leftframes, leftindices = getstepframes(leftstep, False) rightframes, rightindices = getstepframes(rightstep, True) frames = np.array(leftframes + rightframes) frameindices = np.array(leftindices + rightindices) sortindices = np.argsort(frameindices) frames = frames[sortindices] frameindices = frameindices[sortindices] R, labels, h = imgproc.cluster(frames, videos[0], frameindices) return frames, stepdiff, steppeaks, pksloc, R, labels
def clusterroiframes(act, roiactivity, info, leftroi, rightroi, roicenter_cm, cropframes): # Compute step times roidiff = roiactivity.diff() roipeaks = activitytables.findpeaks(roidiff, 1500) pksloc = [[roidiff.index.get_loc(peak) for peak in roi] for roi in roipeaks] # Tile step frames vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [ video.video(path, timepath) for path, timepath in zip(vidpaths, timepaths) ] def getroiframes(roiindex, flip=False): roicenterxcm = roicenter_cm[roiindex][1] headdistance = [act.xhead[p] - roicenterxcm for p in pksloc[roiindex]] print headdistance framehead = [ p for i, p in enumerate(pksloc[roiindex]) if (-25 < headdistance[i] < -5 if not flip else 5 < headdistance[i] < 25) ] frames = [cropframes(videos[0].frame(p), roiindex) for p in framehead] backgrounds = [ cropframes( activitymovies.getbackground(backpaths[0], videos[0].timestamps[p]), roiindex) for p in framehead ] frames = [cv2.subtract(f, b) for f, b in zip(frames, backgrounds)] if flip: frames = [cv2.flip(f, 1) for f in frames] return frames, framehead leftframes, leftindices = getroiframes(leftroi, False) rightframes, rightindices = getroiframes(rightroi, True) print "===========================" frames = np.array(leftframes + rightframes) frameindices = np.array(leftindices + rightindices) sortindices = np.argsort(frameindices) frames = frames[sortindices] frameindices = frameindices[sortindices] Z, R, labels, h = imgproc.cluster(frames, videos[0], frameindices) return frames, roidiff, roipeaks, pksloc, Z, R, labels
def __saveselectedtiledclips__(clips,info,path,suffix='.avi'): if not os.path.exists(path): os.makedirs(path) moviepath = activitymovies.getmoviepath(info) for ((subject,session),group),indices in it.izip(info.groupby(level=['subject', 'session']), clips): crossings = pd.DataFrame(indices) crossings['path'] = moviepath.loc[(subject,session)] vidclips = __processclips__(crossings.iterrows(),ycrop=slice(320,-1)) frames = __tileclips__(it.izip(*vidclips),1,len(crossings)) fname = str.format("{0}"+suffix,subject) vidpath = os.path.join(path,fname) activitymovies.savemovie(frames,vidpath,frames_per_second)
def __saveselectedtiledclips__(clips, info, path, suffix='.avi'): if not os.path.exists(path): os.makedirs(path) moviepath = activitymovies.getmoviepath(info) for ((subject, session), group), indices in it.izip(info.groupby(level=['subject', 'session']), clips): crossings = pd.DataFrame(indices) crossings['path'] = moviepath.loc[(subject, session)] vidclips = __processclips__(crossings.iterrows(), ycrop=slice(320, -1)) frames = __tileclips__(it.izip(*vidclips), 1, len(crossings)) fname = str.format("{0}" + suffix, subject) vidpath = os.path.join(path, fname) activitymovies.savemovie(frames, vidpath, frames_per_second)
def clusterroiframes(act, roiactivity, info, leftroi, rightroi, roicenter_cm, cropframes): # Compute step times roidiff = roiactivity.diff() roipeaks = activitytables.findpeaks(roidiff, 1500) pksloc = [[roidiff.index.get_loc(peak) for peak in roi] for roi in roipeaks] # Tile step frames vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [video.video(path, timepath) for path, timepath in zip(vidpaths, timepaths)] def getroiframes(roiindex, flip=False): roicenterxcm = roicenter_cm[roiindex][1] headdistance = [act.xhead[p] - roicenterxcm for p in pksloc[roiindex]] print headdistance framehead = [ p for i, p in enumerate(pksloc[roiindex]) if (-25 < headdistance[i] < -5 if not flip else 5 < headdistance[i] < 25) ] frames = [cropframes(videos[0].frame(p), roiindex) for p in framehead] backgrounds = [ cropframes(activitymovies.getbackground(backpaths[0], videos[0].timestamps[p]), roiindex) for p in framehead ] frames = [cv2.subtract(f, b) for f, b in zip(frames, backgrounds)] if flip: frames = [cv2.flip(f, 1) for f in frames] return frames, framehead leftframes, leftindices = getroiframes(leftroi, False) rightframes, rightindices = getroiframes(rightroi, True) print "===========================" frames = np.array(leftframes + rightframes) frameindices = np.array(leftindices + rightindices) sortindices = np.argsort(frameindices) frames = frames[sortindices] frameindices = frameindices[sortindices] Z, R, labels, h = imgproc.cluster(frames, videos[0], frameindices) return frames, roidiff, roipeaks, pksloc, Z, R, labels
def figure2a3(act,info,path): if not os.path.exists(path): os.makedirs(path) mframes = __getmanipulationframes__(act,info) mframes = mframes.join(info) mframes = mframes[mframes.frame != 0] mframes = mframes.query('subject not in ["JPAK_26","JPAK_27","JPAK_28","JPAK_29"]') mframes = mframes.join(activitymovies.getmoviepath(mframes)) mframes = activitytables.groupbylesionvolumes(mframes[['path','frame','side']],mframes) mframes.reset_index() vidclips = __processclips__(mframes.iterrows(),ycrop=slice(320,-1)) vidclips = [__transposeclips__(clip) for clip in vidclips] frames = __tileclips__(it.izip(*vidclips),len(mframes)/2,2) frames = __transposeclips__(frames) frames = __resizeclips__(frames,dsize=(1280,896)) fname = str.format("manipulations_big_lesion.avi") vidpath = os.path.join(path,fname) activitymovies.savemovie(frames,vidpath,frames_per_second)
def figure2a3(act, info, path): if not os.path.exists(path): os.makedirs(path) mframes = __getmanipulationframes__(act, info) mframes = mframes.join(info) mframes = mframes[mframes.frame != 0] mframes = mframes.query( 'subject not in ["JPAK_26","JPAK_27","JPAK_28","JPAK_29"]') mframes = mframes.join(activitymovies.getmoviepath(mframes)) mframes = activitytables.groupbylesionvolumes( mframes[['path', 'frame', 'side']], mframes) mframes.reset_index() vidclips = __processclips__(mframes.iterrows(), ycrop=slice(320, -1)) vidclips = [__transposeclips__(clip) for clip in vidclips] frames = __tileclips__(it.izip(*vidclips), len(mframes) / 2, 2) frames = __transposeclips__(frames) frames = __resizeclips__(frames, dsize=(1280, 896)) fname = str.format("manipulations_big_lesion.avi") vidpath = os.path.join(path, fname) activitymovies.savemovie(frames, vidpath, frames_per_second)
def roiframes(activity,crossings,info,leftroi,rightroi,roiframeindices,croproi, cropsize=(300,300),subtractBackground=False): # Tile step frames vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [video.video(path,timepath) for path,timepath in zip(vidpaths,timepaths)] frames = [] indices,side = roiframeindices(activity,crossings,leftroi,rightroi) for frameindex,side in zip(indices,side): leftwards = side == 'leftwards' roiindex = leftroi if leftwards else rightroi frame = videos[0].frame(frameindex) background = None if subtractBackground: timestamp = videos[0].timestamps[frameindex] background = activitymovies.getbackground(backpaths[0],timestamp) frame = croproi(frame,roiindex,cropsize,background,roiindex == rightroi) frames.append(frame) return frames
def clusterstepframes(cr,info,leftstep,rightstep): # Compute step times stepactivity = cr.iloc[:,16:24] stepdiff = stepactivity.diff() steppeaks = siphon.findpeaksMax(stepdiff,1500) pksloc = [[stepdiff.index.get_loc(peak) for peak in step] for step in steppeaks] # Tile step frames vidpaths = activitymovies.getmoviepath(info) timepaths = activitymovies.gettimepath(info) backpaths = activitymovies.getbackgroundpath(info) videos = [video.video(path,timepath) for path,timepath in zip(vidpaths,timepaths)] def getstepframes(stepindex,flip=False): stepcenterxcm = stepcenters[stepindex][1] * preprocess.width_pixel_to_cm framehead = [p for p in pksloc[stepindex] if (cr.xhead[p] < stepcenterxcm if not flip else cr.xhead[p] > stepcenterxcm)] frames = [imgproc.croprect(stepcenters[stepindex],(200,200),videos[0].frame(p)) for p in framehead] backgrounds = [imgproc.croprect(stepcenters[stepindex],(200,200),activitymovies.getbackground(backpaths[0],videos[0].timestamps[p])) for p in framehead] frames = [cv2.subtract(f,b) for f,b in zip(frames,backgrounds)] if flip: frames = [cv2.flip(f,1) for f in frames] return frames,framehead leftframes,leftindices = getstepframes(leftstep,False) rightframes,rightindices = getstepframes(rightstep,True) frames = np.array(leftframes + rightframes) frameindices = np.array(leftindices + rightindices) sortindices = np.argsort(frameindices) frames = frames[sortindices] frameindices = frameindices[sortindices] R,labels,h = imgproc.cluster(frames,videos[0],frameindices) return frames,stepdiff,steppeaks,pksloc,R,labels
def figure1k1(info, path): if not os.path.exists(path): os.makedirs(path) sessions = info.groupby(level=['subject', 'session']) for (subject, session), sinfo in sessions: subjectpath = os.path.join(activitymovies.datafolder, subject) sact = activitytables.read_subjects(subjectpath, days=[session]) scr = activitytables.read_subjects(subjectpath, days=[session], selector=activitytables.crossings) features = activitytables.stepfeature(sact, scr, 4, 3) leftwards = features.side == 'leftwards' features.xhead[leftwards] = max_width_cm - features.xhead[leftwards] median = np.sort(features.xhead)[len(features) / 2 + 1] median = features[features.xhead == median].iloc[-1, :] vidpaths = activitymovies.getmoviepath(sinfo) timepaths = activitymovies.gettimepath(info) movie = [ video.video(mpath, mtimepath) for mpath, mtimepath in zip(vidpaths, timepaths) ][0] medianframe = movie.frame(sact.index.get_loc(median.name)) flip = median.side == 'rightwards' stepindex = 3 if flip else 4 medianframe = activitytables.cropstep(medianframe, stepindex, flip=flip) fname = str.format("{0}_session_{1}_median_step_posture.png", subject, session) fpath = os.path.join(path, subject) if not os.path.exists(fpath): os.makedirs(fpath) fpath = os.path.join(fpath, fname) cv2.imwrite(fpath, medianframe)