def __call__(self, args): video = session.query(Video).filter(Video.slug == args.slug) if video.count() == 0: print "Video {0} does not exist!".format(args.slug) raise SystemExit() video = video.one() print "Parsing text data" data = {} if args.json: data = self.getdatajson(args.labelfile) else: data = self.getdatatext(args.labelfile, video.totalframes) scale = args.scale if args.dimensions or args.original_video or args.original_frame: print "Computing scale" if args.original_video: w, h = ffmpeg.extract(args.original_video).next().size elif args.original_frame: w, h = Image.open(args.original_frame).size else: w, h = args.dimensions.split("x") w = float(w) h = float(h) s = float(video.width) / w if s * h > video.height: s = float(video.height) / h scale = s print "Scale = {0}".format(scale) segmentcount = 1 for segment in video.segments: print "Segment {0} of {1}".format(segmentcount, len(video.segments)) segmentcount += 1 for job in segment.jobs: for boxid in data: label = data[boxid]['label'] boxes = data[boxid]['boxes'] query = session.query(Label).filter( Label.videoid == video.id).filter(Label.text == label) if query.count() == 0: continue label = query.one() newpath = Path(label=label) visible = False for frame, boxdata in boxes.iteritems(): frame = int(frame) if frame < segment.start or segment.stop <= frame or ( frame % video.blowradius != 0): continue newbox = Box(path=newpath) #newbox.xtl = max(boxdata['xtl'], 0) #newbox.ytl = max(boxdata['ytl'], 0) #newbox.xbr = max(boxdata['xbr'], 0) #newbox.ybr = max(boxdata['ybr'], 0) newbox.xtl = boxdata['xtl'] newbox.ytl = boxdata['ytl'] newbox.xbr = boxdata['xbr'] newbox.ybr = boxdata['ybr'] newbox.occluded = boxdata['occluded'] newbox.outside = boxdata['outside'] newbox.generated = boxdata['generated'] newbox.frame = frame scalebox = newbox.getbox() scalebox = scalebox.transform(scale) newbox.xtl = scalebox.xtl newbox.ytl = scalebox.ytl newbox.xbr = scalebox.xbr newbox.ybr = scalebox.ybr if not newbox.outside: visible = True if visible: job.paths.append(newpath) session.add(job) session.commit()
def __call__(self, args): video = session.query(Video).filter(Video.slug == args.slug) if video.count() == 0: print "Video {0} does not exist!".format(args.slug) raise SystemExit() video = video.one() print "Parsing text data" data = {} if args.json: data = self.getdatajson(args.labelfile) else: data = self.getdatatext(args.labelfile, video.totalframes) scale = args.scale if args.dimensions or args.original_video or args.original_frame: print "Computing scale" if args.original_video: w, h = ffmpeg.extract(args.original_video).next().size elif args.original_frame: w, h = Image.open(args.original_frame).size else: w, h = args.dimensions.split("x") w = float(w) h = float(h) s = float(video.width) / w if s * h > video.height: s = float(video.height) / h scale = s print "Scale = {0}".format(scale) segmentcount = 1 for segment in video.segments: print "Segment {0} of {1}".format(segmentcount, len(video.segments)) segmentcount += 1 for job in segment.jobs: for boxid in data: label = data[boxid]['label'] boxes = data[boxid]['boxes'] query = session.query(Label).filter(Label.videoid == video.id).filter(Label.text == label) if query.count() == 0: continue label = query.one() newpath = Path(label=label) visible = False for frame, boxdata in boxes.iteritems(): frame = int(frame) if frame < segment.start or segment.stop <= frame or (frame % video.blowradius != 0): continue newbox = Box(path=newpath) #newbox.xtl = max(boxdata['xtl'], 0) #newbox.ytl = max(boxdata['ytl'], 0) #newbox.xbr = max(boxdata['xbr'], 0) #newbox.ybr = max(boxdata['ybr'], 0) newbox.xtl = boxdata['xtl'] newbox.ytl = boxdata['ytl'] newbox.xbr = boxdata['xbr'] newbox.ybr = boxdata['ybr'] newbox.occluded = boxdata['occluded'] newbox.outside = boxdata['outside'] newbox.generated = boxdata['generated'] newbox.frame = frame scalebox = newbox.getbox() scalebox = scalebox.transform(scale) newbox.xtl = scalebox.xtl newbox.ytl = scalebox.ytl newbox.xbr = scalebox.xbr newbox.ybr = scalebox.ybr if not newbox.outside: visible = True if visible: job.paths.append(newpath) session.add(job) session.commit()