BigEye

Released in 1995, and written by Tom DeMeyer (with Ray Edgar), BigEye is a sophisticated realtime video analysis tool for Power Macintosh. BigEye represents a significant evolution from the early video analysis tools like Mandala. Its essential strength lies in its ability simultaneously to examine an incoming video signal on a number of different levels using a number of different methods. Those levels include:

 

1. Color Table

The color table function of BigEye causes the active channel to follow a specified colour or colours in the incoming signal. For demonstration purposes, Tom included a simple animation of coloured circles, and that animation is used throughout this paper. Here the red circle was chosen as a colour to follow.

Fig. 3 BigEye's color table editing window, specifying red as the colour to be followed.

The color table is sensitive to as many colors as the CPU currently supports, up to 24-bit (millions) of colours. So here, the "red" circle, means a very specific colour value that represents the "red" coloured circle in the animation. BigEye's colour table will look for this colour in incoming data, designate it an object, and follow the object as it moves around the screen, generating appropriate values relative to its position, and other scriptable parameters.

Fig. 4 The color table in action.

Fig. 4 shows our designated "red" generating data. Each designated object is given a consecutive number, so that here our red circle is numbered zero. If there were other red objects within the video field, they would be designated objects, assigned consecutive numbers, and tracked. In real life situations, of course, the very specific value assigned to a colour in the color table is problematic: there is almost never a situation with live video where the colour of a particular object remains constant. For example, if you are tracking a blue head band that one dancer on the stage is wearing, the colour value of the head band will change significantly as the dancer moves from light to shadow, between hot spots, even on a flooded stage. The workaround for this is to designate a wider band of colour in the color table that is likely to represent the range of colours an object will go through as it moves around within the unevenly lighted stage. Even then, real life colours are difficult to track, unless they are severely differentiated from everything else on the stage ­­ unlikely to be aesthetically pleasing from a design perspective. Also note in Fig. 4 the slider named "minimum object size" (partially obscured by the slider control). This slider allows the user to nominate a minimum size for a particular object, which helps BigEye "see" the object(s) of choice as discrete objects. If this slider is set too low, BigEye will see many objects where the human eye sees one.


Fig. 5 Multiple colours

Fig. 5 shows a color table with multiple colours. The number in the bottom left of the screen ("4") shows the number of currently active objects. The maximum number of active objects can be set, up to a maximum of 16. Processor speed and RAM affect how many active objects can be used without slowing down the video framerate to an unacceptable level.

 

2. The Difference Engine

Colour can be a difficult parameter to track in real life situations. Much easier to track, although considerably less definitive, is the amount of motion on the stage. In this example, difficult to read here, each of the four coloured objects is moving at a different speed, or rate of acceleration. The large circle on the lower left is moving very little, and therefore appears as a thin line ­­ and will subsequently generate a small value. The other circles are moving faster, and show their corresponding value through the thickness and "direction" of their lines.

Fig. 6 Difference

While not an accurate measure of speed, the difference mode generates data that is an extraordinarily effective representation of the kind of activity taking place on the stage ­­ the amount of motion is very accurately represented here, and that is often a remarkably clear indicator of the type of motion taking place. Perhaps a good analogy is MIDI's use of velocity to represent volume, on the assumption that is it very difficult to play a loud note slowly (try it some time!). Similarly, it is difficult to make a big gesture slowly ­­ which makes difference an excellent measure of activity.

 

3. Regions and Masks

Fig. 7 Masking part of the stage
Fig. 8 Defining Regions

To add to the overall levels of control, it is possible to divide the virtual stage into a number of completely independent regions, and to mask parts of those regions.

 

Each of the regions shown in Fig. 8 has its own levels of control and is one of the most powerful features of BigEye. While the tables we have looked at so far (colour, difference) are global, each defined region can carry its own set of actions (see the action button in Fig. 8), and there can be multiple "screens", each with its own set of regions and masks. Regions need not be square, but can also be drawn freehand with the pencil tool. Scripted actions can be programmed not just within, and peculiar to, each region, but upon entering an leaving each region. The scripting language built into BigEye is what sets this program apart as a serious tool rather than a mere curiosity.

 

 

4 Scripting

 

BigEye's scripting language, a high level, C-like language, is not difficult to learn, particularly to anyone who has worked in C or with any kind of scripting language. It allows the user to specify a wide variety of actions, predicated on a wide variety of types of behaviour, and to perform numerous arithmetical and algorithmic processes. This is not an appropriate forum to provide a detailed listing of the objects available in BigEye's scripting language, but I will at least attempt to provide an overview here.

 

4.1 Scripts and Variables

Various levels of scripting and variables are available: scripts can be at the screen level where they apply to the entire stage, or at the region level, where they apply only within a particular region of the stage. Variables declared within a screen script are automatically global and are known to all other scripts; variables declared in any region script (whether it is a "enter", "exit", or "within" the region) are known only within that region. Variables declared in "start" and "stop" scripts, special placeholders that execute when a screen is opened or closed, are known only to those individual scripts. There a number of predefined variables within BigEye, for example:

 

 x_position  y_position  object_size
 object_speed  object_direction  x_speed
 y_speed  x_acceleration

 y_acceleration

 current_tick  object_count  object_number, etc., etc.

 

4.2 Expressions, Processes, and the Scheduler

BigEye supports the usual kinds of expressions, including decimal numbers, hexadecimal numbers, variables, and functions. It supports processes, and has a scheduler.

 

 

4.3 Keywords

The scripting keywords provide access to most layers of the program, and support a wide range of MIDI and other output, for example:

 colortab "table name"  display("string")  mfstart [midi file start]
 mftempo [midi file tempo]  pbd [pitch bend]  non and nof [note on/off]
 random (expr)  smooth

 table etc., etc.

The extraordinary depth of this program makes it a powerful artists tool, well equipped for most situations. I have been able to use BigEye in transportable projects ­­ pieces that continue to work even under significantly different environmental conditions. BigEye is, however, still a video-based tool, and will always be subject to environmental pressures and changes. It is necessary to allow time for setup when moving to a new venue that allows some fairly significant re-programming to ensure that colours still read accurately, that overall light levels, and light contrasts still work. Even though in a relatively early release (1.11), the program is stable and works well. It is happier on a fast, powerful machine, although it will run at a reasonable framerate on a PowerMac 7100, where it typically seems to perform at around 12fps or so, a reasonably acceptable framerate. On faster CPUs it comes closer to a realtime rate of (25 or) 30fps. With the flexible and fast scripting language, it is easy to get away from the obvious correspondences that so typically arise when people work with these kinds of interactive systems for the first time. The temptation to map motion to pitch in any strict sense quickly goes away, to be replaced by any of the exotic and rich possibilities the program suggests.

 

BigEye is able to capture a genuine sense of motion on a stage, enough to provide a genuine sense of interaction between performer and system. Linked with other programs, such as Director or LiSa, BigEye shines and shines and shines.