Skip to content

JJFrisch/face-tracking-space-invaders

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 

Repository files navigation

Face Tracking Space Invaders

1st Place at Hackstoga 2023 | Computer Vision, Python, OpenCV, dlib

A dodge game controlled entirely by your body. No keyboard. No mouse. Your face is the spaceship.

Background subtraction turns your silhouette into a live collision boundary. Asteroids and skateboards fall from the top of the screen. You dodge them by physically moving. If you're smiling when an asteroid hits you, there's a 50% chance it doesn't count.

gameplay screenshot placeholder


How It Works

The game runs in three phases:

Background capture. Before you step in front of the camera, the game captures a clean frame of the empty background. This becomes the baseline.

Motion detection. Each frame, your current image is subtracted from the background. The difference (your silhouette, your body) becomes a real-time collision mask. The asteroids check whether they overlap with anything in that mask.

Face tracking. A Haar cascade detects your face on the first frame. After that, a dlib correlation tracker maintains the lock frame-by-frame. A spaceship image is overlaid on top of your face. If tracking quality drops, detection restarts automatically.

Smile detection. When a collision occurs, if the smile Haar cascade fires, you get a 50/50 chance to ignore the life loss. The mechanic is visible: the game draws a rectangle around detected smiles in real time.


Controls

Key Action
P Start / enter next level (face must be detected first)
R Retry after death
Q Quit

Obstacles

Asteroid (Ball): falls straight down at increasing speed per level.

Skateboard (CurveBall): falls diagonally, drifting left or right each frame. Harder to predict.


Level System

Levels are divided into stages. Every 5 seconds, the stage advances and new obstacles are added. After enough stages, the level increments and the game resets with harder speeds.

Level 1
  Stage 2: +1 Asteroid
  Stage 3: +1 Skateboard
  Stage 5: +2 fast Skateboards
  Stage 6: advance to Level 2

Setup

Prerequisites

  • Python 3.8+
  • A webcam
  • The image assets in Images/ (see below)

Install dependencies

pip install -r requirements.txt

Note on dlib: dlib requires CMake and a C++ compiler. On macOS, run brew install cmake. On Windows, install Visual Studio Build Tools. On Linux, sudo apt install cmake build-essential.

Required image assets

Place the following in the Images/ folder:

File Source
asteroid.png Any asteroid PNG with transparent or black background
skate_board.jfif Any skateboard image
ss.png Spaceship PNG (overlaid on your face)
space.jfif Background image shown on the death/game-over screen

Run

python game.py

Step away from the camera when prompted, let it capture the background, then press Q and step back in.


Built With

  • OpenCV - camera capture, image processing, Haar cascades
  • dlib - correlation tracker for face lock
  • cvzone - FPS reader, selfie segmentation
  • NumPy - frame arithmetic and collision masking

What I Learned

Background subtraction for real-time collision detection is deceptively effective. The naive approach works well when the background is stable. The dlib correlation tracker is substantially more robust than running the Haar cascade every frame, and its quality score makes it easy to detect and recover from tracking loss. Smile detection with Haar cascades is noisy enough to be fun without being reliable enough to feel cheap.


What's Next

  • Level 2 fully implemented with new obstacle types
  • Configurable background sensitivity
  • High score persistence
  • Multiplayer: two cameras, two players

Built by Jake Frischmann

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages