¿Cuál es la mejor forma de detectar imágenes pornográficas mediante progtwigción?

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

Ya hay algunos motores de búsqueda basados ​​en imágenes, así como material de reconocimiento de rostros disponible, así que estoy asumiendo que no sería ciencia de cohetes y que podría hacerse. Sin embargo, no tengo ni idea de cómo funciona eso y cómo debería hacerlo si quiero desarrollarlo desde cero.

¿Cómo debería comenzar?

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

Esto fue escrito en 2000, no estoy seguro si el estado del arte en la detección del porno 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 y cuando las imágenes sean en color. Tiene menos éxito para distinguir las imágenes sucias de las personas de las limpias.

Con la sensibilidad media y predeterminada, si Recursos Humanos envía una imagen del nuevo capítulo en Cuentas, tienes 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 a la Mona Lisa porno, si son representativos del comportamiento del software. Si los fabricantes admiten que su reconocedor algorítmico de imágenes dejará caer la pelota el 15% del tiempo, burlarse de ella cuando hace exactamente eso es una tontería.

Pero PORNsweeper solo parece cumplir con sus especificaciones establecidas en un departamento: detección de porno real. Es medio aceptable para detectar porno, pero es malo para detectar imágenes nítidas. Y no me sorprendería que no se realicen grandes saltos en esta área en el futuro cercano.

Esto es realmente razonablemente fácil. Puede detectar mediante progtwigción las tonalidades de la piel, y las imágenes pornográficas suelen tener mucha piel. Esto creará falsos positivos, pero si esto es un problema, puede pasar las imágenes detectadas a través de la moderación real. Esto no solo reduce en gran medida el trabajo para los moderadores, sino que también te da un montón de 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 en 20 imágenes “porno” relativamente domesticadas y 20 imágenes completamente inocentes. Marca el 100% del “porno” y 4 de las 20 imágenes limpias. Esa es una tasa de falsos positivos bastante alta, pero la secuencia de comandos apunta a ser bastante prudente y podría ser más ajustada. Funciona 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 “buena” (como los tiros faciales).

La debilidad con falsos negativos sería imágenes sin mucha carne expuesta (como la esclavitud del cuero), piel pintada o tatuada, imágenes en blanco y negro, etc.

código fuente e imágenes de muestra

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

Echa un vistazo a: Amazon Mechanical Turk

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

  • Modelos de Bag-of-Visual-Words para clasificación y filtrado de imágenes para adultos
  • ¿Cuál es la mejor manera de detectar programáticamente las imágenes pornográficas?
  • Una breve encuesta del software de detección de pornografía / eliminación de la pornografía
  • Detección de imágenes pornográficas digitales (2011!)

¡AUGE! Aquí está el whitepaper que contiene el algoritmo.

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

Eso sería rockero.

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

Nude.js basado en el documento técnico de Rigan Ap-apid de la Universidad De La Salle.

Hay 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 está en las imágenes (las imágenes son solo un gran conjunto de valores en una cuadrícula sin significado). Puedes simplemente enseñarle a la computadora qué es porno 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, tienes una buena oportunidad si entrenas al sistema con pocos falsos positivos. Por ejemplo, si entrenas al sistema con personas desnudas, puedes marcar imágenes de una playa con gente “casi” desnuda como porno.

Un software similar es el software de Facebook que salió recientemente. Es solo especializado en caras. El principio principal es el mismo.

Técnicamente implementarías algún tipo de detector de funciones que utiliza un filtro bayes. El detector de características puede buscar características como el porcentaje de píxeles de color carne si se trata de un detector simple o simplemente calcula la similitud de la imagen actual con un conjunto de imágenes porno guardadas.

Esto, por supuesto, no se limita al porno, en realidad es más un caso de esquina. Creo que son más comunes los sistemas que intentan encontrar otras cosas en las imágenes 😉

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 obtengamos buenas herramientas de traducción. La última vez que verifiqué, los muchachos de la IA estaban luchando por identificar el mismo auto en dos fotografías tomadas desde un ángulo levemente alterado. Mire cuánto tardaron en obtener OCR o 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 que se les arrojan.

Dicho esto, ¿podría simplemente agregar una “ofensiva”? enlace al lado de contendio generado por el usuario y tener un mod verifica las quejas entrantes.

editar:

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

Un estudiante graduado de la Universidad Nacional Cheng Kung de Taiwán realizó una investigación sobre este tema en 2004. Logró una tasa de éxito del 89,79% en la detección de imágenes desnudas descargadas de Internet. Aquí está el enlace a su tesis: El estudio sobre la detección de imágenes de personas desnudas en función del color de la piel
Está en chino, por lo tanto, puede necesitar un traductor en caso de que no pueda leerlo.

respuesta corta: use un moderador;)

Respuesta larga: No creo que haya un proyecto para esta causa, ¿qué es la pornografía? Solo piernas, desnudez completa, enanos, etc. Es subjetivo.

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é bueno sería si alguien tuviera una gran base de datos pública de image md5 junto con tags descriptivas ejecutándose como un servicio web? Mucho del porno 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.

Si realmente tienes tiempo y dinero:

Una forma de hacerlo es 1) Escribir un algoritmo de detección de imágenes para determinar si un objeto es humano o no. Esto se puede hacer mediante el enmascaramiento de una imagen para recuperar sus “contornos” y ver si los contornos se ajustan a un contorno humano.

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

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

¡Espero que te diviertas! 🙂

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

He visto una aplicación de filtrado web que filtra imágenes pornográficas, lo siento, no recuerdo el nombre. Era bastante propenso a los falsos positivos, pero la mayoría de las veces funcionaba.

Creo que el truco principal es detectar “demasiada piel en la imagen 🙂

La detección de imágenes porno es todavía una tarea definitiva de IA, que es muy teórica todavía.

Aproveche el poder colectivo y la inteligencia humana agregando un botón / enlace “Informar de spam / abuso”. O emplea varios moderadores para hacer este trabajo.

PD: Sorprendentemente cuánta gente hace preguntas, asumiendo que el software y los algoritmos son poderosos sin siquiera pensar si lo que quieren se puede hacer. ¿Son representantes de esa nueva generación de progtwigdores que no comprenden el hardware, la progtwigción de bajo nivel y toda esa “magia detrás”?

PS # 2. También recuerdo que periódicamente ocurre que algunas personas no pueden decidir si una película es pornográfica o artística. 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 del tipo fue hace muy poco cuando una página de Wikipedia fue prohibida en el Reino Unido debido a una imagen de portada de CD que presenta cierta desnudez.

Dos opciones en las que puedo pensar (aunque ninguna de ellas detecta el porno mediante progtwigción):

  1. Bloquea todas las imágenes cargadas hasta que uno de tus administradores las haya revisado. No hay ninguna razón por la que esto deba llevar mucho tiempo: podrías escribir un 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 rebobina en este software y lo mira de cerca.
  2. Agregue la opción habitual de “marcar esta imagen como inapropiada”.

La API del servicio web de BrightCloud es perfecta para esto. Es una API REST para hacer búsquedas en sitios web como esta. Contiene una base de datos de filtrado web muy grande y muy precisa, y una de las categorías, Adulto, tiene más de 10 millones de sitios pornográficos identificados.

Escuché sobre herramientas que usaban un algoritmo muy simple pero bastante efectivo. El algoritmo calculaba la cantidad relativa de píxeles con un valor de color cercano a algunos colores predefinidos de “máscara”. Si esa cantidad es superior a un valor predefinido, se considera que la imagen tiene contenido erótico / pornográfico. Por supuesto, ese algoritmo dará resultados falsos positivos para fotos de primeros planos y muchas otras cosas.
Como 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 denegar todas las imágenes con un resultado positivo. Pero puede usarlo para ayudar a los moderadores, por ejemplo marcar estas imágenes con mayor prioridad, de modo que si el moderador desea consultar algunas imágenes nuevas para obtener contenido pornográfico, puede comenzar con estas imágenes.

Este parece prometedor. Básicamente detectan la piel (con calibración al reconocer las caras) y determinan las “trayectorias de la piel” (es decir, medir la proporción de píxeles de la piel frente a los píxeles de la piel de la cara / píxeles de la piel). Esto tiene un rendimiento decente. http://www.prip.tuwien.ac.at/people/julian/skin-detection

Mire el nombre del archivo y cualquier atributo. No hay información suficiente para detectar incluso el 20% de las imágenes maliciosas, pero una lista negra de palabras clave simple detectaría al menos imágenes con tags descriptivas o metadatos. 20 minutos de encoding 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 rest a un moderador para juzgar.

El otro truco útil es el opuesto, por supuesto, mantener una lista blanca de fonts de imagen para permitir sin moderación o comprobación. Si la mayoría de sus imágenes provienen de fonts o cargadores seguros conocidos, puede simplemente aceptarlas.

Hoy no intentaré más definir los tipos de material que entiendo que deben incluirse dentro de esa descripción taquigráfica [“pornografía dura”]; y quizás nunca podría tener éxito en hacerlo de manera inteligible. Pero lo sé cuando lo veo, y la película involucrada en este caso no es eso.

– Juez del Tribunal Supremo de los Estados Unidos Potter Stewart, 1964

Puede encontrar muchos libros blancos en la red relacionados con este tema.

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

Al igual que alguien mencionado anteriormente, no se puede hacer al 100% por ciento. Habrá casos donde tales algoritmos fallen. La precisión real estará determinada por sus datos de entrenamiento, la estructura de sus redes neuronales y la forma en que elegirá agrupar los datos de entrenamiento (penes, vaginas, pechos, etc., y combinaciones de los mismos). En cualquier caso, estoy muy seguro de que esto se puede lograr con gran precisión para imágenes pornográficas explícitas.

Este es un detector de desnudos. No lo he intentado. Es el único OSS que pude encontrar.

https://code.google.com/p/nudetech

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 de hoy en día. Obtendrás resultados mucho mejores (que esos 1-5%) simplemente verificando los nombres de las imágenes por palabras relacionadas con el sexo :).

@SO Troll: Muy cierto.