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