Overseer - a take on surveillance
Overseer is a robotic art piece inspired by George Orwell’s novel 1984. The idea was to make surveillance physical: a camera on a motorized arm that finds the closest face and follows it.


The face tracking runs in real time, in a simple control loop that keeps the arm pointed at the closest face.
software driver
The control loop:
- Capture a frame from the camera.
- Detect all faces in the frame.
- Select the closest face.
- Compute the required rotation and update the arm position.
setbacks
The main difficulty was converting a target’s position in the frame into servo angles. The image gives the angle the camera has to turn, but that is not enough to compute the motor rotation directly.

The problem is geometric. The triangle formed by the camera, the target, and the joint has only one known angle and one known side, so it is underdetermined.
We solved it mechanically by aligning the motor axis with the camera’s rotation axis so that they intersect at the lens. The camera then rotates in place, and the angle measured in the image is the angle the servo has to turn. This made the calculations simple but the mechanical design considerably more complex.

Later we added an adjustable target tolerance, bounding boxes around detected faces, and an auto-centering routine that runs after the arm has been idle for a while.

CPU compatibility
The original plan was a Raspberry Pi Zero W, small enough to fit inside the main enclosure. Face detection used OpenCV 4 (v4.3.0), which requires an ARMv7 or newer CPU, and the Zero W has an ARMv6 core. We switched to the Raspberry Pi 3B+ with an ARMv8 CPU.
The larger board needed a second enclosure, so the design was no longer a single self-contained wall-mounted unit.
assembly

The frame is made of lightweight particleboard to keep the arm’s inertia low, so the servos can move it quickly. The board turned out weaker than expected and needed reinforcement in a few places.
The electronics housings are cardboard, and the main enclosures are thin laminated board. The colors are deliberately muted.

Loose cables kept catching in the arms and joints, so we zip-tied them along the frame.

testing and refinement
In the last phase we tuned parameters, reduced the frame rate and image quality to keep processing smooth, and added a fan to prevent the CPU from overheating during long runs.

The final version detects the closest face, follows it with the arm, and re-centers when nobody is in view.
components used
2x servo motor Waveshare MG996R
- Torque: 9 kg/cm (4.8V), 11 kg/cm (6V)
- Speed: 0.19s/60° (4.8V), 0.18s/60° (6V)
- Rotation: 180°
- Voltage: 4.8V ~ 6V
- Weight: 55g
- Dimensions: 40.7 × 19.7 × 42.9mm
Raspberry Pi 3 Model B+
- CPU: 1.4GHz 64-bit quad-core ARM Cortex-A53
- CPU Architecture: ARMv8-A (64/32-bit)
- GPU: Broadcom VideoCore IV @ 250MHz
- SDRAM: 1GB
- Weight: 45g
- Dimensions: 85.60 × 56.5 × 17mm
Raspberry Pi Camera V2
- Video FPS: 1080p30, 720p60
- Sensor: 8MP Sony IMX219 CMOS
- Connector: CSI
- Field of View: 62.2° x 48.8°
- Weight: 3g
- Dimensions: 25 × 20 × 9mm
Raspberry Pi fan with 30cm cable
- Consumption: 0.35W
- Power: 5V (reduced to 3.3V)
- Noise: 22dBA (5V)
- Dimensions: 35 x 35 x 10mm
power supply 5.1V⎓3A
- Power: 15.3W
- Voltage: 5.1V
- Current: 3A