2015-05-20 19:25:28 +08:00
|
|
|
#!/usr/bin/python
|
|
|
|
# The contents of this file are in the public domain. See LICENSE_FOR_EXAMPLE_PROGRAMS.txt
|
|
|
|
#
|
|
|
|
# This example shows how to use the correlation_tracker from the dlib Python
|
|
|
|
# library. This object lets you track the position of an object as it moves
|
|
|
|
# from frame to frame in a video sequence. To use it, you give the
|
|
|
|
# correlation_tracker the bounding box of the object you want to track in the
|
|
|
|
# current video frame. Then it will identify the location of the object in
|
|
|
|
# subsequent frames.
|
|
|
|
#
|
|
|
|
# In this particular example, we are going to run on the
|
|
|
|
# video sequence that comes with dlib, which can be found in the
|
|
|
|
# examples/video_frames folder. This video shows a juice box sitting on a table
|
|
|
|
# and someone is waving the camera around. The task is to track the position of
|
|
|
|
# the juice box as the camera moves around.
|
|
|
|
#
|
2015-10-27 20:25:43 +08:00
|
|
|
#
|
|
|
|
# COMPILING/INSTALLING THE DLIB PYTHON INTERFACE
|
|
|
|
# You can install dlib using the command:
|
|
|
|
# pip install dlib
|
|
|
|
#
|
|
|
|
# Alternatively, if you want to compile dlib yourself then go into the dlib
|
|
|
|
# root folder and run:
|
|
|
|
# python setup.py install
|
|
|
|
# or
|
|
|
|
# python setup.py install --yes USE_AVX_INSTRUCTIONS
|
|
|
|
# if you have a CPU that supports AVX instructions, since this makes some
|
|
|
|
# things run faster.
|
|
|
|
#
|
|
|
|
# Compiling dlib should work on any operating system so long as you have
|
|
|
|
# CMake and boost-python installed. On Ubuntu, this can be done easily by
|
|
|
|
# running the command:
|
2015-05-20 19:25:28 +08:00
|
|
|
# sudo apt-get install libboost-python-dev cmake
|
|
|
|
#
|
|
|
|
# Also note that this example requires scikit-image which can be installed
|
|
|
|
# via the command:
|
2015-10-27 20:50:44 +08:00
|
|
|
# pip install scikit-image
|
2015-05-20 19:25:28 +08:00
|
|
|
# Or downloaded from http://scikit-image.org/download.html.
|
|
|
|
|
|
|
|
import os
|
|
|
|
import glob
|
|
|
|
|
|
|
|
import dlib
|
|
|
|
from skimage import io
|
|
|
|
|
|
|
|
# Path to the video frames
|
|
|
|
video_folder = os.path.join("..", "examples", "video_frames")
|
|
|
|
|
|
|
|
# Create the correlation tracker - the object needs to be initialized
|
|
|
|
# before it can be used
|
|
|
|
tracker = dlib.correlation_tracker()
|
|
|
|
|
|
|
|
win = dlib.image_window()
|
|
|
|
# We will track the frames as we load them off of disk
|
|
|
|
for k, f in enumerate(sorted(glob.glob(os.path.join(video_folder, "*.jpg")))):
|
|
|
|
print("Processing Frame {}".format(k))
|
|
|
|
img = io.imread(f)
|
|
|
|
|
|
|
|
# We need to initialize the tracker on the first frame
|
|
|
|
if k == 0:
|
|
|
|
# Start a track on the juice box. If you look at the first frame you
|
|
|
|
# will see that the juice box is contained within the bounding
|
|
|
|
# box (74, 67, 112, 153).
|
|
|
|
tracker.start_track(img, dlib.rectangle(74, 67, 112, 153))
|
|
|
|
else:
|
|
|
|
# Else we just attempt to track from the previous frame
|
|
|
|
tracker.update(img)
|
|
|
|
|
|
|
|
win.clear_overlay()
|
|
|
|
win.set_image(img)
|
|
|
|
win.add_overlay(tracker.get_position())
|
|
|
|
dlib.hit_enter_to_continue()
|