Projects

Now

Hot-air balloon race replay & wind simulator

Final-year project · 2026–27 · in progress

Balloon Track Viewer: one competitor's flight as a 3D path coloured by height, next to a chart of ground speed over time.

A hot-air balloon can't steer sideways. It can only climb or descend, so pilots read the wind at different heights and pick the layer that carries them toward the target.

Replay

Imports a race's GPS logs and rebuilds every competitor's flight as a replay, possibly in 3D, so a whole race can be watched again from any angle.

The first small version works: it loads one GPS track and plays it back in 3D, alongside height, ground speed and direction over time.

Wind simulator and navigation

Simulates a realistic wind field and runs a navigation layer on top of it. During a replay you can see each real flight next to a better route the winds would have allowed.

Python · PySide6 · pyqtgraph

Solo to tab

Side project · just starting

A tool that listens to a guitar solo and writes it out as tab a guitarist could actually play.

Plan

  • Detect the notes from audio, starting with single-note solos.
  • Choose a fret for every note so the hand moves as little as possible, with no jumps from the 1st fret to the 12th.

Before

Crop residue coverage estimation ↗

Completed · Summer 2026

Field photo, ground-truth mask, U-Net prediction and error map for crop residue segmentation.

An end-to-end computer vision project that segments crop residue in field photos and estimates how much of the ground it covers, with a focus on working at field sites the model has never seen.

Approach

Started from a Random Forest baseline, built a Mini U-Net from scratch, then trained a U-Net with an ImageNet-pretrained ResNet34 encoder. Data was split by location, and models were evaluated with IoU, Dice, precision, recall and coverage error, with SRPNet as an external reference.

Results

Test IoU
0.826
Test Dice
0.905
Coverage MAE
7.71 pp

Compared with the Mini U-Net, IoU went from 0.778 to 0.826 and coverage error fell from 11.73 to 7.71 percentage points.

What I did

  • Built the image and mask pairing, preprocessing, augmentation and PyTorch data pipeline.
  • Implemented the Random Forest baseline and the Mini U-Net.
  • Trained the final ResNet34 U-Net with BCE and Dice loss, early stopping and reproducible evaluation.
  • Studied how accuracy dropped across locations, visualised failure cases, and flagged label quality as a limit on evaluation.

Python · PyTorch · segmentation_models_pytorch · scikit-learn