Motion Detection
by Corvus V Corax
I Description A short descripion of motiontrack
II License A refer to GPL v2
III Executables A listing of all programs that make motiontrack
IV Install Some installation instructions
V Parameters A description of program commandline parameters
VI Usage How you could use the motiontrack programs
VII Development, If anyone is interested in the code
Forks and Todos
-I Description:
Motiontrack is a set of backend tools that can be used for motion detection
! Please don't use this software to help monitor places !
! where it impairs the privacy of other people, like !
! monitoring public places and streets, CCTV, voyeurism...!
! http://www.stop1984.org -- against total surveillance! !
Right now it is able to detect changes between 2 images that resulted
to motion (in opposition to changes doe to random clutter)
and tell the areas (i called them sectors) where this motion did happen.
(This process is very configurable to fit your local needs, like
optimizing your images in several ways, ignoring colors and areas )
Motiontrack is also able to compare two images and check them for
differences, even if the images are poorly aligned.
(for example 2 scanned copies with both angle and shift derivation,
as well as moderate brightness difference)
It could even auto-align slightly polygonal distorted images,
for example taken with a webcam at not exactly the same angle
however this is currently beta code.
Path for the future is to make motiontrack able to recognize the objects
which are actually moving. First thing realized now is simple pattern
detection. The software should later be able to recognize for example
ball = object cosisting of several arc segments around nothing
(in edge enhance view)
face = object with arcs around. horizontal lines in the lower half,
upside down 'V' above, topped by 2 circles, ...
...
where those simple geometric structures are the patterns to detect by
patern matching then, and the object recognizing above being done by
simple neuralnet AI ;) or some really cool hack, dunno, notthing done yet.
The pattern detection is thus far able to turn line art into ASCII art,
and search for distinctive features for auto-alignment :-)
-II License:
Gnu Public License (GLP) 2 (or above)
(see COPYING)
-III Executables:
mdiffer [ --color-exclude [<red>,<green>,<blue>:<width>] ... \
... [<red>,<green>,<blue>:<width>] --color-end ] \
<source1> <source2> [<destination>] [--help] [-h]
mnormlz [ -v <value> | --value=<value> ] <source> [<destination>] \
[--help] [-h]
menlight < -v <value> | --value=<value> > <source> [<destination>] \
[--help] [-h]
mblur [ -v <value> | --value=<value> ] \
<source> [<destination>] [--help] [-h]
mresize < -v <value> | --value=<value> > <source> [<destination>] \
[--help] [-h]
menhance [ -s <value> | --size=<value> ] \
[ -a <value> | --amount=<value> ] \
[ -q <value> | --quality=<value> ] \
<source> [<destination>] [--help] [-h]
msectors [ -s <value> | --sensitivity=<value> ] \
[ --absolute ] \
[ --exclude [<x>,<y>] [<x>,<y>] ... [<x>,<y>] --end ] \
[ --sectorsize=<value>] <source> [<destination>] [--help] [-h]
motiontrack [ -s <value> | --sensitivity=<value> ] \
[ --absolute ] \
[ -e <value> | --enlight=<value> ] \
[ --blursize=<value> ] \
[ --resize=<value> ] \
[ --enhsize=<value> ] \
[ --enhmul=<value> ] \
[ --enhqual=<value> ] \
[ --blur ] [ --no-enhance ] \
[ --norm ] [ --normsize=<value> ] \
[ --magnify ] [ --shrink ] \
[ --color-exclude [<red>,<green>,<blue>:<width>] ... \
... [<red>,<green>,<blue>:<width>] --color-end ] \
[ --exclude [<x>,<y>] [<x>,<y>] ... [<x>,<y>] --end ] \
[ --sectorsize=<value> ] \
<source1> <source2> [<destination>] [--help] [-h]
masciiart <source> [<destination>] [--help] [-h]
mscale [ -x <value> | --width=<value> ]
[-y <value> | --height=<value> ]
[ --sourcecoords <x1 y1 x2 y2 x3 y3 x4 y4> ]
[ --destcoords <x1 y1 x2 y2 x3 y3 x4 y4> ]
<source1> [<destination>] [--help] [-h]
malign <reference> <test> [<destination>]
[--help] [-h]
-IV Install:
Motiontrack needs an installed image manipulation library to compile.
This can be either libgd or ImageMagick, with support for your favorite
image formats, installed on your system.
Note that the GD library is currently the default, since it has been used
longer and the code is more speed optimized.
This may change in the future.
If you got the motiontrack sources from CVS, you first have to create
the configure scripts by running
./autogen.sh <configure options>
(which will automatically run ./configure with these options afterwards)
If you are installing from an tarball, you can also run
./configure --prefix=<path to install>
where <path to install> is for example /usr if you want your executables
in /usr/bin, or /usr/local if you want them in /usr/local/bin.
standard is /usr/local.
Note that the pre-created configure script has created invalid makefiles
on a bsd system i tried it on, if configure misbehaves, regenerate a local
version via autogen.sh and your autoconf/autoheader/automake installation.
configure searches for all programs and libraries needed by motiontrack to
compile in your system standard library and include paths.
You can give hints where to search additionally, by specifying
./configure --with-searchdirs=<prefix1>:...:<prefixN>
or setting some environment variables accordingly, like LIBRARY_PATH and
C_INCLUDE_PATH, or the -L<dir> and -I<dir> options in CFLAGS, CPPFLAGS
or LDFLAGS.
./configure --help
lists all possible configure options, like library preferences,
GD versus ImageMagick, debug options, ...
Note that you can compile in multi-processing support when specifying
--enable-cluster to configure, since motiontrack 0.1.3.
This adds the optional flag [ -j <pnum> ] to all cluster enabled
executables, where you can tell motiontrack how many processes to spawn
for image processing.
run
make
make install
to create and install the whole package.
(all executables, sorry, no manpage yet)
-V Parameters:
To see a short usage description run each file without parameters.
mdiffer [ --color-exclude [<red>,<green>,<blue>:<width>] ... \
... [<red>,<green>,<blue>:<width>] --color-end ] \
<sourcefile1> <sourcefile2> [<destinationfile>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ --color-exclude [<red>,<green>,<blue>:<width>] \
... [<red>,<green>,<blue>:<width>] --color-end ]
is an optional set of parameters to specify colors to ignore, when
checking for image differences.
A color consists of 3 RGB values, which have to be in range 0..255,
( black: 0,0,0 -- red: 255,0,0 -- green: 0,255,0 -- blue: 0,0,255 -- ... )
and a width value for exclusion accuracy.
Any positive integer is accepted for width.
DONT forget the --color-end tag to close the list, or motiontrack wont run
<sourcefile1> and <sourcefile2>
are to be images. If their sizes differ, only the overlapping regions
will be used
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the overall pixel brightness of the resulting image
mnormlz [ -v <value> | --value=<value> ] <source> [<destination>] \
[--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ -v <value> || --value=<value> >
when checking for minima and maxima, average over <value> pixels
to discard extremas
<sourcefile>
is to be a valid image file to enlight
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the overall pixel brightness of the resulting image
menlight < -v <value> | --value=<value> > <sourcefile> [<destinationfile>] \
[--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
< -v <value> || --value=<value> >
the resulting image will have <value>% of the source brightness
specifying 100 makes a 1 on 1 greyscale copy
<sourcefile>
is to be a valid image file to enlight
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the overall pixel brightness of the resulting image
mblur [ -v <value> | --value=<value> ] \
<sourcefile> [<destinationfile>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ -v <value> | --value=<value> ]
the brush size for blur calculation in 1/100 pixels
default is 300
<sourcefile>
is to be a valid image file to blur
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the overall pixel brightness of the resulting image
mresize < -v <value> | --value=<value> > <sourcefile> [<destinationfile>] \
[--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
< -v <value> | --value=<value> >
percentage of the original size, 100 would make a greyscale
1 to 1 copy.
<sourcefile>
is to be a valid image file to enhance
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the overall pixel brightness of the resulting image
menhance [ -s <value> | --size=<value> ] \
[ -a <value> | --amount=<value> ] \
[ -q <value> | --quality=<value> ] \
<sourcefile> [<destinationfile>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ -s <value> | --size=<value> ]
the brush size for enhance calculation in 1/100 pixels
default is 400
[ -a <value> | --amount=<value> ]
multiplicator for the resulting edges found, in %
default is 2000
[ -q <value> | --quality=<value> ]
the resolution of the edge search result,
affects the destination image size and the calculation speed
with factor 4!
default is 50, values above 100 are useless
<sourcefile>
is to be a valid image file to enhance
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the overall pixel brightness of the resulting image
msectors [ -s <value> | --sensitivity=<value> ] \
[ --absolute ] \
[ --exclude [<x1>,<y1>] [<x2>,<y2>] ... [<xn>,<yn>] --end ] \
[ --sectorsize=<value> ] <sourcefile> [<destinationfile>] \
[--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ --absolute ]
use an absolute brightness threshold for sector-check instead of one
relative to the average difference. This might be usefull,
when auto-comparing several images where some show completely
different stuff, what could produce false negatives doe to a very high
"difference average"
[ -s <value> | --sensitivity=<value> ]
is an optional parameter to specify the motion detection sensitivity
value reaches from
0 greatest sensitivity. motiontrack might detect any slightest
... motion, but the risc of false alarm is high.
...
5 the standard value, accurate motiondetection with low
... false alarm risk.
...
9 lowest risk of false alarms doe to flicker. but is unlikely
to detect small motions.
use when you want to detect intruding elephants
[ --exclude [<x1>,<y1>] [<x2>,<y2>] ... [<xn>,<yn>] --end ]
is an optional set of parameters to specify sectors to ignore, when
checking for motion. sectors can be of type <x>,<y>
for the plain coordinates or <x>,<y>:<z> where z is ignored.
this way one can use the format of the output as input without
change
DONT forget the --end tag to close the list, or motiontrack wont run
[ --sectorsize=<value> ]
specifys the size of a sector in pixels. For example 20 will
cause sectors to be 20x20 pixels in size.
default value is 5.
<sourcefile>
is to be a valid image file to analyze
[<destinationfile>]
is the filename of an optional resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the amount of sectors with motion in it,
followed by an ordered list of this sectors (if any) and their
brightness value in the form:
x1,y1:brightnes1 x2,y2:brightnes2 ... xn,yn:brightnesn
this format can be used, too if one wants to specify an exclude list.
motiontrack [ -s <value> | --sensitivity=<value> ] \
[ --absolute ] \
[ -e <value> | --enlight=<value> ] \
[ --blursize=<value> ] \
[ --resize=<value> ] \
[ --enhsize=<value> ] \
[ --enhmul=<value> ] \
[ --enhqual=<value> ] \
[ --blur] [ --no-enhance ] \
[ --norm ] [ --normsize=<value> ] \
[ --magnify] [ --shrink ] \
[ --color-exclude [<red>,<green>,<blue>:<width>] ... \
... [<red>,<green>,<blue>:<width>] --color-end ] \
[ --exclude [<x>,<y>] [<x>,<y>] ... [<x>,<y>] --end ] \
[ --sectorsize=<value> ] \
<sourcefile1> <sourcefile2> [<destinationfile>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ --absolute ]
use an absolute brightness threshold for sector-check instead of one
relative to the average difference. This might be usefull,
when auto-comparing several images where some show completely
different stuff, what could produce false negatives doe to a very high
"difference average"
[ -s <value> || --sensitivity=<value> ]
is an optional parameter to specify the motion detection sensitivity
value reaches from
0 greatest sensitivity. motiontrack might detect any slightest
... motion, but the risc of false alarm is high.
...
5 the standard value, accurate motiondetection with low
... false alarm risk.
...
9 lowest risk of false alarms doe to flicker. but is unlikely
to detect small motions.
use when you want to detect intruding elephants
< -e <value> || --enlight=<value> >
if given, menlight will be run internally after the mdiffer step
specify <value> as % of the source brightness, 100 does nothing
[ --normsize=<value> ]
when checking for minima and maxima, average over <value> pixels
to discard extremas, when given motiontrack will normalize source images
before calculationg difference. Note that will render color-exclusion
useless, since this step greyscales and changes colors beforehand.
[ --blursize=<value> ]
the brush size for blur calculation in 1/100 pixels
if given, mblur will be run internally after the mdiffer (or menlight) step
[ --resize=<value> ]
percentage of the original size for mresize.
if given, mresize will be run internally before the menhance step
[ --enhsize=<value> ]
the brush size for enhance calculation in 1/100 pixels
default is 400
[ --enhmul=<value> ]
enhance calculation multiplicator for the resulting edges found, in %
default is 2000
[ --enhqual=<value> ]
the resolution of the edge search result,
affects the destination image size and the calculation speed
with factor 4!
default is 50, values above 100 are useless
[--norm]
same as "--normsize=5"
[--blur]
same as "--blursize=300"
[--no-enhance]
if given no enhancing takes place before sectors is being runned internally.
[--magnify]
same as "--resize=200"
[--shrink]
same as "--resize=50"
[--color-exclude [<red>,<green>,<blue>:<width>] \
... [<red>,<green>,<blue>:<width>] --color-end ]
is an optional set of parameters to specify colors to ignore, when
checking for image differences.
A color consists of 3 RGB values, which have to be in range 0..255,
( black: 0,0,0 -- red: 255,0,0 -- green: 0,255,0 -- blue: 0,0,255 -- ... )
and a width value for exclusion accuracy.
Any positive integer is accepted for width.
DONT forget the --color-end tag to close the list, or motiontrack wont run.
[--exclude [<x1>,<y1>] [<x2>,<y2>] ... [<xn>,<yn>] --end ]
is an optional set of parameters to specify sectors to ignore, when
checking for motion. sectors can be of type <x>,<y>
for the plain coordinates or <x>,<y>:<z> where z is ignored.
this way one can use the format of the output as input without
change
DONT forget the --end tag to close the list, or motiontrack wont run.
[--sectorsize=<value>]
specifys the size of a sector in pixels. For example 20 will
cause sectors to be 20x20 pixels in size.
default value is 5
<sourcefile1> and <sourcefile2>
are to be images. If their sizes differ, only the overlapping regions
will be used
[<destinationfile>]
is the filename of an optional resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the amount of sectors with motion in it,
followed by an ordered list of this sectors (if any) and their
brightness value in the form:
x1,y1:brightnes1 x2,y2:brightnes2 ... xn,yn:brightnesn
this format can be used, too if one wants to specify an exclude list
masciiart <source> [<destination>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
<sourcefile>
is to be a valid image file to ascii-paint
[<destinationfile>]
is the (optional) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the ASCII version of the ASCII art (while the output
image is a bitmap version of this, showing the internal patterns for debug)
mscale [ -x <value> | --width=<value> ]
[ -y <value> | --height=<value> ]
[ --sourcecoords <x1 y1 x2 y2 x3 y3 x4 y4> ]
[ --destcoords <x1 y1 x2 y2 x3 y3 x4 y4> ]
<source1> [<destination>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
[ -x <value> | --width=<value> ]
is to be the width of the destination image in pixels, default is
the same as the source
[ -y <value> | --height=<value> ]
is to be the height of the destination image in pixels, default is
the same as the source
[ -- sourcecoords <x1 y1 x2 y2 x3 y3 x4 y4> ]
these coordinates mark 4 points in the source image, which should be
near the edges in the order
<top-left> <top-right> <bottom-left> <bottom-right>
if not given they default to the edges itself
[ --destcoords <x1 y1 x2 y2 x3 y3 x4 y4> ]
these coordinates mark the destination where you want those reference
points to end at. As long as you dont try rotations of more than 20°
in any direction this way, this should be quite accurate, however its still
a simple apreviation algorithm in beta stage.
So you will create distortions if your specify them too extremely misplaced.
Default are the coords as the edges of the destination image
You can speficy coords outside the image bounds for both coordinate sets.
<sourcefile>
is to be a valid image file to ascii-paint
[<destinationfile>]
is the (optional) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the ASCII version of the ASCII art (while the output
image is a bitmap version of this, showing the internal patterns for debug)
malign <reference> <test> [<destination>] [--help] [-h]
[--help] and [-h]
specify on of these to get a short help. specifiying nothing does same
<reference>
is to be a valid image file to use as a reference to align the
test image to
<test>
is to be a valid image file to rescale to be then compared
to the reference image
[<destinationfile>]
is the (optional but recommended) filename of the resulting image to create
image filetypes are determined by filename extensions
output to <stdout> is the ASCII version of the ASCII art (while the output
image is a bitmap version of this, showing the internal patterns for debug)
-VI Usage:
Using Multi Processing (clustering):
When compiled with "--enable-cluster" you can tell each motiontrack
executable how many processes to spawn, default is 4 when compiled with
multi processing support (and of course 1 when compiled without).
Do this with
m<name> ...<options>... [ -j <number of processes> ]
When motiontrack is compiled without cluster support, this option is valid
but has no effect.
Motion Detection:
You need 2 images (from a webcam or video stream),
with aprox. 1 second time difference.
You can check for differences in pixel brightness between this images
with:
mdiffer <source1> <source2> <destination> \
[--color-exclude <list> --color-end ]
These brightness differences indicate possible object motion between
the image, as well as random flicker and smoke produced by your camera
and the light sources.
If you are not interested in motion or changes that happen to be in
specific colors (for example because sometimes you have random black lines,
or red dots in your images you are not interested in)
you can exclude everything which is in this colors in either one of the
source images from the whole check.
The width parameter of colors sets the detection accuracy.
a width of 2 or 3 will exclude only the specified color, while one above
100 will exclude much that does look somehow alike this color.
Feel free to experiment around, while running mdiffer between any image and
a black reference image, to test this values for your case.
If you get better results, you can change the brightness of these
differences with
menlight -e <value> <source> <destination>
If your input images are very dark, value should be up to 400 to get
optimal results, if it is too bright, specify 25 to get brightness to
a quarter.
If your images are too big so they take too long to process,
you can use motiontracks
mresize -v <value> <source> <destination>
tool, to get into a better magnitude of size.
try 50 for value to make an image half the resoulution
Now check for possible objects in the output of mdiffer with the
edge enhancer:
menhance -s <size> -q <quality> -a <mult> <source> <destination>
This edge enhancement brightly amplifies any sharp borders in the
given image, which are the moved objects.
But it unfortunately does light up pixel sized inconsitencies, too.
Increasing the brush size makes it much slower, but enables better
distinguish between real edges and random inconsistencies or
compression artefacts.
If you increase size, you should decrease quality to make less
checks in the same area, producing a smaller result image,
otherwise it could get way too slow.
Also you can change the result multiplicator from the default *20
(2000%) to different values, which should have a similar effect
as changing the sensitivity of the sector check.
Now while the random pixel changes are now represented by evenly spread spots
over the image, the real movements, or moving objects are outlined in
their old and new position, and their contures can be easily spotted
as contiguous bright areas.
By dividing thise image in sectors of equal (default 5x5) pixel size
msectors [-s <value>] <source> [destination] [-s <value>]\
[--sectorsize=<value>] [--exclude <list> --end]
all sectors are at somehow the same average brightness
doe to the equaly spread random inconsistencies,
except the sectors which include real object movement
which tend to be much brighter.
If you want the sectors to be 50x50 pixel, since you check in really
large images, specify "--sectorsize 50" for example.
Remeber to increase or decrese sectorsize when you fiddle with the enhance
quality.
For example since enhance does use quality 50% for default now
i decreased the original 10x10 default sector size to 5x5 to get
the same overall behaviour back.
msectors gives back an optional image with all sectors shown
depending on the given sensitivity ( -s 0 till -s 9 ) the overbright sectors
are detected as motion and given back.
If you are not interested in motion in specific sectors, for example
cause there is a clock in your picture at sectors 2,2 2,3 3,2 and 3,3
you can exclude them via "--exclude 2,2 2,3 3,2 3,3 --end"
If you are not interested in the technical details and dont need the images
of the steps in between, you can just check for motion between 2 images with
motiontrack [ -s <value> | --sensitivity=<value> ] \
[ --absolute ] \
[ -e <value> | --enlight=<value> ] \
[ --blursize=<value> ] \
[ --resize=<value> ] \
[ --enhsize=<value> ] \
[ --enhmul=<value> ] \
[ --enhqual=<value> ] \
[ --blur] [ --no-enhance ] \
[ --norm ] [ --normsize=<value> ] \
[ --magnify] [ --shrink ] \
[ --color-exclude [<red>,<green>,<blue>:<width>] ... \
... [<red>,<green>,<blue>:<width>] --color-end ] \
[ --exclude [<x>,<y>] [<x>,<y>] ... [<x>,<y>] --end ] \
[ --sectorsize=<value> ] \
<sourcefile1> <sourcefile2> [<destinationfile>] [--help] [-h]
All text output of every executable goes to
<stderr>
except for a single number representing the amont of pixel brightness
or the amount of sectors with motion in it in sectors and motiontrack,
which goes to
<stdout>
Also does the ascii art of "masciiart".
In addition to that, sectors and motiontrack give out an ordered sectorlist
of the sectors with motion detected in it to <stdout> in the form
x1,y1:brightnes1 x2,y2:brightnes2 x3,y3:brightnes3 ... xn,yn:brightnesn
where the brightness represents the motion detected there.
You can grep this output and process in your own scripts easily :-)
Also you can specify a list of this format as an exclude list, this way
saving the work of removing the useless brightness values :-))
Comparing generic images:
Generic image comparison, it much related to motiontracks approach of
motion detection. However for motion detection the movement-search
algorithm assumes that most parts of the images are actually the same,
while in some area, movement happens.
When comparing generic images, especially images that show completely
different stuff, this could lead to false negatives, so an absolute
algorithm might have to be used instead. You can do that by adding the
[ --absolute ] flag to "motiontrack" or "msectors".
If you do so, you might also want to disable enhancement and enable blur
instead, depending on your image source. Especially when using the
auto-align functions, small remeaning disalignments could result into
big detected differences when being edge-enhanced.
Auto alignment:
The "mscale" program can morph around images in an interesting way
while being created to fit the needs of the "malign" program,
it fails badly at greater rotation angles (>45°), however you can
still use it for basic re-scaling and changing the image width to height
ratio.
The "malign" program assumes that while two images show the same, they
are disaligned, so it searches for some unique features near the edges
in one image, and then tries to find the same features
in the reference image.
While this only works with derivation of some douzend pixel of shift
or rotation of less than 10° like they happen if you scan an image two
times without accurately aligning it on your flatbed scanner, its still
might be a feature to prove itself worthy for several applications.
You could for example try to compare two webcam taken images of the same
motive at slightly different angles this way.
Feel free to contact the developer (me) with feedback and suggestions.
Pattern Detecton:
Usage of
masciiart <source> [<destination>] [--help] [-h]
Your source image should be white on black line art (for optimal results).
You can test it with the output of "menhance" used on your webcam images
maybe you get something useful. mine produces too much 'clutter'.
Hint: higher resolution images result into better ascii art
when processing after the enhance step,
but they might not fit in 80x25 anymore then.
-VII Development, Forks and Todos:
Actual version is 0.1.3
The stuff is getting more complex from now on,
so if anyone would like to contribute now would be a good time to start,
since the code is still simple enough to get throgh.
Read src/TheCode.txt for a file and class overview, and the headers for
function descriptions.
TODO is everything that brings motiontrack forward, optimizing code,
documentation, hacking an AI, whatevery a coder can imagine ;)
Have fun
Corvus V Corax
corvuscorax@cybertrench.com