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


120

Akismet在检测垃圾邮件评论方面做得非常出色。但是,评论并不是当今垃圾邮件的唯一形式。如果我想要akismet这样的工具来自动检测社交网站上允许用户上传其照片,头像等的色情图片怎么办?

已经有一些基于图像的搜索引擎以及面部识别功能可用,因此我认为这不是火箭科学,可以做到。但是,我不知道这些东西是如何工作的,如果我想从头开始开发它,该如何处理。

我应该如何开始?

有没有正在进行的开源项目?


82
实际上,我想这听起来比火箭科学要难得多!我们已经有很多火箭弹,但是AFAIK没有这样的“色情
侦探

4
大声笑。有面部识别功能,但还没有用于生殖器和乳房识别的技术。倒霉。
乔恩·林贾普

11
色情是一个地理问题-此外,我敢肯定,有很多图片根本不显示生殖器或裸照,这在某些地方还是很硬核的。听起来像是高级AI的工作,而不是简单的算法。
Noam Gal

2
我偶然发现了这个实用程序,这让我想起了这个线程。想知道它是否有效?proofpronto.com/porn-detection-stick-by-paraben.html
Martin Smith,2010年

1
@ jm666,如果问题对您而言如此严重,并且您认为在过去两年中该领域的技术水平已有所改善,那么如何对被引用的骗子给予赏金呢?这样,您应该引起一些注意,甚至可能得到一些答案。
迈克尔·彼得罗塔

Answers:


69

这是在2000年撰写的,尚不确定色情侦探的最新状态是否已经提高,但是我对此表示怀疑。

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

只要图片是彩色的,PORNsweeper似乎就具有区分人的图片和非人的图片的能力。区分人的脏照片和干净的照片不太成功。

使用默认的中等敏感度,如果人力资源部发送了帐户中新员工的照片,则您有大约50%的机会得到它。如果您的妹妹给您发送了她六个月大的照片,则同样有可能被拘留。

指出一些有趣的错误(例如称蒙娜丽莎色情片)是合理的,只要它们代表了软件的行为即可。如果制造商承认他们的算法图像识别器会在15%的时间内掉球,那么当它确实很愚蠢时,就去取笑吧。

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


从那时起,色情侦查已经得到了发展。在对象识别/图像分类/计算机视觉方面有很多突破性的想法。2000对我来说就像石器时代。
马丁(Maarten)2013年

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

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

带有虚假负片的虚弱之处是图像上没有太多裸露的肤色(例如皮革束缚),涂有油漆或纹身的皮肤,黑白图像等。

源代码和示例图像


愿意发布您的20行Python概念证明吗?(-1)
bobobobo 2012年

不错,+ 1。有趣的是,规则表面(如地毯或冰箱表面)的图像显示皮肤很多。
bobobobo 2012年

6
剧透:图像样本中没有实际的裸露。
卢克

这也将木材视为皮肤。因为它具有完全相同的颜色,但纹理不同。更不用说肖像了。
Maarten 2013年

45

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

看看:Amazon Mechanical Turk

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


4
Amazon Mechanical Turk风格的网站可能有一个市场,但是专门研究此类主题的网站.... :)
Rich

6
Amazon Mechanical Turk可能要花钱。考虑到主题,您会认为有一个聪明的商业模式可以免费完成。
ANKUR

1
我认为这是一种非常不道德的做法。
中午丝绸

2
@Ankur哈哈!好想法。前往nic.com检查PornOrNot.com是否仍然可用。
佩卡

9
@Noon Silk为什么您觉得这是不道德的做法?
Mazatec


15

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

有谁知道从哪里获取Java(或任何语言)实现的源代码?

那会摇滚。

一种称为WISE的算法具有98%的准确率,但14%的误报率。因此,您要做的就是让用户标记2%的误报,理想情况下,如果有一定数量的用户标记它,则自动删除,并让主持人查看14%的误报。


您找到了算法。真是太好了。经常将源代码留作练习。毕竟,我们没有指定任何特定的编程语言,对吗?
伊恩(Ian)2010年


8

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

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

类似的软件是最近推出的facebook软件。它只是专门用于脸上。主要原理是相同的。

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

当然,这不仅限于色情,实际上更是一个极端案例。我认为尝试在图像中查找其他事物的系统更为常见;-)


1
人们为什么不赞成这个答案?
Patrick Cornelissen,2009年

因为它不包含算法,配方或参考之类的内容。
伊恩(Ian)2010年

7
因此,这不是一个有效的答案,无法解释用户提出的问题,即他实际上不可能实现什么目标?杜德(Dude),您可能会放松一些……
Patrick Cornelissen

它还做出了错误的声明“由于计算机无法识别图片上的实际内容”
Daveth3Cat 2013年

因为他们不能。您只能学会检测特定的图像,并且正面和负面案例的数据库越大越好,但是通常您将永远无法获得像人类一样准确的解决方案,因此您最终将获得大量的图像。错误肯定和否定。
Patrick Cornelissen

5

答案确实很简单:可以肯定地说,在未来二十年内将不可能。在此之前,我们可能会获得良好的翻译工具。我上次检查时,人工智能人员正在努力从角度稍有变化的两张照片中识别同一辆汽车。看一看他们花了多长时间才能获得足够的OCR或语音识别。这些是识别问题,可以从字典中受益匪浅,尽管要花费数百万的工时,但仍远远没有完全可靠的解决方案。

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

编辑:

我忘记了一些东西:如果要实现某种过滤器,则需要一个可靠的过滤器。如果您的解决方案正确率达到50%,则4000名拥有体面图像的用户中有2000名将被阻止。期待愤怒。


5

台湾国立成功大学的一名研究生于2004年对此问题进行了研究。在检测从Internet下载的裸照方面,他获得了89.79%的成功率。这是他论文的链接:基于肤色的裸体人物图像检测研究
是中文的,因此您可能需要翻译器,以防无法阅读。


4

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

长答案:我不认为有一个项目可以解决这个问题,什么是色情?仅腿,全裸,侏儒等。其主观。


3
问题是“以编程方式检测色情图片的最佳方法是什么?”,以编程方式...
Agusti-N,2009年

5
我知道这个问题,但是正如我说的那样,因为色情是主观的,所以没有100%准确的色情拦截器。主观不能与代码相关。1认为只是裸体,其他人认为其色情。更好的解决方案是具有“报告图像”按钮。与Koistya Navin .NET相同的想法
RvdK,2009年

1
“小东西等”?非圣贤,蝙蝠侠。
道格·麦克林

有像侏儒色情这样的东西。
克里斯·夏洛克

4

添加令人反感的链接并存储有问题的图片的md5(或其他哈希值),以便将来可以对其进行自动标记。

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


8
我对此表示怀疑。那里有太多的色情内容(一天中还会产生更多的色情内容),因此您两次看到同一张图片的几率(IMHO)几乎为零。
Vilx-

考虑一下浴缸女孩多久出现一次。它将被标记一次,然后其他所有人都可以避免。
rfusca

3
除非它被裁剪,调整大小,或刚打开和保存再次被上传前..
Blorgbeard超出

是的,我想到了:(嗯,这是一个想法
。– rfusca

1
比md5更好,许可IDée的TinEye。
东武

2

如果您确实有时间和金钱:

一种实现方法是:1)编写图像检测算法以发现物体是否为人类。这可以通过对图像进行位掩码以检索其“轮廓”并查看轮廓是否适合人体轮廓来完成。

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

这将要求您确定数字化格式的裸露的男性/女性轮廓看起来必须是什么样子(这可以通过OCR图像识别算法的工作方式来实现)。

希望你玩得开心!:-)


2

在我看来,主要障碍是定义“色情图片”。如果您可以轻松定义它,则可能会编写出行之有效的东西。但是,即使人类也无法同意什么是色情。应用程序如何知道?用户审核可能是您最好的选择。


1

我看过一个进行色情图片过滤的Web过滤应用程序,抱歉,我不记得这个名字了。然而,在大多数情况下,它很容易出现误报。

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


1
我也不记得这项研究-但它进行了边缘检测,并与看似外阴旋转或模糊的模式相匹配。从图像处理方面非常有趣。
吉姆

-1,这提供了评论,但没有给出实质性的解决方案。
布莱德·科赫

1

检测色情图像仍然是一项确定的AI任务,这在理论上还非常多。

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

PS真的感到惊讶的是,假设软件和算法是万能的,甚至没有考虑他们是否想要完成,有多少人提出问题。他们是不了解硬件,底层编程以及所有“魔术”的新一代程序员的代表吗?

PS#2。我还记得,有时会发生某些情况,当人们自己无法确定照片是色情的还是艺术品时,会被带到法院。即使在法院裁定之后,仍有一半的人会认为该判决是错误的。这种情况的最后一个愚蠢的情况是在最近,因为CD封面图像带有一些裸露内容,因此在英国禁止了Wikipedia页面。


1

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

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

1

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


1

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


我实际上已经看到了与使用中的系统类似的系统。它不够可靠,不能独自依靠,但是在适当的时候提醒主持人做得很好。它不是充分的证据,特别是如果此人仅覆盖一个小的暴露区域。该比率不能可靠地逆向工作。
蒂姆·波斯特


0

查看文件名和所有属性。几乎没有足够的信息来检测甚至20%的顽皮图像,但是一个简单的关键字黑名单至少可以检测到具有描述性标签或元数据的图像。20分钟的编码可以使成功率达到20%,这并不是什么坏事,尤其是在将其余的内容传递给主持人进行评审之前,预屏至少可以捕获一些简单的内容。

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




0

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

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



-1

借助当今的知识,您不可能100%做到这一点(我可能说可能是1-5%)。仅检查与性别相关的单词的图像名称,您将得到更好的结果(比那些1-5%)。

@SO Troll:如此。


-1,这提供了评论,但没有给出实质性的解决方案。
布拉德·科赫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.