120

Akismet 在检测垃圾评论方面做得非常出色。但如今评论并不是垃圾邮件的唯一形式。如果我想要 akismet 之类的东西来自动检测社交网站上的色情图片,让用户上传他们的照片、头像等怎么办?

已经有一些基于图像的搜索引擎以及人脸识别的东西可用,所以我假设它不会是火箭科学,它可以完成。但是,我不知道这些东西是如何工作的,如果我想从头开始开发它应该如何去做。

我应该如何开始?

是否有任何开源项目可以解决这个问题?

4

25 回答 25

89

这实际上相当容易。您可以以编程方式检测肤色 - 色情图片往往有很多皮肤。这会产生误报,但如果这是一个问题,您可以传递通过实际审核检测到的图像。这不仅大大减少了版主的工作量,而且还为您提供了大量免费色情内容。这是双赢的。

#!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 个。这是一个相当高的误报率,但脚本的目标是相当谨慎,可以进一步调整。它适用于浅色、深色和亚洲肤色。

误报的主要弱点是棕色物体,如沙子和木头,当然它不知道“顽皮”和“漂亮”肉体之间的区别(如面部镜头)。

假阴性的弱点是没有太多裸露肉体的图像(如皮革束缚)、涂漆或纹身的皮肤、黑白图像等。

源代码和示例图像

于 2009-06-17T09:04:29.773 回答
69

这是 2000 年写的,不确定色情检测的最新技术是否已经进步,但我对此表示怀疑。

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

PORNsweeper 似乎有一定的能力将人的图片与非人的图片区分开来,只要图片是彩色的。在区分脏照片和干净照片方面不太成功。

在默认的中等敏感度下,如果人力资源部向客户发送一张新员工的图片,您有大约 50% 的机会获得它。如果你的妹妹给你发一张她六个月大的照片,它也很可能被拘留。

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

但 PORNsweeper 似乎只在一个部门达到了其规定的规格 - 检测实际色情内容。它在检测色情方面还算不错,但在检测干净图片方面却很糟糕。如果在不久的将来在这一领域没有取得重大进展,我也不会感到惊讶。

于 2009-04-03T10:35:03.187 回答
45

我宁愿允许用户报告不良图像。图像识别开发可能需要太多的精力和时间,并且不会像人眼那样准确。将审核工作外包要便宜得多。

看看:亚马逊机械土耳其人

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

于 2009-04-03T09:42:41.500 回答
15

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

有谁知道在哪里可以获得 java(或任何语言)实现的源代码?

那会摇滚。

一种称为 WISE 的算法具有 98% 的准确率,但误报率为 14%。所以你要做的是让用户标记 2% 的误报,如果一定数量的用户标记它,最好自动删除,并让版主查看 14% 的误报。

于 2009-12-05T23:20:49.037 回答
9

Nude.js基于De La Salle 大学的 Rigan Ap-apid的白皮书。

于 2010-11-21T16:12:50.940 回答
8

有软件可以检测色情的概率,但这不是一门精确的科学,因为计算机无法识别图片上的实际内容(图片只是网格上的一大组值,没有任何意义)。您可以通过举例来教计算机什么是色情,什么不是色情。这样做的缺点是它只能识别这些或类似的图像。

鉴于色情片的重复性,如果您以很少的误报训练系统,您就有很好的机会。例如,如果你用裸体人训练系统,它可能会将“几乎”裸体人的海滩图片标记为色情片。

类似的软件是最近问世的facebook软件。它只是专门针对面部的。主要原理是一样的。

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

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

于 2009-04-03T09:49:19.160 回答
5

答案很简单:可以肯定地说,在接下来的 20 年里这是不可能的。在此之前,我们可能会得到很好的翻译工具。上次我检查时,AI 人员在两张从稍微改变的角度拍摄的照片上难以识别同一辆车。看看他们花了多长时间获得足够好的 OCR 或语音识别。这些是识别问题,可以从字典中受益匪浅,尽管投入了数百万人工月,但仍远未找到完全可靠的解决方案。

话虽如此,您可以简单地添加“进攻性”?用户生成的竞争旁边的链接,并让 mod 交叉检查传入的投诉。

编辑:

我忘记了一些事情:如果您要实现某种过滤器,您将需要一个可靠的过滤器。如果您的解决方案 50% 正确,那么 4000 名具有良好图像的用户中有 2000 名将被阻止。期待愤怒。

于 2009-04-03T10:37:08.267 回答
5

2004年,台湾成功大学的一名研究生对此课题进行了研究,他对从网上下载的裸照进行检测的成功率达到了89.79%。这是他的论文的链接:基于肤色
的裸人图像检测研究是中文的,如果看不懂,可能需要翻译。

于 2013-10-16T14:02:08.577 回答
4

简短的回答:使用主持人;)

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

于 2009-04-03T09:42:31.173 回答
4

添加攻击性链接并存储违规图像的 md5(或其他哈希),以便将来自动标记。

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

于 2009-04-03T12:35:33.880 回答
2

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

一种方法是 1) 编写图像检测算法来确定对象是否是人。这可以通过对图像进行位掩码以检索它的“轮廓”并查看轮廓是否适合人体轮廓来完成。

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

这将要求您确定人体的裸体男人/女人轮廓必须如何以数字化格式显示(这可以通过与 OCR 图像识别算法相同的方式来实现)。

希望你玩得开心!:-)

于 2010-02-01T20:02:00.580 回答
2

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

于 2011-05-24T02:09:35.610 回答
1

我看过一个过滤色情图片的网络过滤应用程序,抱歉我不记得名字了。它很容易出现误报,但大多数时候它都在工作。

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

于 2009-04-03T10:01:43.640 回答
1

检测色情图片仍然是一项明确的人工智能任务,目前还非常理论化。

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

PS 真的很惊讶有多少人提出问题,假设软件和算法是万能的,甚至没有考虑他们想要的东西是否可以完成。他们是对硬件、底层编程和所有“背后的魔法”一无所知的新一代程序员的代表吗?

PS #2。我还记得时不时会发生某些情况,当人们自己无法确定一张照片是色情还是艺术品时,会被带到法庭上。即使在法庭裁决之后,仍有一半的人会认为该决定是错误的。上一次这种愚蠢的情况发生在最近,当时一个维基百科页面在英国被禁止,因为一张 CD 封面图片带有一些裸体。

于 2009-04-03T10:07:22.707 回答
1

我能想到的两个选项(尽管它们都不是以编程方式检测色情内容):

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

BrightCloud Web 服务 API非常适合这一点。它是一个 REST API,用于像这样进行网站查找。它包含一个非常大且非常准确的网络过滤数据库,其中一个类别“成人”已识别出超过 1000 万个色情网站!

于 2009-09-29T06:35:20.633 回答
1

我听说过使用非常简单但非常有效的算法的工具。该算法计算了颜色值接近某些预定义“皮肤”颜色的像素的相对数量。如果该数量高于某个预定义值,则图像被认为是色情/色情内容。当然,该算法会对特写人脸照片和许多其他事物产生误报结果。
由于您正在撰写有关社交网络的文章,因此会有很多带有大量肤色的“正常”照片,因此您不应该使用此算法来拒绝所有具有正面结果的照片。但是您可以使用它为版主提供一些帮助,例如将这些图片标记为更高的优先级,

于 2009-09-29T06:51:00.040 回答
1

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

于 2010-04-28T09:56:26.983 回答
0

查看文件名和任何属性。几乎没有足够的信息来检测甚至 20% 的顽皮图像,但一个简单的关键字黑名单至少可以检测到带有描述性标签或元数据的图像。20 分钟的编码获得 20% 的成功率并不是一件坏事,尤其是作为一个预筛选,它至少可以捕捉一些简单的代码,然后将其余部分交给主持人进行判断。

另一个有用的技巧当然是相反的,维护一个图像源白名单以允许无需审核或检查。如果您的大多数图片来自已知的安全上传者或来源,您可以直接接受它们。

于 2009-04-03T10:41:55.400 回答
0

今天我不会试图进一步定义我理解的那种简写描述[“硬核色情”]中包含的材料;也许我永远也无法理解地做到这一点。但我看到就知道了,而本案涉及的电影并非如此。

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

于 2009-12-05T23:24:33.257 回答
0

您可以在网上找到许多涉及此主题的白皮书。

于 2012-01-01T19:51:19.833 回答
0

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

就像上面有人说的那样,它不可能100%完成。会有这样的算法失败的情况。实际精度将取决于您的训练数据、神经网络的结构以及您将如何选择对训练数据进行聚类(阴茎、阴道、乳房等,以及这些数据的组合)。在任何情况下,我都非常有信心,对于明确的色情图像,这可以以高精度实现。

于 2013-01-19T12:13:15.887 回答
0

这是一个裸体检测器。我没试过。这是我能找到的唯一一个 OSS。

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

于 2013-08-07T16:25:45.263 回答
-1

用当今的知识,你不可能 100% 做到这一点(我会说 1-5% 可能是合理的)。你会得到更好的结果(比那些 1-5%)只需检查图像名称中与性相关的词:)。

@SO巨魔:如此真实。

于 2009-04-03T10:20:41.503 回答