Commit e3c3d39a authored by Patrick Snape's avatar Patrick Snape

Add an API for the correlation tracker

This aids an API for the correlation based tracker that Davis
recently added to Dlib. I've made sure to allow overrides for
passing normal rectangles rather than drectangles (which isn't
currently supported in the Dlib C++ API). This is mostly
because I imagine people might initialize the tracking using
something like a bounding box from a detector (e.g.
load_frontal_face_detector).
parent c4cf31a7
......@@ -21,6 +21,7 @@ set(python_srcs
src/rectangles.cpp
src/object_detection.cpp
src/shape_predictor.cpp
src/correlation_tracker.cpp
)
# Only add the GUI module if requested
......
// Copyright (C) 2014 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#include <dlib/python.h>
#include <dlib/geometry.h>
#include <boost/python/args.hpp>
#include <dlib/image_processing.h>
using namespace dlib;
using namespace std;
using namespace boost::python;
// ----------------------------------------------------------------------------------------
void start_track (
correlation_tracker& tracker,
object img,
const drectangle& bounding_box
)
{
if (is_gray_python_image(img))
{
tracker.start_track(numpy_gray_image(img), bounding_box);
}
else if (is_rgb_python_image(img))
{
tracker.start_track(numpy_rgb_image(img), bounding_box);
}
else
{
throw dlib::error("Unsupported image type, must be 8bit gray or RGB image.");
}
}
void start_track_rec (
correlation_tracker& tracker,
object img,
const rectangle& bounding_box
)
{
drectangle dbounding_box(bounding_box);
start_track(tracker, img, dbounding_box);
}
void update (
correlation_tracker& tracker,
object img
)
{
if (is_gray_python_image(img))
{
tracker.update(numpy_gray_image(img));
}
else if (is_rgb_python_image(img))
{
tracker.update(numpy_rgb_image(img));
}
else
{
throw dlib::error("Unsupported image type, must be 8bit gray or RGB image.");
}
}
void update_guess (
correlation_tracker& tracker,
object img,
const drectangle& bounding_box
)
{
if (is_gray_python_image(img))
{
tracker.update(numpy_gray_image(img), bounding_box);
}
else if (is_rgb_python_image(img))
{
tracker.update(numpy_rgb_image(img), bounding_box);
}
else
{
throw dlib::error("Unsupported image type, must be 8bit gray or RGB image.");
}
}
void update_guess_rec (
correlation_tracker& tracker,
object img,
const rectangle& bounding_box
)
{
drectangle dbounding_box(bounding_box);
update_guess(tracker, img, dbounding_box);
}
drectangle get_position (const correlation_tracker& tracker) { return tracker.get_position(); }
// ----------------------------------------------------------------------------------------
void bind_correlation_tracker()
{
using boost::python::arg;
{
typedef correlation_tracker type;
class_<type>("correlation_tracker", "")
.def("start_track", &::start_track, (arg("image"), arg("bounding_box")))
.def("start_track", &::start_track_rec, (arg("image"), arg("bounding_box")))
.def("update", &::update, arg("image"))
.def("update", &::update_guess, (arg("image"), arg("guess")))
.def("update", &::update_guess_rec, (arg("image"), arg("guess")))
.def("get_position", &::get_position);
}
}
......@@ -17,6 +17,7 @@ void bind_image_classes();
void bind_rectangles();
void bind_object_detection();
void bind_shape_predictors();
void bind_correlation_tracker();
#ifndef DLIB_NO_GUI_SUPPORT
void bind_gui();
......@@ -42,6 +43,7 @@ BOOST_PYTHON_MODULE(dlib)
bind_rectangles();
bind_object_detection();
bind_shape_predictors();
bind_correlation_tracker();
#ifndef DLIB_NO_GUI_SUPPORT
bind_gui();
#endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment