MEng Biomedical Engineering at UCL (2025 to 2029). I work on machine learning for clinical data, and on the embedded hardware and firmware that collect it.
Preprint. Duplicate leakage in a public conjunctival pallor benchmark, and an honest baseline for image-based anaemia screening. Zenodo, 2026. doi.org/10.5281/zenodo.22782147. Code: pallor-hb.
- pursuit-drone: PURSUIT-1, a 92 mm quadcopter whose 4-layer PCB is its own airframe, built to follow one enrolled person. Board generated from a Python netlist, ESP32-S3 flight firmware, off-board face and body re-identification. Built and bench-tested; not yet flown.
- pallor-hb: anaemia screening from conjunctiva photographs. Found that the 710 records in a public benchmark are 383 distinct photographs, and measured how much that inflates reported AUROC (+0.176).
- tt-scout: table tennis match analysis from one phone video. Points, winners, and 3D shot speeds with error bars, calibrated from the table itself.
- watch-sentinel: illness early-warning from Apple Watch data against a personal robust baseline, with a SwiftUI HealthKit exporter. Validated on synthetic data so far.
- emg-robotic-hand: surface-EMG analogue front end (own PCB) and RP2040 firmware for proportional grip control. Board built and telemetry verified; on-body EMG not yet recorded.
- gripper: Raspberry Pi 5 and ESP32 control software for a 4-DOF arm, with hand-tracking teleoperation and visual-servoing grasp. Not yet run on the arm.
- wave-lab-analyzer: real-time harmonic analyser in the browser (live).
Python, C and C++, PyTorch, scikit-learn, OpenCV, KiCad, ESP32-S3, RP2040.