From 49e01904c9bc8bebac24b3f2a2d6b964b7c1c56d Mon Sep 17 00:00:00 2001 From: Andre Anjos <andre.anjos@idiap.ch> Date: Fri, 21 Sep 2012 11:21:08 +0200 Subject: [PATCH] Adds script to annotate videos --- flandmark/ext/ext.cpp | 2 +- flandmark/script/__init__.py | 0 flandmark/script/annotate.py | 55 ++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 flandmark/script/__init__.py create mode 100644 flandmark/script/annotate.py diff --git a/flandmark/ext/ext.cpp b/flandmark/ext/ext.cpp index a768e26..8845409 100644 --- a/flandmark/ext/ext.cpp +++ b/flandmark/ext/ext.cpp @@ -109,7 +109,7 @@ class Localizer { for (int i = 0; i < (2*m_flandmark->data.options.M); i += 2) { lmlist.append(make_tuple(m_landmarks[i], m_landmarks[i+1])); } - det["landmark"] = lmlist; + det["landmark"] = tuple(lmlist); retval.append(det); } diff --git a/flandmark/script/__init__.py b/flandmark/script/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/flandmark/script/annotate.py b/flandmark/script/annotate.py new file mode 100644 index 0000000..c1bfd4e --- /dev/null +++ b/flandmark/script/annotate.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python +# vim: set fileencoding=utf-8 : +# Andre Anjos <andre.anjos@idiap.ch> +# Fri 21 Sep 2012 10:43:12 CEST + +"""Annotates videos, dumps annotations as text files. +""" + +import os +import sys +import bob +from .. import Localizer +import pkg_resources + +def get_biggest(dets): + """Returns the biggest detection found""" + retval = dets[0] + for d in dets[1:]: + if retval['bbox'][2] < d['bbox'][2]: retval = d + return retval + +def main(): + + import argparse + + parser = argparse.ArgumentParser(description=__doc__, + formatter_class=argparse.RawDescriptionHelpFormatter) + + parser.add_argument('video', metavar='VIDEO', type=str, + help="Video file to load") + + from ..version import __version__ + name = os.path.basename(os.path.splitext(sys.argv[0])[0]) + parser.add_argument('-V', '--version', action='version', + version='Automatic Video Keypoint Annotation Tool v%s (%s)' % (__version__, name)) + + args = parser.parse_args() + + if not os.path.exists(args.video): + parser.error("Input video file '%s' cannot be read" % args.video) + + op = Localizer() + v = bob.io.VideoReader(args.video) + for k, frame in enumerate(v): + dets = op(frame) + if dets: + biggest = get_biggest(dets) + bbox = biggest['bbox'] + landmarks = biggest['landmark'] + print "%d %d %d %d %d" % ((k,) + bbox), + for pair in landmarks: + print "%d %d" % (round(pair[0]), round(pair[1])), + print "" + else: + print "%d 0 0 0 0" % k -- GitLab