程序化检测色情图像的最佳方法是什么?

Akismet 在检测垃圾评论方面做得非常好。但是评论并不是当今垃圾邮件的唯一形式。如果我希望像 akismet 这样的东西能够自动检测到社交网站上的色情图片,从而允许用户上传他们的图片、头像等等,那会怎么样?

已经有一些基于图像的搜索引擎和人脸识别的东西可用,所以我假设这不会是火箭科学,它可以做到。然而,如果我想从头开始开发这些东西,我对它们是如何工作的以及我应该如何开发它们毫无头绪。

我该怎么开始呢?

是否有任何开源项目正在进行这方面的工作?

112751 次浏览

简短的回答: 使用版主;)

Long answer: I dont think there's a project for this cause what is porn? Only legs, full nudity, midgets etc. Its subjective.

我宁愿允许用户报告糟糕的图像。图像识别技术的发展可能需要花费太多的精力和时间,而且不会像人眼那样精确。把审核工作外包出去要便宜得多。

Take a look at: 亚马逊机械土耳其人

亚马逊机械土耳其人(MTurk)是亚马逊网络服务(Amazon Web Services)的一套产品之一。亚马逊网络服务是一个众包市场,它使计算机程序能够协调使用人类智能来执行计算机无法完成的任务。”

有一种软件可以检测色情的可能性,但这并不是一门精确的科学,因为计算机无法识别图片上的实际内容(图片只是网格上一大组没有意义的值)。你可以通过给出例子来告诉电脑什么是色情,什么不是。这样做的缺点是它只能识别这些或类似的图像。

考虑到色情作品的重复性,如果你训练这个系统时没有误报,那么你就有很好的机会。例如,如果你训练系统与裸体的人,它可能标记与“几乎”裸体的人的海滩图片作为色情太多。

一个类似的软件是最近推出的 Facebook 软件。只是专门针对人脸。主要原则是一样的。

从技术上讲,您可以实现某种利用贝叶斯过滤的特征检测器。如果特征检测器只是一个简单的检测器,它可能会寻找像肉色像素百分比这样的特征,或者只是计算当前图像与一组保存的色情图像的相似度。

这当然不仅限于色情,它实际上更多的是一个角落的情况。我认为更常见的是试图在图像中找到其他东西的系统; -)

我见过一个网页过滤应用程序,它做色情图片过滤,对不起,我不记得名字了。它很容易出现误报,然而大多数时候它是有效的。

我认为主要的技巧是检测“太多的皮肤在图片上:)

Detecting porn images is still a definite AI task which is very much theoretical yet.

通过添加一个按钮/链接“举报垃圾邮件/滥用”来收集集体力量和人类智慧。或者雇佣几个版主来完成这项工作。

附注: 真的很惊讶有那么多人问问题,假设软件和算法无所不能,甚至不考虑他们想要的是否可以实现。他们是那些不懂硬件、低级编程和所有那些“神奇背后”的新型程序员的代表吗?

附注2。我还记得,有时候人们自己无法决定一张照片是色情还是艺术品,这种情况会发生在法庭上。即使在法院做出裁决之后,仍有可能有一半的人认为判决是错误的。上一次这种愚蠢的情况发生在最近,当时维基百科的一个页面在英国被禁,因为一张 CD 封面图片上有一些裸露的内容。

There is no way you could do this 100% (i would say maybe 1-5% would be plausible) with nowdays knowledge. You would get much better result (than those 1-5%) just checking the image-names for sex-related-words :).

@ 太对了。

这篇文章写于2000年,不确定色情检测的技术水平是否有所提高,但我对此表示怀疑。

Http://www.dansdata.com/pornsweeper.htm

色情清洁工似乎有一些能力来区分图片的人从图片的东西不是人,只要图片是彩色的。它在区分人们的脏照片和干净照片方面不太成功。

使用默认的中等灵敏度,如果人力资源部发送一张帐户部新人的照片,你就有大约50% 的机会得到它。如果你的姐姐给你发了一张她六个月大的孩子的照片,这张照片同样可能被扣留。

只有指出一些有趣的错误才是公平的,比如把蒙娜丽莎的色情作品称为色情作品,如果它们代表了软件的行为的话。如果制造商承认他们的算法图像识别器有15% 的概率会出错,那么当它出错的时候取笑它就是愚蠢的。

但是“色情清洁工”似乎只在一个部门中达到了它所声明的标准——检测真正的色情内容

答案其实很简单: 可以很肯定地说,这在未来20年内是不可能的。在此之前,我们可能会得到很好的翻译工具。据我所知,人工智能的人正在努力从两张稍微改变了角度的照片中辨认出同一辆车。看看他们花了多长时间才得到足够好的 OCR 或语音识别。这些都是可以从字典中大大受益的认知问题,尽管要花费数百万人月的时间,但仍远未找到完全可靠的解决方案。

也就是说,你可以简单地加上一句“冒犯”链接旁边的用户生成的竞争,并有一个国防部交叉检查收到的投诉。

编辑:

我忘了一件事: 如果你要实现某种过滤器,你需要一个可靠的过滤器。如果您的解决方案正确率为50% ,那么4000个拥有像样图像的用户中的2000个将被阻止。等待暴行的到来。

查看文件名和任何属性。目前还没有足够的信息来检测哪怕是20% 的淘气图像,但是一个简单的关键字黑名单至少可以检测带有描述性标签或元数据的图像。为了20% 的成功率而花20分钟编写代码并不是一件坏事,尤其是作为一个预先筛选,至少可以在你把剩下的内容交给主持人评判之前捕捉到一些简单的内容。

另一个有用的技巧当然是相反的,维护一个图像来源的白名单,允许没有审核或检查。如果您的大部分图像来自已知的安全上传器或来源,您可以只是接受他们绑定。

添加攻击性链接并存储攻击性图像的 md5(或其他散列) ,以便将来能够自动标记。

如果有人拥有一个大型的 md5图像公共数据库以及作为 Web 服务运行的描述性标签,那该有多酷啊?很多色情作品都不是原创作品(因为现在拥有这些作品的人可能并没有制作它们) ,而且流行的图片往往会在不同的地方流传,所以这可能真的会有所不同。

我能想到两个选择(尽管它们都不是程序化的色情检测) :

  1. 阻止所有上传的图像,直到您的管理员看到它们。没有理由这需要很长时间: 你可以编写一些软件,每秒显示10张图片,几乎像电影一样——即使在这样的速度下,人类也很容易发现一张潜在的色情图片。然后你倒回这个软件,仔细看看。
  2. 添加通常的“将此图像标记为不适当”选项。

这其实相当简单。你可以通过程序来检测肤色——色情图片往往有很多肤色。这会产生假阳性,但如果这是一个问题,你可以通过实际的适度检测图像。这不仅大大减少了版主的工作量,而且还为你提供了大量免费的色情内容。这是双赢。

#!python
import os, glob
from PIL import Image


def get_skin_ratio(im):
im = im.crop((int(im.size[0]*0.2), int(im.size[1]*0.2), im.size[0]-int(im.size[0]*0.2), im.size[1]-int(im.size[1]*0.2)))
skin = sum([count for count, rgb in im.getcolors(im.size[0]*im.size[1]) if rgb[0]>60 and rgb[1]<(rgb[0]*0.85) and rgb[2]<(rgb[0]*0.7) and rgb[1]>(rgb[0]*0.4) and rgb[2]>(rgb[0]*0.2)])
return float(skin)/float(im.size[0]*im.size[1])


for image_dir in ('porn','clean'):
for image_file in glob.glob(os.path.join(image_dir,"*.jpg")):
skin_percent = get_skin_ratio(Image.open(image_file)) * 100
if skin_percent>30:
print "PORN {0} has {1:.0f}% skin".format(image_file, skin_percent)
else:
print "CLEAN {0} has {1:.0f}% skin".format(image_file, skin_percent)

此代码测量图像中心的皮肤色调。我测试了20张相对温和的“色情”图片和20张完全无害的图片。它标记了100% 的“色情”和20张干净图片中的4张。这是一个相当高的假阳性率,但脚本的目的是相当谨慎,可以进一步调整。它适用于浅色、深色和亚洲肤色。

假阳性的主要弱点是像沙子和木头这样的棕色物体,当然它不知道“顽皮的”和“漂亮的”肉体之间的区别(比如脸部照片)。

假底片的弱点是没有暴露太多肉体的图像(如皮革束缚) ,涂色或纹身的皮肤,黑白图像等。

源代码和示例图像

BrightCloud Web 服务 API非常适合这个。它是一个 RESTAPI,用于执行类似这样的网站查找。它包含一个非常大和非常准确的网络过滤数据库和一个类别,成人,有超过1000万色情网站确定!

我听说过一些工具,它们使用非常简单,但是非常有效的算法。该算法计算颜色值接近某些预定义的“皮肤”颜色的像素的相对数量。如果数量高于某个预定义的值,那么图像被认为是色情/色情内容。当然,这种算法会给出假阳性结果的特写脸照片和许多其他事情。
Since you are writing about social networking there will be lots of "normal" photos with high amount of skin colour on it, so you shouldn't use this algorithm to deny all pictures with positive result. But you can use it provide some help for moderators, for example flag these pictures with higher priority, so if moderator want to check some new pictures for pornographic content he can start from these pictures.

这是包含算法的 白皮书

Does anyone know where to get the source code for a java (or any language) implementation?

That would rock.

一种称为 WISE 的算法有98% 的准确率,但有14% 的假阳性率。所以你要做的就是让用户标记2% 的假阴性,理想情况下,如果有一定数量的用户标记它,就会自动删除,然后让版主查看14% 的假阳性。

我今天不会再试图 定义材料的种类 理解被包含在其中 简称[“铁杆粉丝”] 也许我可以 从来没有明智地做成 所以。但是当我看到它的时候,我知道它 这部电影涉及到这个 案子不是这样的。

美国最高法院法官 Potter Stewart,1964年

如果你真的有时间和金钱:

一种方法是: 1)编写一个图像检测算法来确定一个物体是否是人类。这可以通过位屏蔽图像来检索它的“轮廓”,并查看轮廓是否符合人类的轮廓。

2)数据挖掘大量的色情图片,并使用数据挖掘技术,如 c4算法或粒子群优化来学习检测匹配色情图片的模式。

这将需要你确定一个裸体的男人/女人的身体轮廓必须看起来像在数字化格式(这可以用同样的方式实现 OCR 图像识别算法的工作)。

祝你玩得开心! : -)

这个看起来很有希望。基本上,它们检测皮肤(通过识别人脸进行校准)并确定“皮肤路径”(即测量皮肤像素与人脸皮肤像素/皮肤像素的比例)。这车性能不错。 Http://www.prip.tuwien.ac.at/people/julian/skin-detection

Nude. js 基于德拉萨大学的 白皮书

在我看来,主要的障碍是定义一个“色情图像”。如果你可以很容易地定义它,你可能会写一些可行的东西。但即使是人类也无法就什么是色情达成一致。应用程序如何知道?用户审核可能是您最好的选择。

你可以在网上找到许多关于这个主题的 白皮书

这不是火箭科学。不再是了。它与人脸识别非常相似。我认为解决这个问题最简单的方法就是使用机器学习。既然我们在处理图像,我可以指向神经网络,因为这些似乎是首选的图像。你需要训练数据。你可以在互联网上找到大量的训练数据,但是你必须将图像裁剪到你想让算法检测到的特定部分。当然,你必须把问题分解成不同的身体部位,并为每个部位创建训练数据,这就是事情变得有趣的地方。

Like someone above said, it cannot be done 100% percent. There will be cases where such algorithms fail. The actual precision will be determined by your training data, the structure of your neuronal networks and how you will choose to cluster the training data (penises, vaginas, breasts, etc, and combinations of such). In any case I am very confident that this can be achieved with high accuracy for explicit porn imagery.

这是个裸体探测器,我还没试过,这是我能找到的唯一一个战略情报局的。

Https://code.google.com/p/nudetech

2004年,一位台湾国立成功大学的研究生就此课题做了一项研究。在检测网上下载的裸照时,成功率达到了89.79% 。这里是他论文的链接: 基于肤色的裸体人体图像检测方法研究 < br/> 这是中文的,所以你可能需要一个翻译,以防万一你不能阅读它。