代码之家  ›  专栏  ›  技术社区  ›  Raj

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

  •  120
  • Raj  · 技术社区  · 17 年前

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

    现在已经有了一些基于图像的搜索引擎和人脸识别工具,所以我认为这不是火箭科学,这是可以做到的。然而,我不知道这些东西是如何工作的,如果我想从头开始开发的话,我应该怎么做。

    我应该如何开始?

    这方面有没有开源项目?

    25 回复  |  直到 9 年前
        1
  •  89
  •   SpliFF    14 年前

    这其实相当容易。你可以通过编程检测肤色——色情图片往往有很多肤色。这将产生误报,但如果这是一个问题,您可以通过实际调节传递检测到的图像。这不仅大大减少了版主的工作量,还为你提供了大量免费的色情作品。这是双赢的。

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

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

    source code and sample images

        2
  •  69
  •   Community Mohan Dere    6 年前

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

    色情扫描器似乎有一定的能力区分人和非人的图片,只要图片是彩色的。它在区分人的脏照片和干净照片方面不太成功。

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

    但色情扫描器似乎只在一个部门达到了规定的规格——检测真实的色情。

        3
  •  45
  •   Konstantin Tarkus    12 年前

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

    看看: Amazon Mechanical Turk

    “那 亚马逊土耳其机器人 (MTurk)是亚马逊网络服务套件之一,这是一个众包市场,使计算机程序能够协调人类智能的使用,以执行计算机无法完成的任务。”

        5
  •  15
  •   Ura    14 年前

    whitepaper 包含算法。

    有人知道从哪里获得java(或任何语言)实现的源代码吗?

    那太棒了。

        6
  •  9
  •   Ura    14 年前

    Nude.js 基于 whitepaper 作者:德拉萨尔大学的里根·阿皮德。

        7
  •  8
  •   Peter G.    15 年前

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

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

    一个类似的软件是最近推出的facebook软件。它只是专门针对面部。主要原则是相同的。

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

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

        8
  •  5
  •   Thomasz    17 年前

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

    编辑:

        9
  •  5
  •   myang    12 年前

    2004年,台湾成功大学的一名研究生对这一课题进行了研究。他能够检测从互联网下载的裸体照片,成功率为89.79%。以下是他的论文的链接: The Study on Naked People Image Detection Based on Skin Color
    它是中文的,所以你可能需要一个翻译,以防你看不懂。

        10
  •  4
  •   RvdK    17 年前

        11
  •  4
  •   rfusca    17 年前

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

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

        12
  •  2
  •   Buhake Sindi Tesnep    16 年前

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

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

    这将要求您确定人体裸体男女轮廓在数字化格式下的外观(这可以通过OCR图像识别算法的工作方式实现)。

    希望你玩得开心!:-)

        13
  •  2
  •   Rimian    15 年前

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

        14
  •  1
  •   dr. evil    17 年前

    我见过一个网页过滤应用程序,它可以过滤色情图片,对不起,我记不起它的名字了。它很容易出现误报,但大部分时间都在工作。

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

        15
  •  1
  •   User    17 年前

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

    第2页。我还记得,在某些情况下,当人们自己无法决定一张照片是色情还是艺术作品时,这种情况会周期性地发生。即使在法庭规则之后,也有一半的人会认为这个决定是错误的。最近一次这种愚蠢的情况是,一个维基百科页面在英国被禁止,因为一张CD封面图片带有一些裸体特征。

        16
  •  1
  •   Rich    17 年前

    1. 阻止所有上载的图像,直到您的一位管理员查看它们为止。没有理由认为这需要很长时间:你可以编写一些软件,每秒显示10幅图像,几乎就像电影一样——即使以这种速度,人类也很容易发现潜在的色情图像。然后你在这个软件中倒带,仔细看看。
    2. 添加通常的“将此图像标记为不合适”选项。
        17
  •  1
  •   Chris Harris    16 年前

    BrightCloud web service API 这是完美的。这是一个RESTAPI,用于像这样进行网站查找。它包含一个非常大和非常准确的网页过滤数据库和一个类别,成人,有超过1000万色情网站确定!

        18
  •  1
  •   okutane    16 年前

    我听说过一些工具,它们使用非常简单但非常有效的算法。该算法计算了颜色值接近某些预定义“皮肤”颜色的像素的相对数量。如果该数量高于某个预定义值,则该图像被视为色情/色情内容。当然,该算法将为近距离人脸照片和其他许多东西提供假阳性结果。
    因为你在写关于社交网络的文章,会有很多“正常”的照片,上面有大量的肤色,所以你不应该用这个算法来否认所有有正面效果的照片。但是你可以使用它为版主提供一些帮助,例如用更高的优先级标记这些图片,所以如果版主想检查一些新图片中的色情内容,他可以从这些图片开始。

        19
  •  1
  •   alexsee75    16 年前

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

        20
  •  0
  •   SPWorley    17 年前

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

        21
  •  0
  •   Jason S    16 年前

    我今天不打算再进一步说明 定义材料的种类 理解在那里面被拥抱 速记说明[“核心” 永远不要在明白的事情上成功 所以但是当我看到它的时候我就知道了 这部影片涉及的电影 情况并非如此。

    United States Supreme Court Justice Potter Stewart, 1964

        22
  •  0
  •   Ura    14 年前

    你可以找到很多 whitepapers 在网上处理这个问题。

        23
  •  0
  •   Radu Simionescu    13 年前

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

    正如上面所说,这不可能百分之百地做到。在某些情况下,这种算法会失败。实际精度将由您的训练数据、神经网络的结构以及您将如何选择对训练数据进行聚类(阴茎、阴道、乳房等,以及这些数据的组合)决定。在任何情况下,我非常有信心,这可以实现与明确的色情图像的高精度。

        24
  •  0
  •   mikeslattery    13 年前

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

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

        25
  •  -1
  •   sabiland    17 年前

    用现在的知识,你不可能做到100%(我想说也许1-5%是合理的)。只需检查图片名称中与性相关的单词,你就会得到更好的结果(比那些1-5%)。

    @巨魔:真的。