¿Cuál es la mejor forma de detectar imágenes pornográficas mediante programación? [cerrado]


120

Akismet hace un trabajo increíble en la detección de comentarios no deseados. Pero los comentarios no son la única forma de spam en estos días. ¿Qué pasa si quisiera algo como akismet para detectar automáticamente imágenes pornográficas en un sitio de redes sociales que permite a los usuarios cargar sus fotos, avatares, etc.?

Ya hay algunos motores de búsqueda basados ​​en imágenes, así como material de reconocimiento facial disponible, así que supongo que no sería ciencia espacial y podría hacerse. Sin embargo, no tengo ni idea de cómo funcionan esas cosas y cómo debo hacerlo si quiero desarrollarlas desde cero.

¿Cómo debo empezar?

¿Hay algún proyecto de código abierto para esto?


82
En realidad, diría que suena mucho más difícil que la ciencia espacial. Ya tenemos muchos cohetes, pero AFAIK no hay tal "detector de pornografía" :)
GaZ

4
LOL. Hay reconocimiento facial, pero todavía no hay tecnología para el reconocimiento genital y mamario. Mala suerte.
Jon Limjap

11
La pornografía es una cuestión de geografía; además, estoy seguro de que hay muchas imágenes que no muestran genitales o desnudez en absoluto, lo que se consideraría bastante duro (nuevamente, en algunos lugares). Parece un trabajo para una IA avanzada, no un simple algoritmo.
Noam Gal

2
Me encontré con esta utilidad que me hizo recordar este hilo. ¿Me pregunto si funciona? proofpronto.com/porn-detection-stick-by-paraben.html
Martin Smith

1
@ jm666, si el problema es tan serio para usted, y cree que el estado del arte en esta área ha mejorado en los últimos dos años, ¿qué tal otorgar una recompensa por el engañado al que se hace referencia? Debería llamar la atención, y tal vez algunas respuestas, de esa manera.
Michael Petrotta

Respuestas:


69

Esto fue escrito en 2000, no estoy seguro de si el estado del arte en la detección de pornografía ha avanzado en absoluto, pero lo dudo.

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

PORNsweeper parece tener cierta capacidad para distinguir imágenes de personas de imágenes de cosas que no son personas, siempre que las imágenes sean en color. Tiene menos éxito en distinguir las imágenes sucias de personas de las limpias.

Con la sensibilidad media predeterminada, si Recursos Humanos envía una imagen del nuevo capítulo en Cuentas, tiene aproximadamente un 50% de posibilidades de obtenerla. Si su hermana le envía una foto de su bebé de seis meses, es igualmente probable que la detengan.

Es justo señalar errores divertidos, como llamar pornografía a la Mona Lisa, si son representativos del comportamiento del software. Si los creadores admiten que su reconocedor algorítmico de imágenes dejará caer la pelota el 15% de las veces, entonces burlarse de él cuando hace exactamente eso es una tontería.

Pero PORNsweeper solo parece estar a la altura de sus especificaciones declaradas en un departamento: detección de pornografía real. Es medio decente para detectar pornografía, pero es malo para detectar imágenes limpias. Y no me sorprendería que no se hicieran grandes avances en esta área en un futuro próximo.


Por qué la detección de pornografía ha avanzado desde entonces. Ha habido muchas interrupciones en el reconocimiento de objetos / clasificación de imágenes / visión por computadora. 2000 me parece la edad de piedra.
Maarten

89

En realidad, esto es bastante fácil. Puede detectar tonos de piel mediante programación, y las imágenes pornográficas tienden a tener mucha piel. Esto creará falsos positivos, pero si esto es un problema, puede pasar las imágenes detectadas mediante la moderación real. Esto no solo reduce en gran medida el trabajo de los moderadores, sino que también te brinda mucho porno gratis. Es ganar-ganar.

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

Este código mide los tonos de piel en el centro de la imagen. He probado 20 imágenes "pornográficas" relativamente mansas y 20 imágenes completamente inocentes. Marca el 100% del "porno" y 4 de las 20 imágenes limpias. Esa es una tasa bastante alta de falsos positivos, pero el guión pretende ser bastante cauteloso y podría ajustarse aún más. Actúa en tonos de piel claros, oscuros y asiáticos.

Sus principales debilidades con los falsos positivos son los objetos marrones como la arena y la madera y, por supuesto, no conoce la diferencia entre la carne "traviesa" y la "agradable" (como las fotos en la cara).

La debilidad con los falsos negativos serían imágenes sin mucha carne expuesta (como bondage de cuero), piel pintada o tatuada, imágenes en blanco y negro, etc.

código fuente e imágenes de muestra


¿Quiere publicar su prueba de concepto de Python de 20 líneas? (-1)
bobobobo

Nada mal, +1. Curiosamente, las imágenes de superficies regulares (como alfombras o superficies de frigoríficos) muestran una gran cantidad de piel.
bobobobo

6
Spoiler: No hay desnudez real en las muestras de imágenes.
Luc

Esto también considerará la madera como piel. Porque tiene exactamente el mismo color, pero diferente textura. Por no hablar de los retratos.
Maarten

45

Prefiero permitir que los usuarios informen sobre malas imágenes. El desarrollo del reconocimiento de imágenes puede requerir demasiado esfuerzo y tiempo y no será tan preciso como los ojos humanos. Es mucho más barato subcontratar ese trabajo de moderación.

Eche un vistazo a: Amazon Mechanical Turk

" Amazon Mechanical Turk (MTurk) es uno de los paquetes de Amazon Web Services, un mercado de crowdsourcing que permite a los programas de computadora coordinar el uso de la inteligencia humana para realizar tareas que las computadoras no pueden hacer".


4
Probablemente haya un mercado para un sitio web al estilo de Amazon Mechanical Turk, pero uno que se especialice en este tipo de temas .... :)
Rich

6
Amazon Mechanical Turk probablemente cuesta dinero. Dado el tema, pensaría que existe un modelo de negocio inteligente en el que puede hacer esto de forma gratuita.
Ankur

1
Creo que este es un enfoque bastante poco ético.
Mediodía Silk

2
@Ankur LOL! Gran idea. Dirígete a nic.com para comprobar si PornOrNot.com todavía está disponible.
Pekka

9
@Noon Silk, ¿por qué cree que este es un enfoque poco ético?
Mazatec


15

¡AUGE! Aquí está el documento técnico que contiene el algoritmo.

¿Alguien sabe dónde obtener el código fuente para una implementación de Java (o cualquier idioma)?

Eso sería genial.

Un algoritmo llamado WISE tiene una tasa de precisión del 98% pero una tasa de falsos positivos del 14%. Entonces, lo que debe hacer es dejar que los usuarios marquen el 2% de falsos negativos, idealmente con eliminación automática si un cierto número de usuarios lo marcan, y hacer que los moderadores vean el 14% de falsos positivos.


Encontraste el algoritmo. Eso es bastante bueno. El código fuente a menudo se deja como ejercicio. Después de todo, no estamos especificando ningún lenguaje de programación en particular, ¿verdad?
Ian


8

Existe un software que detecta la probabilidad de pornografía, pero esta no es una ciencia exacta, ya que las computadoras no pueden reconocer lo que realmente hay en las imágenes (las imágenes son solo un gran conjunto de valores en una cuadrícula sin significado). Simplemente puede enseñarle a la computadora qué es pornografía y qué no dando ejemplos. Esto tiene la desventaja de que solo reconocerá estas o imágenes similares.

Dada la naturaleza repetitiva de la pornografía, tiene buenas posibilidades si entrena el sistema con pocos falsos positivos. Por ejemplo, si entrena el sistema con personas desnudas, también puede marcar imágenes de una playa con personas "casi" desnudas como pornografía.

Un software similar es el software de Facebook que salió recientemente. Solo está especializado en rostros. El principio fundamental es el mismo.

Técnicamente, implementaría algún tipo de detector de características que utiliza un filtrado de bayes. El detector de características puede buscar características como el porcentaje de píxeles de color carne si es un detector simple o simplemente calcula la similitud de la imagen actual con un conjunto de imágenes pornográficas guardadas.

Por supuesto, esto no se limita a la pornografía, en realidad es más un caso de esquina. Creo que son más comunes los sistemas que intentan encontrar otras cosas en imágenes ;-)


1
¿Por qué la gente rechaza esta respuesta?
Patrick Cornelissen

porque no contiene nada como un algoritmo, receta o referencia.
Ian

7
Entonces, ¿no es una respuesta válida para explicarle al usuario que hace la pregunta que no es realmente posible lo que intenta lograr? Amigo, puede que estés un poco más relajado ...
Patrick Cornelissen

También está haciendo una declaración falsa "ya que las computadoras no pueden reconocer lo que realmente hay en las imágenes"
Daveth3Cat

Porque no pueden. Solo puede aprender a detectar ciertas imágenes y cuanto mayor sea su base de datos de casos positivos y negativos, mejor, pero en general nunca obtendrá una solución que sea tan precisa como la de un humano, por lo que terminará con una gran cantidad de falsos positivos y negativos.
Patrick Cornelissen

5

La respuesta es realmente fácil: es bastante seguro decir que no será posible en las próximas dos décadas. Antes de eso, probablemente obtendremos buenas herramientas de traducción. La última vez que lo comprobé, los chicos de IA estaban luchando por identificar el mismo coche en dos fotografías tomadas desde un ángulo ligeramente alterado. Eche un vistazo a cuánto tiempo les llevó obtener un OCR o un reconocimiento de voz lo suficientemente buenos juntos. Esos son problemas de reconocimiento que pueden beneficiarse enormemente de los diccionarios y aún están lejos de tener soluciones completamente confiables a pesar de los millones de meses-hombre que se les presentan.

Dicho esto, ¿podría simplemente agregar una "ofensiva"? enlace junto al contenido generado por el usuario y haga que un mod compruebe las quejas entrantes

editar:

Olvidé algo: SI vas a implementar algún tipo de filtro, necesitarás uno confiable. Si su solución fuera 50% correcta, se bloquearán 2000 de 4000 usuarios con imágenes decentes. Espere un ultraje.



4

respuesta corta: use un moderador;)

Respuesta larga: no creo que haya un proyecto para esta causa, ¿qué es el porno? Sólo piernas, desnudez total, enanos, etc. Es subjetivo.


3
la pregunta es "¿Cuál es la mejor manera de detectar imágenes pornográficas programáticamente?", programáticamente ...
Agusti-N

5
Sé la pregunta, pero como dije, no existe un bloqueador de pornografía 100% preciso porque la pornografía es subjetiva. Lo subjetivo no puede estar relacionado con el código. Uno piensa que es solo desnudez, otro piensa que es porno. Una mejor solución es tener un botón de "imagen de informe". Misma idea que Koistya Navin .NET
RvdK

1
¿"Enanos, etc."? Santo no sequitur, Batman.
Doug McClean

Existe el porno enano.
Chris Sherlock

4

Agregue un enlace ofensivo y almacene el md5 (u otro hash) de la imagen ofensiva para que pueda etiquetarse automáticamente en el futuro.

¿Qué tan genial sería si alguien tuviera una gran base de datos pública de imagen md5 junto con etiquetas descriptivas ejecutándose como un servicio web? Gran parte de la pornografía no es un trabajo original (en el sentido de que la persona que lo tiene ahora, probablemente no lo hizo) y las imágenes populares tienden a flotar en diferentes lugares, por lo que esto realmente podría marcar la diferencia.


8
Lo dudo. Hay tanta pornografía por ahí (y toneladas más generadas por día) que tus probabilidades de ver la misma imagen dos veces son (en mi humilde opinión) bastante cercanas a cero.
Vilx-

Piense en la frecuencia con la que la chica de la bañera aparecía por todas partes durante un tiempo. Habría sido marcado una vez y luego todos los demás podrían haberlo evitado.
rfusca

3
a menos que se haya recortado, cambiado de tamaño o simplemente abierto y guardado de nuevo antes de
cargarlo

Ya, pensé en eso :( eh, fue un pensamiento.
rfusca

1
Mejor que md5, licencia TinEye de idée.
Tobu

2

Si realmente tienes tiempo y dinero:

Una forma de hacerlo es 1) Escribiendo un algoritmo de detección de imágenes para encontrar si un objeto es humano o no. Esto se puede hacer enmascarando una imagen para recuperar sus "contornos" y ver si los contornos se ajustan a un contorno humano.

2) Los datos extraen muchas imágenes pornográficas y utilizan técnicas de minería de datos como los algoritmos C4 o la optimización del enjambre de partículas para aprender a detectar patrones que coincidan con las imágenes pornográficas.

Esto requerirá que identifique cómo deben verse los contornos de un hombre / mujer desnudos de un cuerpo humano en formato digitalizado (esto se puede lograr de la misma manera que funcionan los algoritmos de reconocimiento de imágenes OCR).

¡Espero que te diviertas! :-)


2

Me parece que el principal obstáculo es definir una "imagen porno". Si puede definirlo fácilmente, probablemente podría escribir algo que funcione. Pero incluso los humanos no pueden ponerse de acuerdo sobre qué es la pornografía. ¿Cómo lo sabrá la aplicación? La moderación del usuario es probablemente su mejor opción.


1

He visto una aplicación de filtrado web que filtra imágenes pornográficas, lo siento, no recuerdo el nombre. Era bastante propenso a falsos positivos, sin embargo, la mayor parte del tiempo funcionaba.

Creo que el truco principal es detectar "demasiada piel en la imagen :)


1
Tampoco puedo recordar el estudio, pero hizo una detección de bordes y coincidió con lo que parecían ser patrones de vulvas rotadas u oscurecidas. Muy interesante desde el punto de vista del procesamiento de imágenes.
jim

-1, proporciona comentarios pero no ofrece una solución sustancial.
Brad Koch

1

La detección de imágenes pornográficas sigue siendo una tarea de IA definida que todavía es muy teórica.

Aproveche el poder colectivo y la inteligencia humana agregando un botón / enlace "Informar spam / abuso". O emplee a varios moderadores para hacer este trabajo.

PD: Realmente me sorprende la cantidad de personas que hacen preguntas asumiendo que el software y los algoritmos son todopoderosos sin siquiera pensar si se puede hacer lo que quieren. ¿Son representantes de esa nueva generación de programadores que no entienden el hardware, la programación de bajo nivel y toda esa "magia detrás"?

PD # 2. También recuerdo que periódicamente sucede que alguna situación en la que la gente misma no puede decidir si una foto es porno o se lleva al tribunal arte. Incluso después de que el tribunal dictamine, es probable que la mitad de las personas considere que la decisión es incorrecta. La última situación estúpida de este tipo fue recientemente cuando una página de Wikipedia fue prohibida en el Reino Unido debido a la imagen de la portada de un CD que muestra algo de desnudez.


1

Se me ocurren dos opciones (aunque ninguna de ellas detecta pornografía mediante programación):

  1. Bloquea todas las imágenes cargadas hasta que uno de tus administradores las haya mirado. No hay ninguna razón por la que esto deba llevar mucho tiempo: podría escribir algún software que muestre 10 imágenes por segundo, casi como una película; incluso a esta velocidad, es fácil para un ser humano detectar una imagen potencialmente pornográfica. Luego, retrocede en este software y observa más de cerca.
  2. Agrega la opción habitual "marcar esta imagen como inapropiada".

1

los API del servicio web BrightCloud es perfecta para esto. Es una API REST para realizar búsquedas de sitios web como esta. Contiene una base de datos de filtrado web muy grande y muy precisa y una de las categorías, Adultos, tiene más de 10 millones de sitios de pornografía identificados.


1

He oído hablar de herramientas que utilizan un algoritmo muy simple, pero bastante efectivo. El algoritmo calculó la cantidad relativa de píxeles con un valor de color cercano a algunos colores de "piel" predefinidos. Si esa cantidad es superior a algún valor predefinido, la imagen se considera de contenido erótico / pornográfico. Por supuesto, ese algoritmo dará resultados falsos positivos para fotografías de rostros de cerca y muchas otras cosas.
Dado que está escribiendo sobre redes sociales, habrá muchas fotos "normales" con una gran cantidad de color de piel, por lo que no debe usar este algoritmo para rechazar todas las imágenes con resultado positivo. Pero puede utilizarlo para proporcionar ayuda a los moderadores, por ejemplo, marcar estas imágenes con mayor prioridad,


De hecho, he visto un sistema similar en uso. No es lo suficientemente confiable como para dejarlo solo, pero hace un muy buen trabajo al alertar a un moderador cuando es apropiado. No es una prueba completa, especialmente si la persona está cubierta con solo una pequeña área expuesta. La relación no funciona con tanta fiabilidad a la inversa.
Tim Post

1

Este parece prometedor. Básicamente, detectan la piel (con calibración mediante el reconocimiento de rostros) y determinan las "rutas de la piel" (es decir, miden la proporción de píxeles de piel frente a píxeles de piel de la cara / píxeles de piel). Esto tiene un rendimiento decente. http://www.prip.tuwien.ac.at/people/julian/skin-detection


0

Mire el nombre del archivo y cualquier atributo. No hay suficiente información para detectar ni siquiera el 20% de las imágenes traviesas, pero una simple lista negra de palabras clave al menos detectaría imágenes con etiquetas descriptivas o metadatos. 20 minutos de codificación para una tasa de éxito del 20% no es un mal negocio, especialmente como una preselección que al menos puede captar algunos simples antes de pasar el resto a un moderador para que los juzgue.

El otro truco útil es lo contrario, por supuesto, mantener una lista blanca de fuentes de imágenes para permitir sin moderación o verificación. Si la mayoría de sus imágenes provienen de fuentes o cargadores seguros conocidos, puede aceptarlas de forma vinculante.




0

No es ciencia espacial. Ya no. Es muy similar al reconocimiento facial. Creo que la forma más sencilla de solucionarlo es mediante el aprendizaje automático. Y como se trata de imágenes, puedo apuntar hacia redes neuronales, porque parecen ser las preferidas para las imágenes. Necesitará datos de entrenamiento. Y puede encontrar toneladas de datos de entrenamiento en Internet, pero debe recortar las imágenes a la parte específica que desea que detecte el algoritmo. Por supuesto, tendrá que dividir el problema en diferentes partes del cuerpo que desee detectar y crear datos de entrenamiento para cada una, y aquí es donde las cosas se vuelven divertidas.

Como dijo alguien anteriormente, no se puede hacer al 100%. Habrá casos en los que tales algoritmos fallarán. La precisión real estará determinada por sus datos de entrenamiento, la estructura de sus redes neuronales y cómo elegirá agrupar los datos de entrenamiento (penes, vaginas, senos, etc., y combinaciones de los mismos). En cualquier caso, estoy muy seguro de que esto se puede lograr con alta precisión para imágenes pornográficas explícitas.



-1

No hay forma de que puedas hacer esto al 100% (yo diría que tal vez el 1-5% sería plausible) con el conocimiento actual. Obtendría un resultado mucho mejor (que ese 1-5%) simplemente verificando los nombres de las imágenes en busca de palabras relacionadas con el sexo :).

@SO Troll: Muy cierto.


-1, proporciona comentarios pero no ofrece una solución sustancial.
Brad Koch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.