Показ слишком большого обнаружения 'кожи' в программном обеспечении

Техника, описанная в этой статье Яна Робертсона , работает для меня.

Короче, быстрый и грязный пример:

 public abstract class AbstractDAO
 {
    /**
     * Method returns class implementing EntityInterface which was used in class
     * extending AbstractDAO
     *
     * @return Class
     */
    public Class returnedClass()
    {
        return (Class) getTypeArguments(AbstractDAO.class, getClass()).get(0);
    }

    /**
     * Get the underlying class for a type, or null if the type is a variable
     * type.
     *
     * @param type the type
     * @return the underlying class
     */
    public static Class getClass(Type type)
    {
        if (type instanceof Class) {
            return (Class) type;
        } else if (type instanceof ParameterizedType) {
            return getClass(((ParameterizedType) type).getRawType());
        } else if (type instanceof GenericArrayType) {
            Type componentType = ((GenericArrayType) type).getGenericComponentType();
            Class componentClass = getClass(componentType);
            if (componentClass != null) {
                return Array.newInstance(componentClass, 0).getClass();
            } else {
                return null;
            }
        } else {
            return null;
        }
    }

    /**
     * Get the actual type arguments a child class has used to extend a generic
     * base class.
     *
     * @param baseClass the base class
     * @param childClass the child class
     * @return a list of the raw classes for the actual type arguments.
     */
    public static  List> getTypeArguments(
            Class baseClass, Class childClass)
    {
        Map resolvedTypes = new HashMap();
        Type type = childClass;
        // start walking up the inheritance hierarchy until we hit baseClass
        while (!getClass(type).equals(baseClass)) {
            if (type instanceof Class) {
                // there is no useful information for us in raw types, so just keep going.
                type = ((Class) type).getGenericSuperclass();
            } else {
                ParameterizedType parameterizedType = (ParameterizedType) type;
                Class rawType = (Class) parameterizedType.getRawType();

                Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
                TypeVariable[] typeParameters = rawType.getTypeParameters();
                for (int i = 0; i < actualTypeArguments.length; i++) {
                    resolvedTypes.put(typeParameters[i], actualTypeArguments[i]);
                }

                if (!rawType.equals(baseClass)) {
                    type = rawType.getGenericSuperclass();
                }
            }
        }

        // finally, for each actual type argument provided to baseClass, determine (if possible)
        // the raw class for that type argument.
        Type[] actualTypeArguments;
        if (type instanceof Class) {
            actualTypeArguments = ((Class) type).getTypeParameters();
        } else {
            actualTypeArguments = ((ParameterizedType) type).getActualTypeArguments();
        }
        List> typeArgumentsAsClasses = new ArrayList>();
        // resolve types by chasing down type variables.
        for (Type baseType : actualTypeArguments) {
            while (resolvedTypes.containsKey(baseType)) {
                baseType = resolvedTypes.get(baseType);
            }
            typeArgumentsAsClasses.add(getClass(baseType));
        }
        return typeArgumentsAsClasses;
    }
  }

31
задан George Stocker 17 February 2009 в 18:44
поделиться

13 ответов

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

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

34
ответ дан 27 November 2019 в 21:23
поделиться

Я сомневаюсь, что там существует любое массовое ПО, которое может определить, загружает ли пользователь непослушную картинку. Ваш лучший выбор состоит в том, чтобы позволить пользователям отметить изображения как 'Взрослые Только' с кнопкой рядом с изображением. (Разъяснение: Я имею в виду пользователей кроме того, которые загрузили картинку - подобный тому, как сообщения могут быть отмечены наступление здесь на StackOverflow.)

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

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

21
ответ дан 27 November 2019 в 21:23
поделиться

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

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

11
ответ дан 27 November 2019 в 21:23
поделиться

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

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

Редактирование: для контакта с зернистыми изображениями Вы могли бы хотеть выполнить средний фильтр на изображении сначала и затем сократить количество цветов для сегментации изображения сначала, необходимо будет играть вокруг с настройками на большом наборе pre-classifed (взрослый или не) изображения и видеть, как значения ведут себя для получения удовлетворительного уровня обнаружения.

РЕДАКТИРОВАНИЕ: Вот некоторый код, который должен провести простой подсчет (не протестированный это, это - быстрый мэшап некоторого кода от здесь и rgb к 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);
37
ответ дан 27 November 2019 в 21:23
поделиться

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

15
ответ дан 27 November 2019 в 21:23
поделиться

Посмотрите оригинальную бумагу" Находящие Явные Люди " Fleck/Forsyth, опубликованным в ECCV. (Усовершенствованный).

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

6
ответ дан 27 November 2019 в 21:23
поделиться

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

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

5
ответ дан 27 November 2019 в 21:23
поделиться

Возможно, Дыхательный тест Порно был бы полезен - как сообщается относительно Slashdot.

1
ответ дан 27 November 2019 в 21:23
поделиться

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

3
ответ дан 27 November 2019 в 21:23
поделиться

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

1
ответ дан 27 November 2019 в 21:23
поделиться

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

А снабжают подсказкой на архитектуре выполнения этого:

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

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

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

3
ответ дан 27 November 2019 в 21:23
поделиться

CrowdSifter Dolores Labs могла бы добиться цели для Вас. Я прочитал их блог все время, когда они, кажется, любят статистику и краудсорсинг и любят говорить об этом. Они используют Mechanical Turk амазонки для большой их обработки и знают, как обработать результаты для вытаскивания правильных ответов из вещей. Проверьте их блог по крайней мере для наблюдения некоторых прохладных статистических экспериментов.

0
ответ дан 27 November 2019 в 21:23
поделиться

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

0
ответ дан 27 November 2019 в 21:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: