以编程方式检测色情图片的最佳方法是什么?

Akismet在检测垃圾评论方面做得非常出色。 但是评论并不是现在垃圾邮件的唯一forms。 如果我想要像akismet这样的自动检测社交网站上的色情图片,允许用户上传他们的图片,头像等?

已经有一些基于图像的search引擎,以及面部识别的东西,所以我认为这不会是火箭科学,它可以做到。 但是,我不知道这些东西是如何工作的,如果我想从头开始,我该如何去做。

我该如何开始?

有没有开源项目呢?

这是2000年写的,不知道色情侦测的艺术状况是否已经提前,但我怀疑它。

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

PORNsweeper似乎有一些能力,以区别人的照片和非人的照片,只要照片是彩色的。 区分肮脏的人与干净的人不太成功。

默认情况下,如果人力资源发送“帐户”中新章节的图片,那么您有大约50%的获取机会。 如果你的妹妹给你发了一张六个月大的照片,那么她也有可能被拘留。

指出有趣的错误,比如称蒙娜丽莎色情片,如果它们代表了软件的行为,这是公平的。 如果制造商承认他们的algorithm图像识别器将会在15%的时间内丢掉球,那么当它确实是愚蠢的时候,取笑它。

但是PORNsweeper似乎只能在一个部门达到规定的标准 – 检测实际的色情内容。 在检测色情内容方面是中等的,但是在检测干净的图片方面很糟糕。 如果不在近期内在这个领域取得重大飞跃,我不会感到惊讶。

这实际上是相当容易的。 你可以通过程序检测肤色 – 色情图片往往有很多皮肤。 这会造成误报,但如果这是一个问题,您可以通过实际审核来传递图像。 这不仅大大减less了版主的工作,还给你很多免费的色情片。 这是双赢的。

#!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) 

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

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

虚假负面的弱点将是没有很多暴露的肉(像皮革奴役),油漆或纹身皮肤,黑白图像等图像。

源代码和示例图像

我宁愿让用户报告坏的图像。 图像识别开发可能花费太多的精力和时间,并不会像人眼那么精确。 外包这个调节工作要便宜得多。

看看: 亚马逊Mechanical Turk

Amazon Mechanical Turk (MTurk)是amazon web services套件之一,这是一个众包市场,使计算机程序能够协调使用人类智能来执行计算机无法完成的任务。

  • 成人图像分类和过滤的视觉词袋模型
  • 以编程方式检测色情图片的最佳方法是什么?
  • 色情检测/色情清除软件简介
  • 色情数字图像的检测 (2011!)

繁荣! 这是包含该algorithm的白皮书 。

有没有人知道在哪里得到一个Java(或任何语言)实施的源代码?

那会摇摆。

一种名为WISE的algorithm具有98%的准确率,但是14%的误报率。 因此,您要做的是让用户标记2%的错误否定,理想情况下,如果有一定数量的用户将其标记为自动移除,并让主持人查看14%的误报。

Nude.js基于德拉萨尔大学Rigan Ap-apid的白皮书 。

有一些软件可以检测到色情的可能性,但这不是一门精确的科学,因为电脑无法识别图片上的实际情况(图片只是一个网格上的一大组值,没有任何意义)。 你可以教电脑什么是色情,什么不是通过举例。 这具有只能识别这些或类似图像的缺点。

考虑到色情的重复性,如果你对系统进行几乎误报的训练,你就有很好的机会。 例如,如果你用裸体人训练这个系统,它可能会以“几乎”裸体的人将沙滩的照片标记为色情。

一个类似的软件是最近出来的Facebook软件。 这只是专门面对。 主要原理是一样的。

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

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

答案很简单:在未来的二十年里,这是不可能的。 在此之前,我们可能会得到很好的翻译工具。 上次我检查的时候,大家都在努力从稍微改变angular度拍摄的两张照片中找出同一辆车。 看看他们花了多长时间才能获得足够好的OCR或语音识别。 这些都是可以从字典中受益的识别问题,尽pipe有数百万人的投入,但仍然远远没有完全可靠的解决scheme。

这就是说你可以简单地添加一个“攻势?” 链接旁边的用户生成竞争,并有一个模块交叉检查传入的投诉。

编辑:

我忘了一些事情:如果你要实施某种filter,你需要一个可靠的filter。 如果你的解决scheme是50%的权利,4000名用户有正面的图像2000会被阻止。 期待一个愤怒。

台湾成功大学研究生于2004年对此进行了研究,从互联网上下载裸照图片的成功率达到89.79%。 这里是他的论文的链接: 基于肤色的裸体人脸图像检测研究
这是中文,所以你可能需要一个翻译,以防你看不懂。

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

长答案:我不认为有这个项目的原因什么是色情? 只有腿,全裸,侏儒等主观。

添加一个攻击性的链接,并存储有问题的图像的MD5(或其他哈希),以便将来可以自动标记。

如果有人拥有一个大型的图像md5公共数据库以及作为web服务运行的描述性标签,会有多酷? 很多色情作品并不是原创作品(现在的人不大可能做到),stream行的图像往往会飘浮在不同的地方,所以这真的可以有所作为。

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

一种方法是通过1)写一个图像检测algorithm,以找出一个对象是否是人类。 这可以通过掩蔽图像来检索它的“轮廓”并查看轮廓是否适合人体轮廓来完成。

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

这将要求您确定裸体男人/女人的身体轮廓如何以数字化格式(这可以通过OCR图像识别algorithm的相同方式实现)来看待。

希望你玩得开心! 🙂

在我看来,主要障碍是定义一个“色情图片”。 如果你可以很容易地定义它,你可以写一些可行的东西。 但即使是人类也不能同意什么是色情。 应用程序将如何知道? 用户审核可能是您最好的select。

我见过一个networking过滤应用程序,它做了色情图片过滤,对不起,我不记得名字。 然而,大部分时间都在工作,这很容易出现误报。

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

检测色情图片仍然是一个非常理论化的明确的AI任务。

通过添加button/链接“报告垃圾邮件/滥用”来收集集体力量和人类智慧。 或者聘请几个主持人来完成这项工作。

PS真的很惊讶有多less人提出问题,假设软件和algorithm是全能的,甚至没有考虑他们想要做什么。 他们是那些对硬件,低级编程和所有“魔术背后”毫无了解的新一代程序员的代表吗?

PS#2。 我还记得,周期性地发生了一些情况,当人们自己不能决定一张图片是色情还是艺术被送上法庭。 即使在法庭裁决之后,也有一半的人会认为这个决定是错误的。 这种types的最后一个愚蠢的情况是,当维基百科的一个页面在英国被禁止的时候,因为有一个裸露的CD封面图片。

我可以想到的两个选项(虽然他们都没有以编程方式检测色情):

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

BrightCloud Web服务API是完美的。 这是一个REST API来做网站查询就像这样。 它包含一个非常大,非常准确的网页过滤数据库和其中的一个类别,成人,已确定超过10M的色情网站!

我听说过使用非常简单但相当有效的algorithm的工具。 该algorithm计算相对于具有某些预定义“肤色”颜色的颜色值的像素量。 如果这个数量高于一些预定义的值,那么图像被认为是色情/色情内容。 当然,这种algorithm会给特写脸部照片等许多事情带来假阳性结果。
由于您正在撰写关于社交networking的文章,因此会出现大量“正常”的照片,其中包含大量的肤色,因此您不应该使用此algorithm来拒绝所有带有肯定结果的照片。 但是您可以使用它为版主提供一些帮助,例如将这些图片标记为更高优先级,所以如果版主想要检查一些新的图片是否有色情内容,他可以从这些图片开始。

这个看起来很有希望 基本上他们检测皮肤(通过识别面部进行校准)并确定“皮肤path”(即,测量皮肤像素与脸部皮肤像素/皮肤像素的比例)。 这有不俗的performance。 http://www.prip.tuwien.ac.at/people/julian/skin-detection

看看文件名和任何属性。 即使有20%的调皮图像也没有足够的信息来检测,但是一个简单的关键字黑名单至less可以检测到带有描述性标签或元数据的图像。 对20%的成功率进行2​​0分钟的编码并不是什么坏事,特别是作为一个预先筛选,至less可以抓住一些简单的预筛选,然后再将其余部分传给主持人进行判断。

另一个有用的技巧是相反的,保持图像源的白名单允许没有审查或检查。 如果大部分图片都来自已知的安全上传者或来源,则可以直接接受。

我今天不会再试图进一步定义我所理解的那种在这种简短的描述中所包含的内容[“硬核色情”]; 也许我不可能成功地明白这样做。 但是当我看到它的时候我就知道了,这个案件涉及的电影不是这样的。

– 美国最高法院大法官波特·斯图尔特,1964年

你可以在网上find许多处理这个问题的白皮书 。

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

就像上面说的那样,不可能100%完成。 会有这种algorithm失败的情况。 实际精度将取决于您的训练数据,神经元networking的结构以及如何select聚类训练数据(阴茎,阴道,乳房等,以及这些的组合)。 在任何情况下,我都非常有信心,这可以实现高清晰度色情图像的准确性。

这是一个裸露的探测器。 我没有尝试过。 这是我能find的唯一的OSS。

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

现在的知识不可能做到这一点100%(我可能会说1-5%是合理的)。 你会得到更好的结果(比1-5%)只是检查图像名称性相关的话:)。

@SO巨魔:真的。