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