| 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() |