datasith's picture
first commit
bc768f1
raw
history blame
2.89 kB
### -------------------------------- ###
### libraries ###
### -------------------------------- ###
import gradio as gr
import numpy as np
import os
from tensorflow.keras.models import load_model
### -------------------------------- ###
### model loading ###
### -------------------------------- ###
model = load_model('model.h5') # single file model from colab
## --------------------------------- ###
### reading: categories.txt ###
### -------------------------------- ###
labels = ['please upload categories.txt' for i in range(10)] # placeholder
if os.path.isfile("categories.txt"):
# open categories.txt in read mode
categories = open("categories.txt", "r")
labels = categories.readline().split()
## --------------------------------- ###
### rendering: info.html ###
### -------------------------------- ###
# borrow file reading functionality from reader.py
# info =
description = "A Hugging Space demo created by datasith"
title = "Cast parts: Deffective or Okay?"
# css = \
# '''
# .div {
# border: 2px solid black;
# margin: 10px;
# padding: 5%;
# }
# ul {
# display: inline-block;
# text-align: left;
# }
# img {
# display: block;
# margin: auto;
# }
# .description {
# text-align: center;
# }
# '''
article = \
'''
Deffective or Okay? Demo app including a binary classification model for casted parts
This is a test project to get familiar with Hugging Face!
The space includes the necessary files for everything to run smoothly on HF's `Spaces`:
- `app.py`
- `reader.py`
- `requirements.txt`
- `model.h5` (TensorFlow/Keras)
- `categories.txt`
- `info.txt`
The data used to train the model is available as [Kaggle dataset](https://www.kaggle.com/datasets/ravirajsinh45/real-life-industrial-dataset-of-casting-product).
The space was inspired by @Isabel's wonderful [cat or pug](https://huggingface.co/spaces/isabel/pug-or-cat-image-classifier) one. Enjoy!d
'''
### -------------------------------- ###
### interface creation ###
### -------------------------------- ###
samples = ['defective.jpeg', 'okay.jpeg']
def preprocess(image):
image = np.array(image) / 255
image = np.expand_dims(image, axis=0)
return image
def predict_image(image):
pred = model.predict(preprocess(image))
results = {}
for row in pred:
for idx, item in enumerate(row):
results[labels[idx]] = float(item)
return results
# generate img input and text label output
image = gr.inputs.Image(shape=(300, 300), label="Upload Your Image Here")
label = gr.outputs.Label(num_top_classes=len(labels))
# generate and launch interface
interface = gr.Interface(fn=predict_image, inputs=image, outputs=label, article=article, theme='default', title=title, allow_flagging='never', description=description, examples=samples)
interface.launch()