如何通过程序识别成人内容?

25
我目前正在为客户开发一个网站。它包括用户能够上传图片以在网站上的画廊中展示。
我们遇到的问题是,当用户上传一张图片时,显然需要对其进行验证,以确保它对网站是安全的(没有色情或露骨的图片)。然而我的客户不想手动接受每个被上传的图片,因为这会耗费时间并导致用户的图片不能立即在线上。
我使用PHP编写我的代码。如果需要,我可以更改为ASP.net或C#。有没有任何方法可以做到这一点?

7
你是在问PHP是否能识别色情内容?我的回答是不行 - George
2
不,那不是我想问的。 - Glen Robson
1
如何使用任何编程语言识别视频中的暴力? - prem30488
6个回答

31

2019更新

自2013年以来,许多事情都发生了变化,其中最重要的是机器学习。现在有许多库和API可用于程序检测成人内容:

Google Cloud Vision API使用Google用于安全搜索的相同模型。

NSFWJS使用TensorFlow.js,声称可以达到~90%的准确率,并在MIT许可下开源。

Yahoo有一个名为Open NSFW的解决方案,在BSD 2条款许可下发布。

2013回答

有一个名为nude.js的JavaScript库用于此,尽管我从未使用过它。 这里是它的使用演示

还有PORNsweeper

另一种选择是使用类似于Amazon Mechanical Turk的东西外包审核工作。 这是一种群体外包平台,它“使计算机程序协调使用人类智能来执行计算机无法执行的任务”。 因此,您基本上会为每个审核项目支付少量费用,并外包实际的人员来审核内容。

我想到的唯一其他解决方案是使图像由用户审核,其中用户可以标记需要审核的不当帖子/图片,如果没有人想手动审核它们,则可以在一定数量的标记后将其删除。

以下是有关该主题的一些其他有趣链接:


谢谢您的回复,我会研究nude.js和PORNsweeper。关于您评论中的后者,我将实现一个用户审核功能,允许用户标记他们认为不适当的图像。但是,我不能仅使用此方法,因为这将允许非法图像保存在我的服务器上。 - Glen Robson
没问题,我已经更新了我的答案,并为您提供了另一个可能的解决方案(亚马逊机械土耳其)。 - Brett Gregson
那看起来是个不错的想法,但现在我们需要将成本降到最低。再次感谢您提供的信息,我会看看自己能做些什么。 - Glen Robson
没问题。请告诉我们你最终选择了什么,很有趣看看你的解决方案是什么 :) - Brett Gregson

6
下面的例子可能无法给您100%准确的结果,但至少可以帮助您一些,并且可以直接使用。
<?php
$url = 'http://server.com/image.png';
$data = json_decode(file_get_contents('http://api.rest7.com/v1/detect_nudity.php?url=' . $url));

if (@$data->success !== 1)
{
    die('Failed');
}
echo 'Contains nudity? ' . $data->nudity . '<br>';
echo 'Nudity percentage: ' . $data->nudity_percentage . '<br>';

这是我的选择 - 不像其他答案中的付费API,它提供相对准确的结果(返回一个百分比以允许您排队潜在的错误结果),并且实现非常快速... - freestate
这个 API 的背后是谁? - Cocowalla

3

如果您正在寻找基于API的解决方案,您可能需要查看Sightengine.com

这是一种自动化解决方案,可检测图像和视频中的成人内容、暴力、名人等。

以下是使用SDK的PHP示例:

<?php
$client = new SightengineClient('YourApplicationID', 'YourAPIKey');

$output = $client>check('nudity')>image('https://sightengine.com/assets/img/examples/example2.jpg');

然后输出将返回分类结果: { "status": "success", "request": { "id": "req_VjyxevVQYXQZ1HMbnwtn", "timestamp": 1471762434.0244, "operations": 1 }, "nudity": { "raw": 0.000757, "partial": 0.000763, "safe": 0.999243 }, "media": { "id": "med_KWmB2GQZ29N4MVpVdq5K", "uri": "https://sightengine.com/assets/img/examples/example2.jpg" } } 查看文档以了解更多细节:https://sightengine.com/docs/#nudity-detection (免责声明:我在那里工作)

2

有一个免费的API可以检测成人内容(色情、裸露、不适宜工作场所)。

https://market.mashape.com/purelabs/sensitive-image-detection

我们已经在生产环境中使用它了,我认为它目前表现得非常好。但是有一些误检测,似乎他们更喜欢将图像标记为不安全,如果他们不确定。


现在它不能运作。你能否提供另一个免费的替代方案? - Adil Shinwari

0

微软Azure有一个非常酷的API叫做计算机视觉,您可以免费使用它(通过UI或编程方式),并且有大量文档,包括PHP文档

它具有一些惊人准确(有时幽默)的结果。

除了检测成人和“色情”材料外,它还可以阅读文本,猜测您的年龄,识别主要颜色等等。

您可以在azure.microsoft.com上尝试它。

“色情”图像的示例输出:

FEATURE NAME:               VALUE:
Description                 { "tags": [ "person", "man", "young", "woman", "holding",
                              "surfing", "board", "hair", "laying", "boy", "standing", 
                              "water", "cutting", "white", "beach", "people", "bed" ], 
                              "captions": [ { "text": "a man and a woman taking a selfie", 
                              "confidence": 0.133149087 } ] }
Tags                        [ { "name": "person", "confidence": 0.9997446 }, 
                              { "name": "man", "confidence": 0.9587285 }, 
                              { "name": "wall", "confidence": 0.9546831 }, 
                              { "name": "swimsuit", "confidence": 0.499717563 } ]
Image format                "Jpeg"
Image dimensions            1328 x 2000
Clip art type               0
Line drawing type           0
Black and white             false
Adult content               true
Adult score                 0.9845981
Racy                        true
Racy score                  0.964191854
Categories                  [ { "name": "people_baby", "score": 0.4921875 } ]
Faces                       [ { "age": 37, "gender": "Female",
                                "faceRectangle": { "top": 317, "left": 1554, 
                                                   "width": 232, "height": 232 } } ]
Dominant color background   "Brown"
Dominant color foreground   "Black"
Accent Color                #0D8CBE

0

这完全取决于您所需的准确度水平,简单的肤色检测(如nude.js)可能会在大样本集上获得60-80%的准确度,如果需要更高的准确度,比如90-95%,则需要一些具有不断演化模型的专业计算机视觉系统。对于后者,您可以查看http://clarifai.comhttps://scanii.com(我正在从事该领域)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接