Spaces:
Running
Running
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(Textbox, image_path, Textbox2, Textbox3): | |
if Textbox3 == code: | |
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 | |
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') | |
Textbox2 = Textbox2.replace("[", "").replace("]", "").replace("'", "") | |
Textbox2 = Textbox2.split(",") | |
Textbox2_edited = [x.strip() for x in Textbox2] | |
Textbox2_edited = list(Textbox2_edited) | |
Textbox2_edited.append(Textbox) | |
messages = [ | |
{"role": "system", "content": content}, | |
] | |
for i in Textbox2_edited: | |
messages.append( | |
{"role": "user", "content": i} | |
) | |
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 | |
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) | |
messages.append( | |
{"role": "user", "content": Textbox}, | |
) | |
response = requests.post(host, json={ | |
"messages": messages, | |
"model": model_llm, | |
"temperature": 0.5, | |
"presence_penalty": 0, | |
"frequency_penalty": 0, | |
"top_p": 1 | |
}).json() | |
reply = response["choices"][0]["message"]["content"] | |
messages.append({"role": "assistant", "content": reply}) | |
output.append({"type": max_label, "prediction_value": rounded_value, "content": reply}) | |
return output | |
else: | |
return "Unauthorized" | |
user_inputs = [ | |
gr.inputs.Textbox(label="Textbox",type="text"), | |
gr.inputs.Image(), | |
gr.inputs.Textbox(label="Textbox2",type="text"), | |
gr.inputs.Textbox(label="Textbox3",type="password") | |
] | |
iface = gr.Interface( | |
fn=classify, | |
inputs = user_inputs | |
outputs=gr.outputs.JSON(), | |
title="Waste Classifier", | |
description="Upload an image to classify and get disposal instructions." | |
) | |
iface.launch() | |