classifier / app.py
tommy24's picture
Update app.py
4dbb024
raw
history blame
2.97 kB
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, text_input):
if text_input == code:
output = [] # Create an empty list for 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": rounded_value, "content": reply})
return output # Return the populated output list
else:
return "Unauthorized"
iface = gr.Interface(
fn=classify,
inputs=[gr.inputs.Image(), "text"],
outputs=gr.outputs.JSON(), # Output as JSON
title="Waste Classifier",
description="Upload an image to classify and get disposal instructions."
)
iface.launch()