MBase / app.py
MNGames's picture
Create app.py
c592663 verified
raw
history blame
1.72 kB
import gradio as gr
import tensorflow as tf
import numpy as np
import cv2
from PIL import Image
import io
# Load a pre-trained TensorFlow model (replace with your model path)
model = tf.keras.applications.MobileNetV2(weights="imagenet")
def preprocess_image(image):
img = np.array(image)
img = cv2.resize(img, (224, 224))
img = tf.keras.applications.mobilenet_v2.preprocess_input(img)
return np.expand_dims(img, axis=0)
def classify_frame(frame):
processed_frame = preprocess_image(frame)
predictions = model.predict(processed_frame)
decoded_predictions = tf.keras.applications.mobilenet_v2.decode_predictions(predictions, top=1)[0]
return decoded_predictions[0][1]
def process_video(video):
result = ""
cap = cv2.VideoCapture(video)
frame_count = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
frame_interval = frame_count // 10 # Analyze 10 frames evenly spaced throughout the video
for i in range(0, frame_count, frame_interval):
cap.set(cv2.CAP_PROP_POS_FRAMES, i)
ret, frame = cap.read()
if not ret:
break
frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
image = Image.fromarray(frame_rgb)
label = classify_frame(image)
if "baseball" in label.lower():
result = "The runner is out"
break
cap.release()
if result == "":
result = "The runner is safe"
return result
iface = gr.Interface(
fn=process_video,
inputs=gr.inputs.Video(type="mp4"),
outputs="text",
title="Baseball Runner Status",
description="Upload a baseball video to determine if the runner is out or safe."
)
if __name__ == "__main__":
iface.launch()