File size: 3,057 Bytes
1ed4acb
74dec5e
 
 
 
816fe7b
1ed4acb
45af05b
 
 
22d404b
 
74dec5e
 
 
 
 
1ed4acb
74dec5e
 
 
 
 
 
 
 
 
 
e198e28
7c817a1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e198e28
7c817a1
 
74dec5e
 
 
 
 
 
c616b46
74dec5e
 
 
 
1688328
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
import gradio as gr
import numpy as np
import cv2 as cv
import requests
import time
import os

host = os.environ.get("host")
code = os.environ.get("code")
model_llm = os.environ.get("model")
content = os.environ.get("content")
state = os.environ.get("state")
data = None
model = None
image = None
prediction = None
labels = None

print('START')
np.set_printoptions(suppress=True)

data = np.ndarray(shape=(1, 224, 224, 3), dtype=np.float32)

with open("labels.txt", "r") as file:
    labels = file.read().splitlines()

def classify(image_path):
    try:
        output = []
        for i in output:
            image_data = np.array(image_path)
            image_data = cv.resize(image_data, (224, 224))
            image_array = np.asarray(image_data)
            normalized_image_array = (image_array.astype(np.float32) / 127.0) - 1
            data[0] = normalized_image_array
    
            # Load the model within the classify function
            import tensorflow as tf
            model = tf.keras.models.load_model('keras_model.h5')
    
            prediction = model.predict(data)
            
            max_label_index = None
            max_prediction_value = -1
    
            print('Prediction')
    
            for i, label in enumerate(labels):
                prediction_value = float(prediction[0][i])
                rounded_value = round(prediction_value, 2)
                print(f'{label}: {rounded_value}')
    
                if prediction_value > max_prediction_value:
                    max_label_index = i
                    max_prediction_value = prediction_value  # Update max_prediction_value
    
            if max_label_index is not None:
                max_label = labels[max_label_index].split(' ', 1)[1]
                print(f'Maximum Prediction: {max_label} with a value of {round(max_prediction_value, 2)}')
    
                time.sleep(1)
                print("\nWays to dispose of this waste: " + max_label)
                payload = [
                    {"role": "system", "content": "You are a helpful assistant."},
                    {"role": "user", "content": "Give me the steps to dispose of this waste in bullet points (5 max): " + max_label}
                ]
    
                response = requests.post(host, json={
                    "messages": payload,
                    "model": model_llm,
                    "temperature": 0.5,
                    "presence_penalty": 0,
                    "frequency_penalty": 0,
                    "top_p": 1
                }).json()

                reply = response["choices"][0]["message"]["content"]

                output.append({"type": max_label, "prediction_value": round(max_prediction_value, 2), "content": reply})
    
            return output

    except Exception as e:
        return f"An error occurred: {e}"

iface = gr.Interface(
    fn=classify,
    inputs=gr.inputs.Image(),
    outputs="text",
    title="Waste Classifier",
    description="Upload an image to classify and get disposal instructions."
)
iface.launch()