Spaces:
Runtime error
Runtime error
import gradio as gr | |
import cv2 | |
from PIL import Image | |
import google.generativeai as genai | |
from dotenv import load_dotenv | |
import os | |
load_dotenv() | |
api_key = os.getenv('api_key') | |
genai.configure(api_key=api_key) | |
def extract_frames(video_path, fps=30): | |
frames = [] | |
cap = cv2.VideoCapture(video_path) | |
if not cap.isOpened(): | |
raise ValueError("Error: Unable to open video file.") | |
original_fps = cap.get(cv2.CAP_PROP_FPS) | |
if original_fps == 0: | |
raise ValueError("Error: Unable to retrieve FPS from video file.") | |
frame_interval = int(original_fps // fps) | |
frame_count = 0 | |
success, frame = cap.read() | |
while success: | |
if frame_count % frame_interval == 0: | |
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
pil_image = Image.fromarray(frame) | |
frames.append(pil_image) | |
frame_count += 1 | |
success, frame = cap.read() | |
cap.release() | |
if len(frames) == 0: | |
raise ValueError("Error: No frames extracted from the video.") | |
return frames | |
def generate_prompt(button_list): | |
button_descriptions = ", ".join(button_list) | |
return ( | |
f"Generate structured test cases for the following UI button(s): {button_descriptions}.\n\n" | |
"Functionality\n" | |
"- What the button is supposed to do.\n\n" | |
"Preconditions\n" | |
"- Any requirements before interaction.\n\n" | |
" Test Steps\n" | |
"- Concise steps for executing the test.\n\n" | |
"Expected Results\n" | |
"- What the expected outcome should be.\n\n" | |
"Automated Testing Tools\n" | |
"- Recommended tools for testing.\n\n" | |
"Format the output clearly for easy readability, using bullet points for key details." | |
) | |
def process_video(video_file, buttons_to_test): | |
try: | |
video_path = "uploaded_video.mp4" | |
with open(video_path, "wb") as f: | |
f.write(video_file) | |
# Extract frames | |
frames = extract_frames(video_path, fps=30) | |
button_list = [button.strip() for button in buttons_to_test.split(",")] | |
prompt = generate_prompt(button_list) | |
model = genai.GenerativeModel(model_name="gemini-1.5-pro-latest") | |
response = model.generate_content([prompt]) | |
output_text = response.text if hasattr(response, 'text') else "Error: Invalid response from the model." | |
output_text = output_text.replace("Functionality", "📋 Functionality") | |
output_text = output_text.replace("Preconditions", "🔍 Preconditions") | |
output_text = output_text.replace("Test Steps", "📝 Test Steps") | |
output_text = output_text.replace("Expected Results", "✅ Expected Results") | |
output_text = output_text.replace("Automated Testing Tools", "🛠️ Automated Testing Tools") | |
return output_text | |
except Exception as e: | |
return str(e) | |
iface = gr.Interface( | |
fn=process_video, | |
inputs=[ | |
gr.File(label="Upload Video", type="binary"), | |
gr.Textbox(label="Buttons/Functions to Test (comma-separated)", placeholder="e.g., booking, cancel"), | |
], | |
outputs="text", | |
title="UI Test Case Generator", | |
description="Upload a video and specify the buttons you want to test. The tool will generate structured test cases." | |
) | |
iface.launch(share=True) | |