| | import gradio as gr |
| | import pandas as pd |
| | from transformers import pipeline |
| | from PIL import Image |
| | import requests |
| |
|
| | |
| | |
| | df = pd.read_csv("gldv2_info.csv") |
| |
|
| | |
| | try: |
| | story_pipe = pipeline("text-generation", model="Samurai719214/gptneo-mythology-storyteller") |
| | except Exception: |
| | story_pipe = pipeline("text-generation", model="mahing/historical-narrative-generator") |
| |
|
| | |
| | try: |
| | from diffusers import StableDiffusionPipeline |
| | import torch |
| | sd_pipe = StableDiffusionPipeline.from_pretrained( |
| | "stabilityai/stable-diffusion-xl-base-1.0", |
| | torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32 |
| | ) |
| | sd_pipe = sd_pipe.to("cuda" if torch.cuda.is_available() else "cpu") |
| | except Exception: |
| | sd_pipe = None |
| |
|
| | |
| | def landmark_explorer(site_name): |
| | site_name_clean = site_name.strip().lower() |
| | matches = df[df['name'].str.strip().str.lower() == site_name_clean] |
| | images = [] |
| | |
| | for url in matches['url']: |
| | try: |
| | img = Image.open(requests.get(url, stream=True, timeout=6).raw).convert("RGB") |
| | images.append(img) |
| | except Exception: |
| | continue |
| |
|
| | |
| | story_prompt = ( |
| | f"Tell a mythological and historical story about the site: {site_name} in Egypt. " |
| | "Include both legend and real archaeological facts where possible." |
| | ) |
| | try: |
| | out = story_pipe(story_prompt, max_length=380, do_sample=True) |
| | story = out[0]['generated_text'] |
| | except Exception: |
| | story = "Unable to generate story for this landmark at the moment." |
| |
|
| | |
| | if not images and sd_pipe is not None: |
| | try: |
| | images = [sd_pipe(f"{site_name} in ancient Egypt, detailed, realistic, landscape").images[0]] |
| | except Exception: |
| | pass |
| |
|
| | if not images: |
| | return story, None |
| | return story, images |
| |
|
| | |
| | with gr.Blocks() as demo: |
| | gr.Markdown( |
| | """ |
| | # 🏛️ Egyptian Landmark Explorer |
| | Enter the name of an ancient Egyptian landmark (from the dataset) to see a mythological and historical story, plus images! |
| | """ |
| | ) |
| | name_input = gr.Textbox(label="Enter Landmark Name (e.g., Great_Pyramid_of_Giza)") |
| | story_output = gr.Textbox(label="Generated Story") |
| | gallery_output = gr.Gallery(label="Images", columns=3) |
| | run_btn = gr.Button("Explore") |
| |
|
| | run_btn.click( |
| | landmark_explorer, |
| | inputs=name_input, |
| | outputs=[story_output, gallery_output] |
| | ) |
| |
|
| | gr.Markdown( |
| | "Sample landmark names: Great_Pyramid_of_Giza, Karnak, Temple_of_Edfu, Bab_al-Nasr_(Cairo), etc." |
| | ) |
| |
|
| | if __name__ == "__main__": |
| | demo.launch() |
| |
|