使用open_nsfw鉴别色情图片(基于tensorflow)

一、背景

nsfw指“Not Suitable For Work”,就是含蓄的表达不宜浏览的内容。最近需要做一小部分关于色情图片识别的工作,就把最基础的工作内容记录下来。

二、现有方法

用于鉴别色情图片的现有方法基本有3种思路:

  1. 利用python的nonude模块直接识别 这个思路是我看一篇博客中的介绍:用 Python 鉴别色色的图片。这篇博客介绍的还是很详细的,这个模块的原理是根据计算暴露皮肤的百分比来判断的,超过15%就认为是。实现过程简单,直接导入模块就能使用,但是该模块已经有3年没有更新过了,识别结果只有“真”“假”两种情况,准确率比较低。
  2. 利用yahoo提供的open_nsfw模型及其拓展模型识别 yahoo提供了一个open_nsfw开源程序,链接:http://github.com/yahoo/open_nsfw,这个程序是用深度学习模型做的,主要是vgg,我没有深究里面的模型结构,看了下效果,对图片采用打分的方式,分数大于0.8就说明很有可能是了。目前来说,这个模型的效果和可移植性都非常高,因此我主要考虑这种方法。

当然,yahoo公布的这个模型是2年前做的了,到现在为止,已有很多人对此进行了拓展衍生。

三、利用yahoo的open_nsfw识别色情图片(基于tensorflow)

上面也提到了yahoo这个开源程序的问题,就是版本不对应。于是我就找基于tensorflow的模型,还好找到了。附上链接:https://github.com/mdietrichstein/tensorflow-open_nsfw https://gitee.com/zhangshengfu/NSFW-Python.git 使用第二个程序: 测试可以直接使用,下面直接上测试结果: 结果为: Python–>>result:[0.43040982 0.5695902 ],path:D:/PythonProject/NSFW-Python/testImages img.jfif 使用tf模型,适宜观看指数0.43,不适宜观看指数0.57 TFLite–>>result:[0.64222586 0.3577741 ],path:D:/PythonProject/NSFW-Python/testImages img.jfif 使用TFLITE模型,适宜观看指数0.64,不适宜观看指数0.35

四、分析

  1. 目前来看,只是识别是否色情图片这方面,已经做的挺好的了,但是个人感觉如果想提高识别效果,一方面需要人体关键点检测,另一方面,一些人体动作和眼神,表情识别也有助于做进一步的判断。
  2. 如果想要自己重头训练的话,github上倒是有一些开源数据集。。。。。。。。先给出两个链接地址: https://github.com/EBazarov/nsfw_data_source_urls https://github.com/alexkimxyz/nsfw_data_scraper

(目前)前者总计159种不同类别的色情图片,约158万张图片链接,后者总计6类,约22万张。可以考虑自己写脚本把这些图片爬出来。需要注意的就是很多图片的链接是来自reddit,tumblr的,需要翻墙。 04630835/article/details/87178385

经验分享 程序员 微信小程序 职场和发展