PHP - 阻止上传的成人图像

时间:2010-01-06 03:25:44

标签: php image-processing

我们设置了一个产品管理系统,产品开发负责人可以上传产品图片,这些图片会立即显示在我们的网站上。

上周,当一个人离开工作时,他上传了一堆XXX评级的照片,并且网站上立即显示了一些内容。幸运的是,我们注意到并在几分钟内删除了它们。不过,那段时间足以震撼一些客户。

以下是我的问题:如何有效地分析和阻止此类图像上传?可以使用PHP中的任何库来完成吗?是否可以首先使用PHP?

非常感谢任何帮助。

编辑1:

经过一番挖掘,我发现了这个:

http://pikture.logikit.net/ (死链接)

之前是否有人使用过它,或者有任何意见?

12 个答案:

答案 0 :(得分:9)

实施图像预处理。如果有一个人上传这些内容(就像你暗示的那样),对其他人来说不应该太难看一看并点击每个人的“批准”。

它比使用任何库更便宜,更可靠。你无法将“成人”正式化。

答案 1 :(得分:5)

任何语言都是一个难题,图像处理问题非常困难。

关于这个问题有一些研究:

答案 2 :(得分:3)

没有可靠的方法来做到这一点。无论您使用何种自动化流程,都会产生误报和漏报。如果您愿意接受,可以查看Image Nudity Filter,它会根据skintone分析图像。然而,它也倾向于标记作为特写镜头的图像。

这种方法可能与关于用户历史的信息一起有效。如果他们突然上传了数百张图片(当他们在此之前平均每周两张图片时)并且大多数图片都会被标记,那么它可能会暂停这些上传,直到有人看到它们为止。

考虑到这一点,只需在短时间内上传大量图像(并引起网站管理员的注意),大部分时间都可能就足够了。

答案 3 :(得分:1)

possible虽然你会得到假阴性和误报。

更简单的是实施某种形式的审核制度,在任何事情发生之前需要得到其他人的批准。

答案 4 :(得分:1)

你即将走向防止色情的“肤色检测”之路。这是一个错误,因为任何解决方案,即使可能,也会非常昂贵,以便做对。

并且不适用于“阿凡达”角色的色情图片,例如: - )

你可以采取的两种方法(我更喜欢第一种方法)。

  1. 在被可信方清除之前,不要立即发布这些图像。
  2. 允许您的用户将其标记为具有攻击性并查看获得投票的用户。
  3. 我之所以喜欢第一个是因为第二个仍然允许公众看到图像,这几乎肯定会损害公司代表。

    你应该认真对待那个代表。我想起了我们多年前建立的用于测量滑水跳跃长度的系统。

    河的两边有三个站点,负责测量的人会将他们的目光指向他们认为滑雪者降落的位置(我想是六角测量)。

    这六个位置基本上是平均的(在移除异常值之后)以获得实际位置(因此长度),这全部由计算机计算并发送回基站。

    然而,正在传输该事件的电视台有一个人从屏幕上读取长度,然后手动将它们输入到他们自己的计算机中。当被告知我们可以自动化该过程时,他们明确表示他们允许将未经检查的数据发送给他们的观众(如果我们插入亵渎,我猜)。

    虽然我认为这有点偏执,但我能理解它。

答案 5 :(得分:1)

正如已经提出的那样,添加审核非常容易,但我认为在限制生产力方面存在一些犹豫,而令人沮丧的开发人员不得不等待第二眼。即使所有参与者都理解并且没有亲自接受,它仍然会令人讨厌:

a)因为主持人生病而且备用主持人正在开会,因此必须等待一两天的内容才能上线。

b)从项目中每小时左右被中断的人点击“批准”。

有时甚至技术都需要一些建议的官僚作风,需要接受它带来的麻烦,而且我认为绝对有办法将我提到的烦恼保持在最低限度。

说完所有这些之后,请记住这位经理的行为可能反映了他的终止。或者至少它是如何花的。也许另一个非技术性的管理解决方案就是在您知道有人处于危机位置时立即删除系统访问权限。

无论这个人是否已经提前两周通知他们,或者当天早上刚刚解雇了他们,他们应该有适度访问权限,或者根本不能访问任何公开或关键任务的内容。

大多数开发人员都非常努力地获得上级的信任,允许他们公开或直接将数据写入关键系统。但是,这种信任应该带有一个非常直接的退出政策条款。


关于LogiPik:

我从未使用它,但我只是尝试了他们的演示。我上传了以下内容(在谷歌上随机查找“关闭”:

http://www.ethereality.info/ethereality_website/paintings_drawings/new/portraits/elena_formal_portrait/closeup-3.jpg

它取回了以下内容:

  

评价为:色情完成25   秒

对我来说,这对于假阳性来说太慢了(特别是50美元的美国人)。

答案 6 :(得分:0)

我认为您无法保证任何软件都能100%准确地识别出这样的图像。

你需要有一个人来调节上传。不要在您的网站上立即显示它们。

答案 7 :(得分:0)

Trynt API有一个非常好/快的Nudity检测Web服务,但它似乎返回502标头ATM。

答案 8 :(得分:0)

使用当前的技术并没有完全可靠的解决方案,因此不要被暗示存在的营销所吸引。

在StackOverflow上查看此previous question

您可以将皮肤检测算法与预先调节相结合,以便将可疑问题图像引起人类主持人的注意。只是不要以为你可以跳过让人看到图像的步骤。

顺便说一下,贵公司的安全流程听起来有点弱。如果只有产品开发负责人应该能够做到这一点,那么另一名员工如何上传图片?确保存储密码并最小化对生产服务器的访问。

答案 9 :(得分:0)

答案 10 :(得分:0)

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

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

这是PHP中的一个示例,使用SDK:

TEV_Idz = 0.0018; TEV_TF = 0.012;
% Each row in a bar plot is its own series, so put the data on two rows.
% This can be created using TEV_data = diag([TEV_Idz, TEV_TF]); 
TEV_data = [TEV_Idz, 0; 
            0,       TEV_TF]; 
% Each column will be a different colour, plot them stacked to be central
TEV_plot = bar(TEV_data, 0.6, 'stacked');
grid on; ylim([0, max(TEV_data(:) + 0.002)]);
set(gca, 'yTickLabel',num2str(100.*get(gca,'yTick')','%g%%'));

% Insert legend, one element for each series
legend({'L','B'}, 'location', 'northoutside', 'orientation', 'horizontal')
% A better option might be to just label on the x axes and not have a legend:
% set(gca, 'xticklabels', {'L','B'})

% Plotting the value of each scalar on the top of the every bar graph.
% The diagonal entries of TEV_data is where the actual data is stored. 
% Use num of diagonal entries, and index (k,k) for diagonal.
for k = 1:numel(diag(TEV_data))
    text(k, TEV_data(k,k), num2str(100.*TEV_data(k,k),'%g%%'), ...
        'HorizontalAlignment', 'center', ...
        'verticalalignment', 'bottom')
end

输出将返回分类:

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

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

查看文档了解更多详情:https://sightengine.com/docs/#nudity-detection(免责声明:我在那里工作)

答案 11 :(得分:0)

我发现自己最近需要一个可以检测成人内容的系统。幸运的是,如今可以很准确地做到这一点。

我最终构建了this project,这是一个可以轻松部署到Herkou(或任何可以运行docker容器的东西)的API,并允许您为成人内容评分图像。

它基于open_nsfw的开源神经网络模型,该模型经过训练可以检测出不适合工作图像。上面的项目基本上是在open_nsfw之上的python API,可以部署了。