CoolFace
Apppublic

HumanCenteredAI/olliedetection

sourceHugging Faceupdated 11mo agoView on Hugging Face
0likes
app.py53 linesDownload Raw Back to root
1import streamlit as st2import numpy as np, cv2, pickle3from tensorflow.keras.models import load_model4from attention import Attention5from pose_utils import extract_pose_sequence6from utils.face_recognition import verify_user7from utils.feedback_rules import feedback_from_landmarks8import tempfile, mediapipe as mp9 10st.set_page_config(page_title="Ollie Mistake Detector", layout="wide")11st.title("🛹 Ollie Success & Mistake Classifier")12 13# Load model and encodings14model = load_model("models/ollie_classifier.h5", custom_objects={"Attention": Attention})15known_encodings, known_names = pickle.load(open("models/face_encodings.pkl", "rb"))16 17uploaded_file = st.file_uploader("Upload or record your ollie video (.mp4/.mov)", type=["mp4","mov"])18 19if uploaded_file:20    with tempfile.NamedTemporaryFile(delete=False) as temp:21        temp.write(uploaded_file.read())22        video_path = temp.name23 24    # Verify face (first frame)25    cap = cv2.VideoCapture(video_path)26    ret, frame = cap.read(); cap.release()27    user = verify_user(frame, known_encodings, known_names)28 29    if user:30        st.success(f"Face verified: {user}")31        seq = extract_pose_sequence(video_path)32        pred = model.predict(seq[np.newaxis, ...])[0]33        labels = ["Ollie Failure", "Ollie Successful"]34        result = labels[np.argmax(pred)]35        conf = np.max(pred)36 37        st.markdown(f"### 🧠 Prediction: **{result}** ({conf*100:.2f}%)")38 39        if result == "Ollie Failure":40            landmarks = {41                'hip_y': 0.4, 'foot_y': 0.3,42                'front_foot_slide': 0.02,43                'back_foot_pop': 0.03,44                'back_foot_lift': 0.0545            }46            feedback = feedback_from_landmarks(landmarks)47            st.warning(f"⚠️ Mistake detected: {feedback}")48 49        st.video(video_path)50 51    else:52        st.error("❌ Face not recognized. Please register your face.")53