Spaces:
Runtime error
Runtime error
import gradio as gr | |
import cv2 | |
import base64 | |
import openai | |
def process_video(video_file, api_key, instruction): | |
# Set the OpenAI API key | |
openai.api_key = api_key | |
# Read and process the video file | |
video = cv2.VideoCapture(video_file.name) | |
base64Frames = [] | |
while video.isOpened(): | |
success, frame = video.read() | |
if not success: | |
break | |
_, buffer = cv2.imencode(".jpg", frame) | |
base64Frames.append(base64.b64encode(buffer).decode("utf-8")) | |
video.release() | |
PROMPT_MESSAGES = [ | |
{ | |
"role": "user", | |
"content": [ | |
instruction, | |
*map(lambda x: {"image": x, "resize": 768}, base64Frames[0::10]), | |
], | |
}, | |
] | |
try: | |
result = openai.ChatCompletion.create( | |
model="gpt-4-vision-preview", | |
messages=PROMPT_MESSAGES, | |
api_key=openai.api_key, | |
max_tokens=500, | |
) | |
return result.choices[0].message.content | |
except Exception as e: | |
return f"Error: {e}" | |
# Define the Gradio app | |
def main(): | |
with gr.Blocks() as app: | |
gr.Markdown("## Video Narration Generator") | |
with gr.Row(): | |
with gr.Column(scale=1): | |
api_key_input = gr.Textbox(label="Enter your OpenAI API Key", lines=1) | |
instruction_input = gr.Textbox(label="Enter Narration Instruction", placeholder="Enter your custom instruction here...", lines=5) | |
video_upload = gr.File(label="Upload your video", type="file") | |
submit_button = gr.Button("Generate Script") | |
with gr.Column(scale=1): | |
output_box = gr.Textbox(label="Generated Script", lines=7, interactive=False) | |
submit_button.click(fn=process_video, inputs=[video_upload, api_key_input, instruction_input], outputs=output_box) | |
app.launch() | |
if __name__ == "__main__": | |
main() |