|
|
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" |
|
|
} |
|
|
|
|
|
|
|
|
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): |
|
|
|
|
|
pred, idx, probs = learn.predict(img) |
|
|
classification_results = dict(zip(search_terms_wikipedia.keys(), map(float, probs))) |
|
|
|
|
|
|
|
|
predicted_class = max(classification_results.items(), key=lambda x: x[1])[0] |
|
|
wiki_url = search_terms_wikipedia.get(predicted_class, "No Wikipedia entry found.") |
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
learn = load_learner('export.pkl') |
|
|
|
|
|
|
|
|
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") |
|
|
|
|
|
|
|
|
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' |
|
|
] |
|
|
gr.Examples( |
|
|
examples=examples, |
|
|
inputs=input_image, |
|
|
examples_per_page=5, |
|
|
fn=process_image, |
|
|
outputs=[label_output, generated_image, wiki_output] |
|
|
) |
|
|
|
|
|
|
|
|
input_image.change( |
|
|
fn=process_image, |
|
|
inputs=input_image, |
|
|
outputs=[label_output, generated_image, wiki_output] |
|
|
) |
|
|
|
|
|
demo.launch(inline=False) |