jaimin's picture
Update app.py
b76355a verified
import os
from concurrent.futures import ThreadPoolExecutor
import gradio as gr
from heartBPM_modified_copy import heart
from eyebrow_detection_modified_copy import stress
from age_estimator.mivolo.demo_copy import main as age_estimation_main
def process_video(video_file):
# Validate the input file path
if not video_file or not os.path.isfile(video_file):
return {'error': 'Invalid video path'}
# Run functions in parallel
with ThreadPoolExecutor() as executor:
heart_future = executor.submit(heart, video_file)
stress_future = executor.submit(stress, video_file, duration=30)
# Define parameters for age estimation
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'
device = 'cpu'
with_persons = True
disable_faces = False
draw = True
age_future = executor.submit(
age_estimation_main, video_file, output_folder, detector_weights, checkpoint, device, with_persons, disable_faces, draw
)
# Retrieve results
avg_bpm, frames_processed = heart_future.result()
stressed_count, not_stressed_count, most_frequent_label = stress_future.result()
absolute_age, lower_bound, upper_bound = age_future.result()
# Compile results
results = {
'Average BPM': avg_bpm,
'Most Frequent State': most_frequent_label,
'Age Range': f"{lower_bound} - {upper_bound}"
}
return results
# Define Gradio interface
gr.Interface(
fn=process_video,
inputs=gr.Video(label="Upload a video file"),
outputs="json",
title="Parallel Video Processing for Heart Rate, Stress, and Age Estimation"
).launch()