violence_api / app.py
ZELEFACK's picture
Update app.py
9e0361d verified
from io import BytesIO
import gradio as gr
import tensorflow as tf
import logging
import requests
import numpy as np
from PIL import Image
from tensorflow.keras.utils import CustomObjectScope
from tensorflow.keras.layers.experimental.preprocessing import RandomHeight
logging.basicConfig(
level=logging.WARNING,
format="%(asctime)s - %(levelname)s - %(message)s",
)
with CustomObjectScope({'RandomHeight': RandomHeight}):
model_0 = tf.keras.models.load_model('bestmodel.h5')
print("TensorFlow version:", tf.__version__)
print("GPU Available:", tf.config.list_physical_devices('GPU'))
# Configure TensorFlow to use memory growth
gpus = tf.config.experimental.list_physical_devices('GPU')
if gpus:
try:
for gpu in gpus:
tf.config.experimental.set_memory_growth(gpu, True)
except RuntimeError as e:
print(e)
def clean_url(input_string):
if "http" in input_string:
return input_string[input_string.find("http"):]
return input_string
def classify_image(inp):
# Convert to PIL Image if we have a numpy array
image = None
logging.warning("entree dans ckassify_image")
if isinstance(inp, np.ndarray):
image = Image.fromarray(inp)
logging.warning("1")
if isinstance(inp, str) :
logging.warning("2")
inp = clean_url(inp)
response = requests.get(inp)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
if isinstance(inp, str) and (inp.startswith("http://") or inp.startswith("https://")):
logging.warning("3")
response = requests.get(inp)
response.raise_for_status()
image = Image.open(BytesIO(response.content))
else:
logging.warning("4")
image = inp
# Resize image to 224x224
image = image.resize((224, 224), Image.Resampling.LANCZOS)
# Convert to numpy array and ensure correct shape
image_array = np.array(image)
# Handle grayscale images
if len(image_array.shape) == 2:
image_array = np.stack([image_array] * 3, axis=-1)
# Add batch dimension and ensure correct shape
inp = image_array.reshape((-1, 224, 224, 3))
# inp = inp.reshape((-1, 224, 224, 3))
prediction = model_0.predict(inp)
output = ""
if prediction[0][prediction.argmax()] < 0.80:
output = "bonne image"
elif prediction.argmax() == 0:
output = "Rifle violence"
elif prediction.argmax() == 1:
output = "guns violence"
elif prediction.argmax() == 2:
output = "knife violence"
elif prediction.argmax() == 3:
output = "image porno"
elif prediction.argmax() == 4:
output = "personne habillée"
else:
output = "tank violence"
return output
gr.Interface(
fn=classify_image, inputs=gr.Text(label="Url de l image"), outputs="text",live=True,title="API de détection des images violentes",
).launch(share=True)