加了很多QQ群之后,尤其是二次元QQ群,每天会收到大量的图片,很快QQ的data文件夹就会变得非常庞大。作为一个仓鼠党,二次元小垃圾丢了又可惜,可以里边又混入了大量的乱柒芭蕉的各种玩意,各种梗图、表情包、截图等,花时间整理是不可能整理的。那么有没有什么好办法呢?那么就回到我们的标题:基于YOLOv8和deepdanbooru的图片识别分类

首先介绍一下YOLO模型:YOLO(You Only Look Once)是实时目标检测模型,核心是 “单阶段检测”,无需分区域预测,能一次性输出目标位置与类别。特点就是:轻量化,一般纯CPU计算都能把识别速度压缩到1-2ms内,识别准确率也非常高。

熟悉二次元的朋友们对Danbooru可能会有了解,简单说就是一个二次元的图片网站。而Deepdanbooru 是基于 Danbooru 数据训练的二次元图片标签生成模型,核心功能是自动识别动漫角色、画风、服饰、场景等元素并打上精准标签。它模型体积小、资源占用低,即便在日常办公电脑上,也能高效处理批量二次元图片,快速生成标签。一般一张图片的处理速度在0.5s左右。

理论存在,开始整活:

1. 图片移动工具 0.move_images.py

- 功能: 筛选并移动尺寸大于800x800像素的图片

- 用途: 从大量图片中筛选出高质量的大尺寸图片

- 特点: 自动处理重名文件,支持多种图片格式

由于新版QQ_nt把图片统一放到了Tencent Files\Your-QQ-Number\nt_qq\nt_data\Pic 文件夹中,所以只需要简单的遍历每个文件夹,然后筛选出图片尺寸大一点的图片到同一个文件夹即可。

2. 图片去重工具 1.deduplicate_images.py

- 功能: 基于感知哈希算法检测并删除重复图片

- 用途: 清理重复的图片文件,节省存储空间

- 特点: 将图片压缩为固定尺寸后计算哈希

由于新版QQ_nt可能会把图片分为几个清晰度分别保存_0和_720后缀的文件,为了防止重复,可以采取去重算法,对图片进行去重操作

3. 单色背景筛选工具 2.filter_monochrome_pics.py

- 功能: 检测并筛选黑白单色的图片

- 用途: 筛选剔除黑白单色的文档等图片

- 特点: 可调节黑、白色阈值、色调宽容度等参数

在图片量非常巨大的情况下,可以先按照简单的特征,使用基础的算法,用最快的速度先来筛选掉一部分图片。

4. 二次元图片筛选工具 3.anime_image_filter_with_config.py

- 功能: 使用YOLO和DeepDanbooru模型识别二次元图片

- 用途: 从混合图片中筛选出动漫风格的图片

- 特点:

- 图形化界面操作

- 支持模型配置保存和加载

- 实时预览处理结果

- 详细的日志记录

这一步就进入到正式的图像识别了,YOLO采用的模型是YOLOv_animeface,专为识别二次元人脸训练的模型,可以有效识别二次元人体特征和人脸,主要是非常高效;

可以选择是否开启deepdanbooru筛选,deepdanbooru筛选要稍慢些,一张图片0.5s左右,基于一系列关键tag匹配度,来判断图片是否属于二次元图片。

DEEP_DANBOORU_TAGS: List[str] = [
    "anime", "cartoon", "manga", "character",
    "illustration", "2d", "animation", "figure", "Game_CG",
    "anime_style", "manga_style", "digital_art", "drawing", "sketch", "colorful",
    "anime_character", "manga_character", "anime_girl", "anime_boy", "cartoon_character"
]

5. NSFW内容检测工具 4.nsfw_image_sorter_gui.py)

- 功能: 使用ONNX模型检测图片的NSFW内容

- 用途: 自动分类正常和不适当图片

- 特点:

- 图形化界面操作

- 支持自动下载模型和配置文件

- 可调节检测阈值

- 实时进度显示和日志记录

- 自动创建必要的目录结构

作为一个正直的人,我们一定不能接受不适当的图片出现在我们的收藏里,所以我们要把它们筛选出来剔除掉。此处用到的是onnx-community/nsfw_image_detection-ONNX模型,该模型可以有效识别图片是否含有不适宜内容,识别准确率超过9成。

最终,我们就通过一系列大浪淘沙,留下了自己想要的图片收藏~(虽然收藏了也不会去看❌)