Spaces:
Sleeping
Sleeping
| from fastai.vision.all import * | |
| import gradio as gr | |
| import fal_client | |
| from PIL import Image | |
| import io | |
| import base64 | |
| import random | |
| import requests | |
| search_terms_wikipedia = { | |
| "blazing star": "https://en.wikipedia.org/wiki/Mentzelia", | |
| "bristlecone pine": "https://en.wikipedia.org/wiki/Pinus_longaeva", | |
| "california bluebell": "https://en.wikipedia.org/wiki/Phacelia_minor", | |
| "california buckeye": "https://en.wikipedia.org/wiki/Aesculus_californica", | |
| "california buckwheat": "https://en.wikipedia.org/wiki/Eriogonum_fasciculatum", | |
| "california fuchsia": "https://en.wikipedia.org/wiki/Epilobium_canum", | |
| "california checkerbloom": "https://en.wikipedia.org/wiki/Sidalcea_malviflora", | |
| "california lilac": "https://en.wikipedia.org/wiki/Ceanothus", | |
| "california poppy": "https://en.wikipedia.org/wiki/Eschscholzia_californica", | |
| "california sagebrush": "https://en.wikipedia.org/wiki/Artemisia_californica", | |
| "california wild grape": "https://en.wikipedia.org/wiki/Vitis_californica", | |
| "california wild rose": "https://en.wikipedia.org/wiki/Rosa_californica", | |
| "coyote mint": "https://en.wikipedia.org/wiki/Monardella", | |
| "elegant clarkia": "https://en.wikipedia.org/wiki/Clarkia_unguiculata", | |
| "baby blue eyes": "https://en.wikipedia.org/wiki/Nemophila_menziesii", | |
| "hummingbird sage": "https://en.wikipedia.org/wiki/Salvia_spathacea", | |
| "delphiniumr": "https://en.wikipedia.org/wiki/Delphinium", | |
| "matilija poppy": "https://en.wikipedia.org/wiki/Romneya_coulteri", | |
| "blue-eyed grass": "https://en.wikipedia.org/wiki/Sisyrinchium_bellum", | |
| "penstemon spectabilis": "https://en.wikipedia.org/wiki/Penstemon_spectabilis", | |
| "seaside daisy": "https://en.wikipedia.org/wiki/Erigeron_glaucus", | |
| "sticky monkeyflower": "https://en.wikipedia.org/wiki/Diplacus_aurantiacus", | |
| "tidy tips": "https://en.wikipedia.org/wiki/Layia_platyglossa", | |
| "wild cucumber": "https://en.wikipedia.org/wiki/Marah_(plant)", | |
| "douglas iris": "https://en.wikipedia.org/wiki/Iris_douglasiana", | |
| "goldfields coreopsis": "https://en.wikipedia.org/wiki/Coreopsis" | |
| } | |
| # Update prompt templates | |
| prompt_templates = [ | |
| "A cosmic {flower} blooming in space, with petals made of swirling galaxies and nebulae, glowing softly against a backdrop of distant stars.", | |
| "An enchanted garden filled with a bioluminescent {flower}, each petal radiating vibrant, otherworldly colors, illuminating the dark, mystical forest around them.", | |
| "A mechanical {flower} with petals made of polished metal and intricate gears, unfolding in a steampunk-inspired futuristic landscape.", | |
| "A surreal pot of a {flower} where each bloom is a miniature landscape, showing tiny mountains, rivers, and clouds nestled within the petals.", | |
| "An abstract explosion of a {flower}, blending vibrant colors and fluid shapes in a chaotic, dreamlike composition, evoking movement and emotion." | |
| ] | |
| def on_queue_update(update): | |
| if isinstance(update, fal_client.InProgress): | |
| for log in update.logs: | |
| print(log["message"]) | |
| def process_image(img): | |
| # First do the classification | |
| pred, idx, probs = learn.predict(img) | |
| classification_results = dict(zip(search_terms_wikipedia.keys(), map(float, probs))) | |
| # Get Wikipedia URL for the predicted class | |
| predicted_class = max(classification_results.items(), key=lambda x: x[1])[0] | |
| wiki_url = search_terms_wikipedia.get(predicted_class, "No Wikipedia entry found.") | |
| # Generate FLUX image | |
| result = fal_client.subscribe( | |
| "fal-ai/flux/schnell", | |
| arguments={ | |
| "prompt": random.choice(prompt_templates).format(flower=predicted_class), | |
| "image_size": "square" | |
| }, | |
| with_logs=True, | |
| on_queue_update=on_queue_update, | |
| ) | |
| image_url = result['images'][0]['url'] | |
| response = requests.get(image_url) | |
| generated_image = Image.open(io.BytesIO(response.content)) | |
| return classification_results, generated_image, wiki_url | |
| # Load the learner | |
| learn = load_learner('export.pkl') | |
| # Create Gradio interface | |
| with gr.Blocks() as demo: | |
| with gr.Row(): | |
| input_image = gr.Image(height=192, width=192, label="Upload Image for Classification", type="pil") | |
| with gr.Row(): | |
| with gr.Column(): | |
| label_output = gr.Label(label="Classification Results") | |
| wiki_output = gr.Textbox(label="Wikipedia Article Link", lines=1) | |
| generated_image = gr.Image(label="AI Generated Interpretation") | |
| # Example images | |
| examples = [ | |
| 'https://www.deserthorizonnursery.com/wp-content/uploads/2024/03/Brittlebush-Encelia-Farinosa-desert-horizon-nursery.jpg', | |
| 'https://cdn.mos.cms.futurecdn.net/VJE7gSuQ9KWbkqEsWgX5zS.jpg', | |
| 'https://www.parksconservancy.org/sites/default/files/styles/basic/public/A_GEN_131213_WTE_109.jpg?itok=9SDtr4b2', | |
| 'https://silverfallsseed.com/wp-content/uploads/2016/01/tidy-tips-_-9.jpg', | |
| 'https://valleywaternews.org/wp-content/uploads/2016/06/ceanothus-clusters.jpg?w=1440', | |
| 'https://cdn11.bigcommerce.com/s-1b9100svju/images/stencil/1280x1280/products/2044/1440/DETA-635__75522.1664817787.jpg?c=1' | |
| ] | |
| gr.Examples( | |
| examples=examples, | |
| inputs=input_image, | |
| examples_per_page=5, | |
| fn=process_image, | |
| outputs=[label_output, generated_image, wiki_output] | |
| ) | |
| # Set up event handler | |
| input_image.change( | |
| fn=process_image, | |
| inputs=input_image, | |
| outputs=[label_output, generated_image, wiki_output] | |
| ) | |
| demo.launch(inline=False) |