← Projects
2022

Obscura

Computer Vision · Wearables · Hardware

A collaboration with Eden Harrison for the Gizmo course, Imperial College & Royal College of Art.

Obscura explores the awkwardness produced by direct eye contact in public transport. We built glasses that detect the surrounding gaze direction and help the wearer avoid unwanted eye contact. A short clip is here ↗.

Obscura glasses Obscura in use

Parts

ASwitch: when on, the wings (C) activate alongside the vibration motors (B) when a gaze is directed at the camera (E). When off, only the motors run.
BVibration motors and clip: the clip holds the motors in place.
CWings: descend to prevent eye contact, driven by the servo (D).
ECamera: sends a visual feed to the Raspberry Pi for gaze detection.
FPhotoresistor: feeds light level to the Arduino and Pi to set the iris-detection threshold.
GPCB: routes voltage, ground and signal to the Arduino for cleaner connections.
HArduino: drives the shades and motors in response to commands from the Pi.
Obscura blueprint

Function A: Alert

When the perpetrator is on the left or right of the frame, the corresponding vibration motor buzzes, alerting the wearer to the attempt at eye contact. They can then decide to avoid or engage as they wish.

Function A
Function A

Function B: Hide

When the perpetrator is centered in the frame and the 'hide' function is engaged, the wings descend to obscure direct eye contact, lifting again after four seconds. With 'hide' disengaged, nothing happens.

Function B
Function B

Computer Vision Pipeline

Face detection

A pre-trained face detector locates each face in the frame, mapping 68 landmarks to describe it.

Face detection
Iris detection

For each face, the eyes are extracted from the landmarks. Contour detection on the thresholded eye image finds the iris; an ellipse is fitted to locate its center. The midpoint between irises is referenced from the nose tip.

Iris detection
Head pose estimation

The 68 landmarks are mapped to 3D coordinates from an average head model. Perspective-n-point then yields the rotation and translation vectors using the camera's intrinsics.

Head pose estimation

Classification & Architecture

The iris-midpoint, head-rotation and head-translation vectors are combined and classified as 'directed toward camera' or 'not' via an SVM, trained on a labelled set of captured images and exported as a pickled model that runs live on the Pi.

Output travels from the Raspberry Pi to the Arduino over serial; the Arduino executes the corresponding action on the shades and motors.

System architecture Build
← CADmanship Marionettist →