Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pandas as pd | |
from PIL import Image | |
import os | |
import uuid | |
import boto3 | |
image_directory = "images" | |
os.makedirs(image_directory, exist_ok=True) | |
aws_access_key = os.environ['AWS_ACCESS_KEY'] | |
aws_secret_key = os.environ['AWS_SECRET_KEY'] | |
aws_region = os.environ['AWS_REGION'] | |
s3 = boto3.client('s3', aws_access_key_id=aws_access_key, aws_secret_access_key=aws_secret_key, region_name=aws_region) | |
s3_bucket_name = os.environ['S3_BUCKET_NAME'] | |
data = [] | |
base_csv_file_path = "descriptions" | |
csv_file_path = f"{base_csv_file_path}.csv" | |
def file_exists(file_path): | |
return os.path.isfile(file_path) | |
def generate_unique_csv_file(): | |
count = 1 | |
while file_exists(f"{base_csv_file_path}{count}.csv"): | |
count += 1 | |
return f"{base_csv_file_path}{count}.csv" | |
def describe_image(image, filename, description, copyright): | |
global data | |
image_filename = f"{str(uuid.uuid4())}.jpg" | |
local_image_path = os.path.join(image_directory, image_filename) | |
image.save(local_image_path) | |
s3.upload_file(local_image_path, s3_bucket_name, f"images/{image_filename}") | |
os.remove(local_image_path) | |
data.append({"Image": image_filename, "Filename": filename, "Description": description, "Copyright": copyright}) | |
data_df = pd.DataFrame(data) | |
if file_exists(csv_file_path): | |
new_csv_file_path = generate_unique_csv_file() | |
data_df.to_csv(new_csv_file_path, index=False) | |
s3.upload_file(new_csv_file_path, s3_bucket_name, new_csv_file_path) | |
else: | |
data_df.to_csv(csv_file_path, index=False) | |
s3.upload_file(csv_file_path, s3_bucket_name, csv_file_path) | |
gr.Info('Data saved.') | |
return None | |
def auth_fn(username, password): | |
return username == os.getenv("SM_USERNAME") and password == os.getenv("SM_PASSWORD") | |
iface = gr.Interface( | |
fn=describe_image, | |
inputs=[ | |
gr.Image(type="pil", label="Upload an Image"), | |
"text", | |
"text", | |
"text" | |
], | |
outputs=gr.Info("saved"), # Display the success message | |
live=False, | |
title="Image Description App", | |
description="Upload an image and provide three descriptions for it.", | |
allow_flagging=False, | |
theme=gr.themes.Base(primary_hue="green").set( | |
button_primary_background_fill="*primary_400", | |
button_primary_background_fill_hover="*primary_300", | |
) | |
) | |
iface.launch(auth=auth_fn) | |