Pengi5659's picture
Update app.py
3904fae verified
import gradio as gr
import tensorflow as tf
import numpy as np
import cv2
import os
if not os.path.exists("keras_model.h5"):
raise FileNotFoundError("Model file not found!")
model = tf.keras.models.load_model("keras_model.h5")
# Load Teachable Machine model
model = tf.keras.models.load_model("./keras_model.h5")
# Labels from your model — change if needed
labels = ["Good Posture", "Bad Posture"]
def predict_from_webcam(frame):
# Convert to RGB if needed (Gradio usually provides RGB)
if frame.shape[-1] == 4:
frame = frame[:, :, :3] # remove alpha channel
# Resize to 224x224 (Teachable Machine default)
img = cv2.resize(frame, (224, 224))
img = img / 255.0 # normalize to [0, 1]
img = np.expand_dims(img, axis=0) # add batch dimension
# Prediction
prediction = model.predict(img)[0]
label = labels[np.argmax(prediction)]
confidence = np.max(prediction)
return f"{label} ({confidence * 100:.2f}%)"
# Gradio interface
demo = gr.Interface(
fn=predict_from_webcam,
inputs=gr.Image(source="webcam", streaming=True),
outputs=gr.Text(),
live=True,
title="🪑 Posture Detector",
description="Detects good or bad posture from webcam using a Teachable Machine model."
)
demo.launch()