jaimin's picture
Upload 78 files
bf53f45 verified
from django.shortcuts import render
# Create your views here.
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json
from rest_framework.views import APIView
from django.core.files.storage import default_storage
# from .demo import run_inference # Import from demo.py
from age_estimator.mivolo.demo_copy import main
import os
# @csrf_exempt
class AgeEstimation(APIView):
def post(self, request):
# Save the uploaded video file
try:
video_file = request.FILES['video_file']
# def age_estimation_view(request):
# if request.method == "POST":
# try:
# data = json.loads(request.body)
# video_path = data.get("video_path")
output_folder = 'output'
detector_weights = 'age_estimator/mivolo/models/yolov8x_person_face.pt'
checkpoint = 'age_estimator/mivolo/models/model_imdb_cross_person_4.22_99.46.pth.tar'
# detector_weights = data.get("detector_weights")
# checkpoint = data.get("checkpoint")
# device = data.get("device", "cpu")
# with_persons = data.get("with_persons", False)
# disable_faces = data.get("disable_faces", False)
# draw = data.get("draw", False)
device = 'cpu'
with_persons = True
disable_faces = False
draw = True
file_name = default_storage.save(video_file.name, video_file)
video_file_path = os.path.join(default_storage.location, file_name)
# Check for required parameters
if not video_file_path or not detector_weights or not checkpoint:
return JsonResponse({"error": "Missing required fields: 'video_path', 'detector_weights', or 'checkpoint'"}, status=400)
# Run the inference function from demo.py
absolute_age, lower_bound, upper_bound = main(
video_file_path, output_folder, detector_weights, checkpoint, device, with_persons, disable_faces, draw
)
# print(absolute_age)
# Return the result as a JSON response
return JsonResponse({
# "absolute_age": absolute_age,
"age_range": f"{lower_bound} - {upper_bound}"
})
except Exception as e:
return JsonResponse({"error": str(e)}, status=500)
return JsonResponse({"error": "Invalid request method"}, status=400)