Our team is composed of four teenagers with an interest in doing bodyweight exercises, specifically doing them better than one another. Unfortunately, with such an eagerness to do as many push-ups as possible, or to maximize our time held in a “plank,” it was all too easy for our form to deteriorate. We wanted to make a platform that would both inspire its users to exercise through healthy competition - with themselves and others - while also teaching good form and technique.

STRIVE leverages computer vision algorithms to track users’ form during exercises, as well as counting time for static holds and repetitions for dynamic movements. It then takes the data collected from each users’ training sessions to provide customized workout plans to improve exercises, generated by a finetuned Google Gemini model, at the click of a button. Furthermore, individuals can track their progress through the XP they gain by completing workout sessions, providing more motivation for users to improve themselves - just a little - every day. And for the competitive among the users, STRIVE has live competitions and leaderboards for users to compete in against other users and other members of user-formed clubs.

Our team learned a lot through building this project. It was the first time any of us had used Tensorflow’s body tracking and the first time any of us had tried using Google’s AI Studio and Gemini API. For some of us, it was also our first time using Framer to design website UI/UX, and for others, integrating React with a Flask backend.

There are so many aspects to STRIVE that it would be impossible to describe the entire process of each in detail. In brief, the project was split into a few main components: The computer vision body tracking (and related processing) with Tensorflow, finetuning and implementing the Gemini API, creating the website templates in Framer, and finally, the integration of everything into one product alongside accounts, leaderboards, and all of the other features. These sections were done largely in parallel in order to complete the project on time. Part of the fun of making STRIVE was the challenges that we had to overcome. One of the largest issues we faced was correctly processing what the algorithm would accept as “good form” for the various exercises. We initially tried to implement these criteria based on intuition, but quickly found that the positions and movements weren’t always as straightforward as they seemed. In the end, settled on taking test data from various pictures and videos of these exercises being performed - including attempts by our own team members - to determine what the positions of and angles between the nodes given by Tensorflow Movenet should be. Unfortunately, as our dataset was still quite small, the algorithm is not completely accurate for everyone. Additionally, as most of our team members went into this project with no experience with Framer, the UI/UX design platform we used for the web app, a significant amount of time and effort was spent climbing the learning curve of the platform. And even for the more experienced members, given that Framer is a very what-you-see-is-what-you-get platform with few provisions made for code it was difficult to integrate it with the desired backend functions, requiring the use of embeds and weird flask api integrations to achieve complex actions such as creating dynamic tables.

Built With

Share this project:

Updates