File size: 1,351 Bytes
1ac122c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from fastai.vision.all import load_learner
# PIL ANTES: 8.2.0

CATS_MAP = {
    "eColi": "E. coli",
    "staphylococcusAureus": "Staphylococcus aureus",
    "streptococcusPyogenes": "Streptococcus pyogenes",
    "pseudomonasAeruginosa": "Pseudomonas aeruginosa",
    "salmonellaSpp": "Salmonella spp",
    "klebsiellaPneumoniae": "Klebsiella pneumoniae",
    "proteusMirabilis": "Proteus mirabilis",
    "enterococcusFaecalis": "Enterococcus faecalis",
    "lactobacillus": "Lactobacillus",
}

# load pre-trained model
model = load_learner("model.pkl")

# get classes name in right order
full_name_cats = [CATS_MAP[key_class] for key_class in model.dls.vocab]


def classify_image(img) -> dict:
    category, idx, probs = model.predict(img)

    return dict(zip(full_name_cats, map(float, probs)))


# Gradio control
image = gr.inputs.Image(shape=(224, 224))
label = gr.outputs.Label(num_top_classes=4)
examples = [
    f"images_examples/{filename}" 
    for filename in ("klebsiella.jpg", "enterococcus.jpg", "salmonella.jpg")
]

gui = gr.Interface(
    fn=classify_image,
    inputs=image,
    outputs=label,
    examples=examples,
    title="Detect bacterias - first version",
    description=(
        f"Detect if the given Petri dish culture image belongs to one of those: ({full_name_cats})."
    )
)
gui.launch(inline=False)