File size: 5,465 Bytes
e8746a9
 
9cca2b0
69de931
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e8746a9
9cca2b0
 
 
 
e8746a9
69de931
 
e8746a9
69de931
 
 
 
 
 
 
5c93b6c
 
 
 
4e4b7c1
5c93b6c
 
 
 
 
 
 
 
 
69de931
e8746a9
69de931
9cca2b0
 
69de931
 
 
6200397
69de931
 
 
 
 
 
 
 
 
b6410a4
 
 
 
 
 
 
 
 
4cb5a7a
 
69de931
6200397
 
 
 
 
 
 
69de931
 
 
 
 
 
 
e8746a9
69de931
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
from fastai.vision.all import *
import gradio as gr
import fal_client
from PIL import Image
import io
import base64

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"
}

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": f"A detailed, artistic interpretation of {predicted_class} flower in natural setting",
            "image_size": "square"  # Changed from "256x256" to "square"
        },
        with_logs=True,
        on_queue_update=on_queue_update,
    )
    
    # Convert the image data
    image_data = base64.b64decode(result['image'])
    generated_image = Image.open(io.BytesIO(image_data))
    
    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://silverfallsseed.com/wp-content/uploads/2016/01/tidy-tips-_-9.jpg',
        'https://cdn11.bigcommerce.com/s-1b9100svju/images/stencil/1280x1280/products/2044/1440/DETA-635__75522.1664817787.jpg?c=1',
        'https://shop.stoverseed.com/cdn/shop/products/DesertBluebells_CaliforniaBluebells-_Phaceliacampanularia_closeup_530x@2x.jpg?v=1596506040',
        'https://images.squarespace-cdn.com/content/v1/57488264f85082748c7c80db/d0e8480a-4eff-4219-88f8-e5ae6b32e81e/monkeyflower.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://vnps.org/wp-content/uploads/2021/05/Narrow-leaved-Blue-eyed-Grass-4-Sisyrinchium-angustifolium-by-Betsy-Washington.jpg',
        'https://gardenerspath.com/wp-content/uploads/2022/02/How-to-Grow-Baby-Blue-Eyes-Feature.jpg',
        'https://images.squarespace-cdn.com/content/v1/57488264f85082748c7c80db/d0e8480a-4eff-4219-88f8-e5ae6b32e81e/monkeyflower.jpg'
        
    ]
    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)