On Wisconsin! ⚽️
- 4-year Varsity Womans Soccer at University of Wisconsin – Madison
- NCAA Sweet 16 (2018, 2019, 2020)
- Elected for Big Ten Conference's 'Return to Play' Taskforce after COVID-19
go go garmin
I'm most comfortable moving. A Garmin Forerunner 245 logs the daily damage — heart rate, stress, sleep, steps — and a scheduled job pulls it into this page every morning, so the numbers below are however I actually did this week rather than a screenshot from a good one.
Loading…
Six ferrets, one camera 🦦
I work with the Lakdawala Lab at Emory University School of Medicine on something a long way from traffic: tracking ferrets in influenza-transmission studies. Ferrets are the standard model for how flu moves between hosts, and the question is who contacted whom, for how long — which means you have to keep five or six of them straight on video, continuously, while they pile on top of each other in a corner and sleep.
Pose estimation handles the bodies. Identity is the hard part: every existing approach ties who-you-are to where-your-joints-are, so the moment two animals overlap, the labels swap and stay swapped for the rest of the video. Working with SLEAP's creator Dr. Talmo Pereira, we pulled identity apart from pose — a Random Forest classifier reads the dye markings straight off the coat in HSV, and Hungarian matching assigns animals frame to frame.
The part I like most is that it's allowed to give up. Assignment is gated on both confidence and margin, so when the model isn't sure it abstains instead of guessing — because one confident wrong guess under occlusion poisons every frame after it. The whole thing runs on an AWS GPU pipeline that streams a 2-hour video in about 1.5 hours at flat memory.
Protocol paper in preparation for PLOS Biology.
BrewVision: teaching a computer to watch skee-ball 🎳
I roll in the BrEWSKEE-BALL® league at Full Circle Bar in Williamsburg. I got to know the owner, one thing led to another, and now I am helping build the computer vision system that scores the lanes.
Two cameras watch each lane — one overhead, one angled — and a YOLO detector picks the ball out of every frame. A Kalman filter carries it up the ramp, the two views agree on which ball is which, and the score comes from wherever the ball was last seen before it vanished into a cup. No sensors in the lane, no beam breaks. Just watching, the way a person would.
The delightful failure mode is the hundo. Sinking the 100 means throwing hard, and throwing hard is exactly when the overhead camera loses the ball at the frame edge and the angled camera decides this must be some other ball — two cameras, two IDs, one very annoyed player. Also unsolved: the system has no concept of a gutter ball, and no idea that a 10th ball doesn't count. Though honestly, tracking who racks up the most meaningless 10th balls might be the best stat in the league.