不良图片识别并自动打码
检测指定文件夹下是否存在不适宜内容,如果存在就个图片打个马赛克。
可以用于自动内容审核、网站敏感内容管理、隐私保护、自动化内容过滤、家长控制等场景。
import os
import cv2
import numpy as np
from ultralytics import YOLO
from PIL import Image
# 配置参数
MODEL_PATH = "erax_nsfw_yolo11m.pt" # 你的 NSFW 识别模型路径
IMAGE_EXTENSIONS = (".jpg", ".jpeg", ".png", ".bmp") # 允许的图片格式
BLUR_KERNEL_SIZE = (45, 45) # 模糊程度,可调节
# 初始化 YOLO 模型
model = YOLO(MODEL_PATH)
def detect_nsfw(image_path):
"""检测图片中的 NSFW 内容,并返回需要模糊的区域"""
results = model(image_path) # 进行 NSFW 识别
image = cv2.imread(image_path)
has_nsfw = False # 记录是否检测到 NSFW
for result in results:
for box in result.boxes.xyxy: # 遍历检测到的 NSFW 区域
x1, y1, x2, y2 = map(int, box)
has_nsfw = True # 发现 NSFW 内容
# 对该区域进行模糊处理
region = image[y1:y2, x1:x2]
blurred = cv2.GaussianBlur(region, BLUR_KERNEL_SIZE, 0)
image[y1:y2, x1:x2] = blurred # 替换原始图像区域
return image, has_nsfw
def process_images_in_folder(root_folder):
""" 递归查找所有图片,检测并模糊 NSFW """
for foldername, _, filenames in os.walk(root_folder): # 遍历文件夹
for filename in filenames:
if filename.lower().endswith(IMAGE_EXTENSIONS): # 只处理图片
image_path = os.path.join(foldername, filename)
print(f"🔍 处理文件: {image_path}")
blurred_image, has_nsfw = detect_nsfw(image_path)
if has_nsfw:
print(f"🚨 发现 NSFW 内容,进行模糊处理...")
cv2.imwrite(image_path, blurred_image) # **直接覆盖原文件**
print(f"✅ 处理完成,已覆盖: {image_path}")
else:
print("✅ 未发现不正当内容,跳过")
# 运行检测
process_images_in_folder("images") # 请替换成你的图片文件夹路径
这段代码的主要功能是在一个文件夹内递归查找图片,并使用 YOLO 识别 NSFW(不适宜内容)区域,对这些区域进行模糊处理。
📌 代码功能分析
加载 YOLO 模型,用于识别 NSFW 内容。
遍历文件夹,查找所有 jpg/png/bmp 等格式的图片。
对每张图片进行 NSFW 检测,如果发现不适宜内容,则模糊处理。
处理后的图片直接覆盖原文件。
erax_nsfw_yolo11m.pt 是一个训练好的 NSFW 识别模型,用 YOLO 框架加载。
你需要确保这个模型文件在代码同级目录下,否则会报错。
这里可以下载这个模型,有能力的也可以自行训练:
https://huggingface.co/erax-ai/EraX-NSFW-V1.0
所需Python 依赖:
pip install ultralytics opencv-python numpy pillow
版权声明:
作者:José
链接:https://www.josejang.com/ai/321.html
来源:José's ⎝⏠⏝⏠⎠ Blog
文章版权归作者所有,未经允许请勿转载。
THE END
二维码
共有 0 条评论