diff --git a/flandmark/ext/ext.cpp b/flandmark/ext/ext.cpp index a768e26a236f9542e2e4431aea99abe4d8a71d7f..8845409ea7a3cea731c591f8264c164678b14667 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/flandmark/script/annotate.py b/flandmark/script/annotate.py new file mode 100644 index 0000000000000000000000000000000000000000..c1bfd4e0e723ae338aa9227a3cb83a794de29369 --- /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