Ghost Fighting, Imposter Syndrome, and Cuddly Nephews: My Weekend at HackMIT
This past weekend, I flew on to Boston for HackMIT, competing against 215 other totally cracked teams in a 24-hour caffeine-fueled showdown to turn our wildest ideas into reality.
This past weekend, I flew on to Boston for HackMIT, competing against 215 other totally cracked teams in a 24-hour caffeine-fueled showdown to turn our wildest ideas into reality. Trying to agree on a project with a team is like trying to decide where to eat with friends when everyone says "I'm fine with anything" but really isn't. After a lot of "What if we built this?" and "Nah, that's too ambitious," we finally settled on Fight Labs: think of it as a ghost coach that helps you become a better fighter. Whether you're an experienced combat sport athlete needing a real-time trainer to level up, or a kid who's tired of the school bully swiping your lunch money, Fight Labs has got your back—literally.
Our trio divided and conquered: one teammate wrangled the sensors, another spun magic on the front-end, and I dove headfirst into the backend and data processing abyss. I whipped up a data logger and API using Flask and deployed it to Heroku. Once that was finished I started tackling the video processing to interpret and predict our opponent's moves (because who needs sleep?) Little did I know, this is where things would get...interesting.
Initially, I planned to use YOLOv9 for video tracking to identify different fight moves. But as with all grand plans, reality slapped me in the face. Labeled training data was about as easy to find as a unicorn riding a unicycle, and we didn't have the luxury of time to create our own. Cue the mini existential crisis and a creeping sense of imposter syndrome. I started questioning everything: "Am I even cut out for this? Maybe I should've stuck to simpler projects like a to-do list app."
But then I remembered the power of delusion, convinced myself I was the next Tony Stark and before I knew it found a solution and pivoted to pose estimation.
Enter MediaPipe, Google's gift to developers who like things easy, well-documented, and integratable (is that a word?). Sure, it might not be as laser-precise as OpenPose, it was easy to use, had great documentation, and played well with edge devices. Plus, it didn't make my Mac's M1 chip cry for mercy. As I delved deeper, I couldn't help but appreciate Google's knack for creating developer-friendly tools. Midway through, the imposter syndrome started to fade, replaced by the thrill.
MediaPipe's pose estimation tracks 32 different points on a human body. I used these points to identify and predict a fighter's move based on how the angles between them changed. It felt like decoding the Matrix, but with more punching.
Now, if you've ever tried real-time video processing, you know it's like trying to juggle flaming torches while riding a skateboard—challenging but exhilarating. Luckily, my past life as an Innovator Fellow at ByteDance came in handy. I integrated their shiny new video processing framework, BMF (BabitMF Framework, not to be confused with other colorful acronyms). It's a hidden gem that made setting up dynamic graphs for real-time video processing a breeze.
With the technical hurdles mostly overcome, I hardcoded some coach responses for blocking and countering attacks, converting them into audio using Google's text-to-speech. The idea was that you'd hear real-time advice through earbuds, like having a coach whispering in your ear—minus the awkward closeness.
But as the clock ticked down, reality set in. Time ran out before I could connect the output to a front-end for this part of the code. So, when it came time to impress the judges, all I had was a terminal full of code and a hopeful smile. Not exactly the razzle-dazzle presentation I'd imagined. My old friend imposter syndrome made an unwelcome return, and I couldn't help but feel a bit deflated.
I was really hoping to place higher—not just for bragging rights, but for that sweet, sweet validation boost to my confidence. It's funny how a little recognition can quiet those nagging doubts, at least for a while. While we didn't snag first place, we did win the "Most Marvelous" award, which sounds like something out of a comic book. It wasn't the grand victory I'd hoped for, but it was a reminder that our hard work wasn't in vain. And hey, Marvelous is a pretty fantastic adjective to have associated with your work.
Beyond the hackathon, the weekend had its silver linings wrapped in warm fuzzies. My amazing friend let me crash on her couch, turning her living room into my personal lair of discarded hoodies and charging cables. She was the hostess with the mostest, making sure I was fed, caffeinated, and occasionally reminded to sleep (much to my chagrin.)
I got to meet up with a couple of friends I'd really missed. We ate like fat rats, trying out some fantastic restaurants that made my taste buds do a happy dance. Speaking of dancing, we ended up having an all-night dance party that probably should've been interrupted by concerned neighbors—but wasn't, thankfully.
The cherry on top was getting to spend the night cuddling with my favorite furry nephew—her dog, in case that wasn't clear. There's something about a wagging tail and puppy snuggles that melts away stress and makes everything right with the world, at least temporarily.
So, while the hackathon had its ups and downs, and my inner critic is still a bit grumpy about not placing higher, I came away with some valuable lessons and experiences. I pushed through moments of doubt, learned new technologies, and realized that sometimes, the journey is just as important as the destination.
In the not-so-distant future, I plan on repurposing some of this work for one of my personal creative coding projects. Maybe next time, I'll finally get that validation my imposter syndrome craves—or maybe I'll just have fun trying. Either way, stay tuned—there's more geeky goodness to come!
Here is the link to the Fight Lab repo if you want to check it out, and if there’s interest, I’ll finish building out and connecting the front end and deploy it so you can see it in all its glory.