Подтвердить что ты не робот

Отображение слишком большого количества "скинов" в программном обеспечении

Я создаю веб-сайт ASP.NET, где пользователи могут загружать фотографии сами. Ежедневно можно загружать тысячи фотографий. Одна вещь, которую мой босс попросил несколько раз, заключается в том, что есть какой-то способ, который мы могли бы обнаружить, если какая-либо из фотографий показывает слишком много "скинов" и автоматически перемещает флаг как "Только для взрослых", прежде чем редакторы сделают окончательное решение.

4b9b3361

Ответ 1

Лучше всего иметь дело с изображением в цветовом пространстве HSV (см. здесь для преобразования rgb-hsv). Цвет кожи практически одинаковый между всеми расами, а именно изменением насыщенности. Обращаясь к изображению в HSV, вы можете просто искать цвет кожи.

Вы можете сделать это, просто подсчитав количество пикселей в цветовом диапазоне, или вы можете выполнить область, растущую вокруг пикселя, чтобы рассчитать размер областей цвета.

Изменить: для обработки зернистых изображений вы можете сначала выполнить здесь и rgb to hsl здесь)

Bitmap b = new Bitmap(_image);
BitmapData bData = b.LockBits(new Rectangle(0, 0, _image.Width, _image.Height), ImageLockMode.ReadWrite, b.PixelFormat);
byte bitsPerPixel = GetBitsPerPixel(bData.PixelFormat);
byte* scan0 = (byte*)bData.Scan0.ToPointer();

int count;

for (int i = 0; i < bData.Height; ++i)
{
    for (int j = 0; j < bData.Width; ++j)
    {
        byte* data = scan0 + i * bData.Stride + j * bitsPerPixel / 8;

        byte r = data[2];
        byte g = data[1];
        byte b = data[0];

        byte max = (byte)Math.Max(r, Math.Max(g, b));
        byte min = (byte)Math.Min(r, Math.Min(g, b));

        int h;

        if(max == min)
            h = 0;
        else if(r > g && r > b)
            h = (60 * ((g - b) / (max - min))) % 360;
        else if (g > r && g > b)
            h = 60 * ((b - r)/max - min) + 120;
        else if (b > r && b > g)
            h = 60 * ((r - g) / max - min) + 240;


        if(h > _lowerThresh && h < _upperThresh)
            count++;
    }
}
b.UnlockBits(bData);

Ответ 2

Конечно, это не удастся для первого пользователя, который размещает крупный план лица кого-то (или руки, или ноги, или еще чего-то). В конечном счете, все эти формы автоматизированной цензуры потерпят неудачу, пока не произойдет реальный сдвиг парадигмы в способе распознавания объектов.

Я не говорю, что вы не должны пытаться это делать; но я хочу указать на эти проблемы. Не ожидайте идеального (или даже хорошего) решения. Он не существует.

Ответ 3

Я сомневаюсь, что существует любое готовое программное обеспечение, которое может определить, загружает ли пользователь непослушный снимок. Лучше всего позволить пользователям отмечать изображения как "Только для взрослых" с помощью кнопки рядом с изображением. (Уточнение: я имею в виду пользователей, отличных от тех, кто загрузил изображение - похоже на то, как сообщения могут быть помечены как оскорбительные здесь, в StackOverflow.)

Также рассмотрим этот обзор попытки сделать то же самое в отдельном продукте: http://www.dansdata.com/pornsweeper.htm.

Ссылка, украденная с сегодняшнего дня подкастом StackOverflow, конечно:).

Ответ 4

Мы не можем даже написать фильтры, которые обнаруживают грязные слова точно в блогах, и ваш босс просит для детектора порно? CLBUTTIC!

Ответ 5

Я бы сказал, что ваш ответ лежит в краудсорсинге. Это почти всегда работает и имеет тенденцию масштабироваться очень хорошо.

Не нужно включать некоторых пользователей в "админов" и придумывать разные разрешения - это может быть так просто, чтобы включить "неуместную" ссылку рядом с каждым изображением и сохранить счет.

Ответ 6

См. оригинальную статью " Поиск обнаженных людей" Флек/Форсайт, опубликованный в ECCV. (Advanced).

http://www.cs.hmc.edu/~fleck/naked.html

Ответ 7

Интересный вопрос с теоретической/алгоритмической точки зрения. Один из подходов к проблеме заключается в том, чтобы помечать изображения, содержащие большие области цвета кожи (как объясняет Trull).

Тем не менее, количество показанной кожи не является определяющим элементом офсайсивного изображения, а скорее местоположением кожи. Возможно, вы можете использовать распознавание лиц (поиск алгоритмов) для уточнения результатов - определить, насколько большие области кожи относительно лица, и если они принадлежат лицу (возможно, насколько это ниже).

Ответ 8

Я знаю, что Flickr или Picasa внедрили это. Я считаю, что подпрограмма называлась FleshFinder.

Совет по архитектуре:

Запустите это как службу Windows, отдельно от конвейера ASP.NET, вместо анализа изображений в реальном времени создайте очередь новых изображений, которые загружаются для работы службы.

Вы можете использовать обычные материалы System.Drawing, если хотите, но если вам действительно нужно обработать много изображений, было бы лучше использовать собственный код и высокопроизводительную графическую библиотеку, а P/вызывать подпрограмму с вашего обслуживание.

По мере того, как доступны ресурсы, обрабатывайте изображения в фоновом режиме и флага, которые подозрительны для просмотра редакторами, это должно сократить количество изображений для значительного обзора, а не раздражать людей, которые загружают изображения цветных домов с цветом.

Ответ 9

Я бы подошел к проблеме со статистической точки зрения. Получите кучу снимков, которые вы считаете безопасными, и кучу, которую вы не делаете (что сделает интересный день исследования), и посмотрите, что у них общего. Проанализируйте их все для цветового диапазона и насыщенности, чтобы увидеть, можете ли вы выбрать характеристики, которые все непослушные фотографии, и некоторые из них безопасны.

Ответ 10

Возможно, было бы полезно Porn Breath Test - как сообщается на Slashdot.

Ответ 11

Rigan Ap-apid представил документ на WorldComp'08 только в этом проблемном пространстве. Газета якобы здесь, но сервер отключал меня. Я присутствовал на презентации документа, и он рассказал о сопоставимых системах и их эффективности, а также о своем собственном подходе. Вы можете связаться с ним напрямую.

Ответ 12

Боюсь, я не могу не указать вам в правильном направлении, но я помню, как читал об этом, прежде чем это делалось. Это было в контексте людей, жалующихся на то, что детские фотографии были пойманы и помечены ошибочно. Если ничего другого, я могу дать вам надежду, что вам не придется изобретать колесо самостоятельно... Кто-то еще по этому пути!

Ответ 13

CrowdSifter Долорес Лаборатория может сделай трюк для тебя. Я читаю их блог все время, поскольку они, кажется, любят статистику и краудсорсинг, и любят говорить об этом. Они используют механическую турку amazon для большой части своей обработки и знают, как обрабатывать результаты, чтобы получить правильные ответы из вещей. Проверьте их блог, по крайней мере, чтобы увидеть некоторые интересные статистические эксперименты.

Ответ 14

Как уже упоминалось выше, Билл (и цитата из Craig google) статистические методы могут быть очень эффективными.

Два подхода, которые вы, возможно, захотите изучить:

  • Neural Networks
  • Многовариантный анализ (MVA)

Подход MVA состоял бы в том, чтобы получить "репрезентативную выборку" приемлемых изображений и неприемлемых изображений. Данные X будут представлять собой массив байтов из каждого изображения, Y будет назначен вами как 1 для неприемлемого и 0 для приемлемого. Создайте модель PLS, используя эти данные. Запустите новые данные против модели и посмотрите, насколько она предсказывает Y.

Вместо этого бинарного подхода можно иметь несколько Y (например, 0 = приемлемо, 1 = купальник/нижнее белье, 2 = порнографического)

Чтобы построить модель, вы можете посмотреть программное обеспечение с открытым исходным кодом или имеется ряд коммерческих пакетов (хотя они обычно не являются дешевыми)

Потому что даже лучшие статистические подходы не идеальны, идея, в том числе и обратная связь с пользователем, вероятно, будет хорошей идеей.

Удачи (и в худшем случае вы можете тратить время на сбор непослушных фотографий в качестве одобренной и оплачиваемой деятельности!)