import argparse import json from os import listdir from os.path import isfile, join, exists, isdir, abspath import gradio as gr import numpy as np import tensorflow as tf from tensorflow import keras import tensorflow_hub as hub IMAGE_DIM = 299 # required/default image dimensionality model = tf.keras.models.load_model("nsfw.299x299.h5", custom_objects={'KerasLayer': hub.KerasLayer},compile=False) # def load_images(image_paths, image_size, verbose=True): # ''' # Function for loading images into numpy arrays for passing to model.predict # inputs: # image_paths: list of image paths to load # image_size: size into which images should be resized # verbose: show all of the image path and sizes loaded # outputs: # loaded_images: loaded images on which keras model can run predictions # loaded_image_indexes: paths of images which the function is able to process # ''' # loaded_images = [] # loaded_image_paths = [] # if isdir(image_paths): # parent = abspath(image_paths) # image_paths = [join(parent, f) for f in listdir(image_paths) if isfile(join(parent, f))] # elif isfile(image_paths): # image_paths = [image_paths] # for img_path in image_paths: # try: # if verbose: # print(img_path, "size:", image_size) # image = keras.preprocessing.image.load_img(img_path, target_size=image_size) # image = keras.preprocessing.image.img_to_array(image) # image /= 255 # image # loaded_images.append(image) # loaded_image_paths.append(img_path) # except Exception as ex: # print("Image Load Failure: ", img_path, ex) # return np.asarray(loaded_images) def load_images(image): loaded_images = [] image = keras.preprocessing.image.array_to_img(image) image = image.resize((299, 299)) image = keras.preprocessing.image.img_to_array(image) image /= 255 loaded_images.append(image) return np.asarray(loaded_images) def classify_nd(model, nd_images, predict_args={}): # file_path = nd_images.filename img = load_images(nd_images) model_preds = model.predict(img, **predict_args) categories = ['drawings', 'hentai', 'neutral', 'porn', 'sexy'] probs = [] for i, single_preds in enumerate(model_preds): single_probs = {} for j, pred in enumerate(single_preds): single_probs[categories[j]] = float(pred) probs.append(single_probs) return probs def nsfw(image): image_preds = classify_nd(model, image) return image_preds demo = gr.Interface(fn=nsfw, inputs= gr.Image(type="pil"), outputs=["text"], title="") demo.launch(share=False)