Hi, I’m Asif Khan. Welcome to our Django blog! In the era of smart technology, home fitness trackers are gaining popularity for their ability to monitor and enhance workout routines. If you’re interested in building your own fitness tracker from scratch, this guide will walk you through creating a DIY home fitness tracker using Python, Django, and OpenCV.
Why Build a DIY Home Fitness Tracker?
Building a home fitness tracker has several benefits:
- Personalization: Customize features according to your workout needs.
- Cost-Effective: Save money compared to commercial fitness trackers.
- Learning Experience: Gain hands-on experience with Python, Django, and computer vision.
Overview of the Project
This project involves:
- Setting Up Django: To create a web application for user interaction.
- Using OpenCV: For real-time video processing to track movements.
- Integrating Python: To handle backend logic and data processing.
Prerequisites
Before we start, make sure you have:
- Python installed on your system.
- Basic knowledge of Django, Python, and OpenCV.
- Necessary libraries: Django, OpenCV, Pillow.
Step 1: Setting Up Your Django Project
- Create a New Django Project Open your terminal and run:
django-admin startproject fitness_tracker
cd fitness_tracker
- Create a New Django App
python manage.py startapp tracker
- Update Settings Add
'tracker'
to theINSTALLED_APPS
list infitness_tracker/settings.py
:
INSTALLED_APPS = [
...
'tracker',
]
- Define Models In
tracker/models.py
, define a model to store workout data:
from django.db import models
class Workout(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)
duration = models.PositiveIntegerField() # Duration in seconds
calories_burned = models.FloatField()
Run migrations to create the model:
python manage.py makemigrations
python manage.py migrate
Step 2: Setting Up OpenCV for Motion Tracking
- Install OpenCV Install OpenCV and other dependencies:
pip install opencv-python-headless numpy
- Create a Motion Detection Script Create a file named
motion_detection.py
in thetracker
directory:
import cv2
import numpy as np
def detect_motion(frame1, frame2):
diff = cv2.absdiff(frame1, frame2)
gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
_, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
dilated = cv2.dilate(thresh, None, iterations=2)
contours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
if cv2.contourArea(contour) > 500:
return True
return False
Step 3: Integrate Motion Detection with Django
- Create Views for Fitness Tracking In
tracker/views.py
, add the following code:
from django.shortcuts import render
from django.http import JsonResponse
from .models import Workout
from .motion_detection import detect_motion
import cv2
def track_workout(request):
# Capture video from webcam
cap = cv2.VideoCapture(0)
workout_started = False
duration = 0
calorie_burned = 0
while True:
ret, frame1 = cap.read()
ret, frame2 = cap.read()
if detect_motion(frame1, frame2):
if not workout_started:
workout_started = True
duration += 1 # Increment duration (assuming 1-second intervals)
# Calculate calories burned (dummy value here, replace with real formula)
calorie_burned += 0.05
else:
if workout_started:
break
cap.release()
# Save workout data
workout = Workout(duration=duration, calories_burned=calorie_burned)
workout.save()
return JsonResponse({'duration': duration, 'calories_burned': calorie_burned})
- Create a Template for Tracking Workouts In
tracker/templates/tracker/track_workout.html
, create a simple template:
<!DOCTYPE html>
<html>
<head>
<title>Fitness Tracker</title>
</head>
<body>
<h1>Start Your Workout</h1>
<button onclick="startWorkout()">Start Workout</button>
<p id="result"></p>
<script>
function startWorkout() {
fetch('/track-workout/')
.then(response => response.json())
.then(data => {
document.getElementById('result').innerText =
`Duration: ${data.duration} seconds, Calories Burned: ${data.calories_burned}`;
});
}
</script>
</body>
</html>
- Configure URLs In
tracker/urls.py
, set up URL routing:
from django.urls import path
from . import views
urlpatterns = [
path('track-workout/', views.track_workout, name='track_workout'),
]
Include these URLs in your project’s urls.py
:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('tracker.urls')),
]
Step 4: Testing and Deployment
- Run Your Django Development Server Start the server with:
python manage.py runserver
Visit http://127.0.0.1:8000/
to test the fitness tracker.
- Deploy Your Application Deploy your Django app using a platform like Heroku, AWS, or DigitalOcean to make it accessible online.
Conclusion
You’ve successfully created a DIY home fitness tracker using Python, Django, and OpenCV! This project showcases how you can integrate motion detection with web applications to build a personalized fitness tool.
Further Reading:
Get In Touch:
Feel free to customize and extend this fitness tracker according to your needs. Happy coding!