C'est en fait assez facile. Vous pouvez par programmation à détecter les tons de la peau et du porno images ont tendance à avoir beaucoup de la peau. Cela permettra de créer de faux positifs, mais si c'est un problème, vous pouvez passer des images donc détecté réels de la modération. Ce n'est pas seulement réduit considérablement le travail pour les modérateurs, mais vous donne aussi beaucoup de porno gratuit. C'est gagnant-gagnant.
#!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)
Ce code de mesures de tons de peau dans le centre de l'image. Je l'ai testé sur 20 relativement apprivoisés "porno" images et 20 complètement innocent des images. Il marque 100% de la "porno" et 4 des 20 des images propres. C'est un assez haut taux de faux positifs, mais le script vise à être assez prudent et pourrait être plus à l'écoute. Il travaille sur la lumière, l'obscurité et Asiatiques, les tons de peau.
C'est la principale faiblesses avec de faux positifs, de couleur brune, des objets comme le sable et le bois et bien sûr, il ne sait pas la différence entre "méchant" et "nice" la chair (comme le visage de coups).
La faiblesse avec des faux négatifs seraient des images sans trop de chair exposée (comme le cuir, bondage), peint ou de la peau tatouée, B&W, images, etc.
code source et des exemples d'images