Nudity-Detector / app.py
wylum's picture
Update app.py
41110fd verified
Raw
History Blame Contribute Delete
4.18 kB
import gradio as gr
from nudenet import NudeDetector
import cv2
import numpy as np
def circular_blur(image_path, detections, parts_to_blur):
image = cv2.imread(image_path)
for detection in detections:
label = detection['class']
if label in parts_to_blur:
x, y, width, height = map(int, detection['box'])
center_x, center_y = x + width // 2, y + height // 2
radius = int(min(width, height) / 2)
mask = np.zeros_like(image)
cv2.circle(mask, (center_x, center_y), radius, (255, 255, 255), -1)
#blurred_image = cv2.GaussianBlur(image, (51, 51), 50)
blurred_image = cv2.GaussianBlur(image, (201, 201), 200)
image = np.where(mask == 255, blurred_image, image)
blurred_image_path = 'blurred_' + image_path.split('/')[-1]
cv2.imwrite(blurred_image_path, image)
return blurred_image_path
def process(input_img, parts2blur):
detector = NudeDetector(model_path="640m.onnx", inference_resolution=640)
detections = detector.detect(input_img)
print(detections)
if len(parts2blur) == 0:
parts_to_blur = [
'FEMALE_GENITALIA_EXPOSED', 'MALE_GENITALIA_EXPOSED',
'FEMALE_BREAST_EXPOSED', 'BUTTOCKS_EXPOSED',
'MALE_BREAST_EXPOSED', 'ANUS_EXPOSED'
]
else:
parts_to_blur = parts2blur
blurred_image_path = circular_blur(input_img, detections, parts_to_blur)
return blurred_image_path
title = "Nudity Detector Vincent version 2.1"
theme = "Nymbo/Alyx_Theme"
with gr.Blocks() as demo:
with gr.Row():
with gr.Column():
input_image = gr.components.Image(type='filepath')
with gr.Column():
output_image = gr.components.Image(type='filepath')
with gr.Row():
submit_btn = gr.Button("submit", scale=1)
with gr.Row():
parts2blur = gr.CheckboxGroup(['FEMALE_GENITALIA_EXPOSED', 'MALE_GENITALIA_EXPOSED',
'FEMALE_BREAST_EXPOSED', 'BUTTOCKS_EXPOSED',
'MALE_BREAST_EXPOSED', 'ANUS_EXPOSED'], label="parts", info="Parts to Blur")
gr.Examples(
examples=[
[
"magazine_sample1.jpeg",
#"yolov10x",
#640,
#0.25,
#0.45,
],
[
"magazine_sample2.jpeg",
#"yolov10m",
#640,
#0.25,
#0.45,
],
[
"demo_sample1.jpg",
#"yolov10m",
#640,
#0.25,
#0.45,
],
[
"demo_sample2.jpg",
#"yolov10m",
#640,
#0.25,
#0.45,
],
[
"demo_sample3.jpg",
#"yolov10m",
#640,
#0.25,
#0.45,
],
[
"demo_sample4.jpg",
#"yolov10m",
#640,
#0.25,
#0.45,
],
[
"003071982_0144.jpg",
#"yolov10m",
#640,
#0.25,
#0.45,
],
],
fn=process,
inputs=[
input_image,
parts2blur,
#model_id,
#image_size,
#conf_threshold,
#iou_threshold,
],
outputs=[output_image],
cache_examples="lazy",
)
submit_btn.click(
fn=process,
inputs=[input_image, parts2blur],
outputs=[
output_image,
],
queue=False,
)
demo.queue().launch(share=True)