|
import gradio as gr |
|
import matplotlib.pyplot as plt |
|
import numpy as np |
|
import PIL |
|
import tensorflow as tf |
|
|
|
|
|
model = tf.keras.models.load_model('model.h5') |
|
class_name_list = ['Edible', 'Inedible', 'Poisonous'] |
|
|
|
def predict_image(img): |
|
|
|
img_4d = img.reshape(-1,224,224,3) |
|
|
|
prediction = model.predict(img_4d)[0] |
|
|
|
return {class_name_list[i]: float(prediction[i]) for i in range(3)} |
|
image = gr.inputs.Image(shape=(224,224)) |
|
label = gr.outputs.Label(num_top_classes=3) |
|
title = 'Mushroom Edibility Classifier' |
|
description = 'Get the edibility classification for the input mushroom image' |
|
examples=[['app_interface/Boletus edulis 15 wf.jpg'], |
|
['app_interface/Cantharelluscibarius5 mw.jpg'], |
|
['app_interface/Agaricus augustus 2 wf.jpg'], |
|
['app_interface/Coprinellus micaceus 8 wf.jpg'], |
|
['app_interface/Clavulinopsis fusiformis 2 fp.jpg'], |
|
['app_interface/Amanita torrendii 8 fp.jpg'], |
|
['app_interface/Russula sanguinea 5 fp.jpg'], |
|
['app_interface/Caloceraviscosa1 mw.jpg'], |
|
['app_interface/Amanita muscaria 1 wf.jpg'], |
|
['app_interface/Amanita pantherina 11 wf.jpg'], |
|
['app_interface/Lactarius torminosus 6 fp.jpg'], |
|
['app_interface/Amanitaphalloides1 mw.jpg']] |
|
thumbnail = 'app_interface/thumbnail.png' |
|
article = ''' |
|
<!DOCTYPE html> |
|
<html> |
|
<body> |
|
<p>The Mushroom Edibility Classifier is an MVP for CNN multiclass classification model.<br> |
|
It has been trained after gathering <b>5500 mushroom images</b> through Web Scraping techniques from the following web sites:</p> |
|
<br> |
|
<p> |
|
<a href="https://www.mushroom.world/">- Mushroom World</a><br> |
|
<a href="https://www.wildfooduk.com/mushroom-guide/">- Wild Food UK</a> <br> |
|
<a href="https://www.fungipedia.org/hongos">- Fungipedia</a> |
|
</p> |
|
<br> |
|
<p style="color:Orange;">Note: <i>model created solely and exclusively for academic purposes. The results provided by the model should never be considered definitive as the accuracy of the model is not guaranteed.</i></p> |
|
|
|
<br> |
|
<p><b>MODEL METRICS:</b></p> |
|
<table> |
|
<tr> |
|
<th> </th> |
|
<th>precision</th> |
|
<th>recall</th> |
|
<th>f1-score</th> |
|
<th>support</th> |
|
</tr> |
|
<tr> |
|
<th>Edible</th> |
|
<th>0.61</th> |
|
<th>0.70</th> |
|
<th>0.65</th> |
|
<th>481</th> |
|
</tr> |
|
<tr> |
|
<th>Inedible</th> |
|
<th>0.67</th> |
|
<th>0.69</th> |
|
<th>0.68</th> |
|
<th>439</th> |
|
</tr> |
|
<tr> |
|
<th>Poisonous</th> |
|
<th>0.52</th> |
|
<th>0.28</th> |
|
<th>0.36</th> |
|
<th>192</th> |
|
</tr> |
|
<tr> |
|
<th></th> |
|
</tr> |
|
<tr> |
|
<th>Global Accuracy</th> |
|
<th></th> |
|
<th></th> |
|
<th>0.63</th> |
|
<th>1112</th> |
|
</tr> |
|
<tr> |
|
<th>Macro Average</th> |
|
<th>0.60</th> |
|
<th>0.56</th> |
|
<th>0.57</th> |
|
<th>1112</th> |
|
</tr> |
|
<tr> |
|
<th>Weighted Average</th> |
|
<th>0.62</th> |
|
<th>0.63</th> |
|
<th>0.61</th> |
|
<th>1112</th> |
|
</tr> |
|
</table> |
|
<br> |
|
<p><i>Author: 脥帽igo Sarralde Alz贸rriz</i></p> |
|
</body> |
|
</html> |
|
''' |
|
|
|
iface = gr.Interface(fn=predict_image, |
|
inputs=image, |
|
outputs=label, |
|
interpretation='default', |
|
title = title, |
|
description = description, |
|
theme = 'darkpeach', |
|
examples = examples, |
|
thumbnail = thumbnail, |
|
article = article, |
|
allow_flagging = False, |
|
allow_screenshot = False, |
|
) |
|
iface.launch() |