File size: 3,257 Bytes
56c2806
bc768f1
 
 
 
 
3a24180
92b9152
bc768f1
 
 
3a24180
bc768f1
 
 
 
 
 
 
 
 
 
 
 
56c2806
bc768f1
c2cbbaf
924ced2
c2cbbaf
 
 
 
 
 
 
 
 
 
751271f
 
 
 
 
c2cbbaf
2b7d328
 
 
 
 
 
 
 
 
 
 
 
 
c2cbbaf
c22ad84
bc768f1
 
 
c2cbbaf
bc768f1
 
3a24180
 
 
 
 
 
bc768f1
 
0443ccc
 
 
 
 
 
 
3a24180
0443ccc
 
3a24180
bc768f1
 
 
 
 
 
6372ec1
 
 
 
c2cbbaf
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
### -------------------------------- ###
###            libraries             ###
### -------------------------------- ###
import gradio as gr
import numpy as np
import os
import tensorflow as tf

### -------------------------------- ###
###           model loading          ###
### -------------------------------- ###
model = tf.keras.models.load_model('model.h5')

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

## --------------------------------- ###
###          page description        ###
### -------------------------------- ###
title = "Cast parts: Deffective or Okay?"
description = "A Hugging Space demo created by datasith!"
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
- categories.txt
- model.h5 (TensorFlow/Keras)
- requirements.txt
- README.md
- defective.jpg (def_front example)
- okay.jpg (ok_front example)

The data used to train the model is available as a 
[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.

If you enjoy my work feel free to follow me here on HF and/or on:

- [GitHub](https://github.com/datasith)
- [Kaggle](https://kaggle.com/datasith)
- [Twitter](https://twitter.com/datasith)
- [LinkedIn](https://linkedin.com/in/datasith)

Either way, enjoy!
'''

### -------------------------------- ###
###        interface creation        ###
### -------------------------------- ###
samples = ['defective.jpeg', 'okay.jpeg']

def preprocess(image):
    img_grayscale = image[:,:,1]
    img_array = tf.keras.utils.img_to_array(img_grayscale)
    img_array = tf.expand_dims(img_array, 0)
    # image = np.array(image) / 255
    # image = np.expand_dims(image, axis=0)
    return img_array
  
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)
    predictions = model.predict(preprocess(image))
    scores = tf.nn.softmax(predictions[0])
    results = {}
    for idx, res in enumerate(scores):
        results[labels[idx]] = float(res)
    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()