Test / app.py
codewithRiz's picture
Update app.py
b29c3b4 verified
import os
import json
from datetime import datetime
from pathlib import Path
from uuid import uuid4
import gradio as gr
from PIL import Image
from huggingface_hub import CommitScheduler
# ---------------- Dataset setup ----------------
IMAGE_DATASET_DIR = Path("image_dataset") / f"train-{uuid4()}"
IMAGE_DATASET_DIR.mkdir(parents=True, exist_ok=True)
IMAGE_JSONL_PATH = IMAGE_DATASET_DIR / "metadata.jsonl"
# Read Hugging Face token from secret
HF_TOKEN = os.environ.get("HF_TOKEN")
if not HF_TOKEN:
raise ValueError("HF_TOKEN not found! Please set it in HF Spaces Secrets.")
# Scheduler for your HF dataset repo
scheduler = CommitScheduler(
repo_id="codewithRiz/Buck_data_saving", # your dataset repo
repo_type="dataset",
folder_path=IMAGE_DATASET_DIR,
path_in_repo=IMAGE_DATASET_DIR.name,
token=HF_TOKEN, # use the token from secret
)
# ---------------- Save uploaded image ----------------
def save_uploaded_image(user_id: str, image: Image.Image) -> str:
"""
Save the uploaded image to local dataset folder, log metadata, and push to HF Hub.
"""
image_path = IMAGE_DATASET_DIR / f"{uuid4()}.png"
with scheduler.lock:
# Save the image locally
image.save(image_path)
# Save metadata to JSONL
with IMAGE_JSONL_PATH.open("a") as f:
json.dump({
"user_id": user_id,
"file_name": image_path.name,
"datetime": datetime.now().isoformat()
}, f)
f.write("\n")
# Automatically commit & push to HF Hub
scheduler.commit(message=f"Add image {image_path.name} for user {user_id}")
return f"Image uploaded and pushed to repo successfully for user {user_id}!"
# ---------------- Gradio UI ----------------
def get_demo():
with gr.Row():
user_id_input = gr.Textbox(label="User ID")
image_input = gr.Image(label="Upload Image", type="pil")
upload_btn = gr.Button("Upload")
upload_status = gr.Textbox(label="Status")
upload_btn.click(
fn=save_uploaded_image,
inputs=[user_id_input, image_input],
outputs=upload_status
)
# Launch Gradio app
demo = gr.Blocks()
with demo:
get_demo()
demo.launch()