NourFakih's picture
Create app.py
6ea1084 verified
import streamlit as st
from zipfile import ZipFile
import os
import pandas as pd
# Helper functions for image and video captioning (to be implemented)
def caption_images(image_folder):
# Dummy implementation, replace with actual model inference
captions = {"image1.jpg": "A beautiful scenery", "image2.jpg": "A cute puppy"}
return captions
def caption_video(video_file):
# Dummy implementation, replace with actual model inference
return "A summary of the video content."
# Main App
st.title("Multimedia Captioning and Search App")
# Sidebar options
st.sidebar.header("Options")
st.sidebar.subheader("Upload Files")
uploaded_zip = st.sidebar.file_uploader("Upload a ZIP file of images", type="zip")
uploaded_video = st.sidebar.file_uploader("Upload a video file", type=["mp4", "avi", "mov"])
st.sidebar.subheader("Search")
search_input = st.sidebar.text_input("Enter search term")
# Handling image zip file upload
if uploaded_zip is not None:
with ZipFile(uploaded_zip, 'r') as zip_ref:
zip_ref.extractall("uploaded_images")
st.write("Images extracted successfully!")
image_captions = caption_images("uploaded_images")
# Save captions to CSV
df_images = pd.DataFrame(list(image_captions.items()), columns=["Image", "Caption"])
df_images.to_csv("image_captions.csv", index=False)
# Handling video file upload
if uploaded_video is not None:
video_caption = caption_video(uploaded_video)
# Save caption to CSV
df_video = pd.DataFrame([["video_frame.jpg", video_caption]], columns=["Video Frame", "Caption"])
df_video.to_csv("video_captions.csv", index=False)
# Extract and display one frame from video (dummy implementation)
st.image("video_frame.jpg", caption=video_caption)
# Display gallery of images and videos with captions
st.subheader("Gallery")
if os.path.exists("image_captions.csv"):
df_images = pd.read_csv("image_captions.csv")
for index, row in df_images.iterrows():
st.image(f"uploaded_images/{row['Image']}", caption=row["Caption"])
if os.path.exists("video_captions.csv"):
df_video = pd.read_csv("video_captions.csv")
for index, row in df_video.iterrows():
st.image(row["Video Frame"], caption=row["Caption"])
# Search functionality
if search_input:
st.subheader("Search Results")
if os.path.exists("image_captions.csv"):
df_images = pd.read_csv("image_captions.csv")
search_results = df_images[df_images["Caption"].str.contains(search_input, case=False, na=False)]
for index, row in search_results.iterrows():
st.image(f"uploaded_images/{row['Image']}", caption=row["Caption"])
if os.path.exists("video_captions.csv"):
df_video = pd.read_csv("video_captions.csv")
search_results = df_video[df_video["Caption"].str.contains(search_input, case=False, na=False)]
for index, row in search_results.iterrows():
st.image(row["Video Frame"], caption=row["Caption"])