Spaces:
Sleeping
Sleeping
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) | |