File size: 1,730 Bytes
c592663 bf2aa22 c592663 bf2aa22 c592663 bf2aa22 c592663 63c2d6e bf2aa22 c592663 bf2aa22 c592663 fc2b4cb c592663 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import gradio as gr
import tensorflow as tf
import numpy as np
from PIL import Image
import io
import moviepy.editor as mp
# 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 = tf.image.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_file):
result = ""
if isinstance(video_file, str): # If the input is a file path
video = mp.VideoFileClip(video_file)
else: # If the input is a file-like object
video = mp.VideoFileClip(io.BytesIO(video_file.read()))
duration = int(video.duration)
frame_interval = duration // 10 # Analyze 10 frames evenly spaced throughout the video
for i in range(0, duration, frame_interval):
frame = video.get_frame(i)
image = Image.fromarray(frame)
label = classify_frame(image)
if "baseball" in label.lower():
result = "The runner is out"
break
if result == "":
result = "The runner is safe"
return result
iface = gr.Interface(
fn=process_video,
inputs="video",
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()
|