Lucas and Kanade developed an algorithm which allows tracking of object through a video stream. The algorithm requires less resources and is usually faster in response than many other forms of tracking.
Pros :
-
low resource
-
quick response time
-
can track many points at once
Cons:
-
requires or prefers high contrast corners over plain backgrounds
-
initial tracking points must be set manually, or by some other algorithm
-
will not "re-aquire" a corner if the corner moves out of the field of view
The OpenCV service has this algorithm incorporated into the LKOpticalTrack filter. Start MRL and load an OpenCV service. I usually use PyramidDown too, so the display is more responsive. After PyramidDown, load LKOpticalTrack, name it something creative like lkopticaltrack :)
Highlight the filter, then pick something you want to track in the video. Click on it with the mouse. A red dot should appear and follow whatever you selected until it runs out of the field of view.
This point is published as a message so other Services can consume it, like the Jython service, which in turn could control a pan / tilt kit.

Programmatic Control
# lkOpticalTrack.py
# to experiment with Lucas Kanade optical flow/tracking
# starts opencv and adds the filter and one tracking point
from jarray import zeros, array
import time
opencv = runtime.createAndStart("opencv","OpenCV")
# scale the view down - faster since updating the screen is
# relatively slow
opencv.addFilter("pyramidDown1","PyramidDown")
# add out LKOpticalTrack filter
opencv.addFilter("lkOpticalTrack1","LKOpticalTrack")
# begin capturing
opencv.capture()
# set focus on the lkOpticalTrack filter
opencv.setDisplayFilter("lkOpticalTrack1")
# rest a second or 2 for video to stabalize
time.sleep(2)
# set a point in the middle of a 320 X 240 view screen
opencv.invokeFilterMethod("lkOpticalTrack1","samplePoint", 160, 120)
#opencv.stopCapture()