Questo è in realtà ragionevolmente facile. Puoi rilevare programmaticamente i toni della pelle e le immagini porno tendono ad avere molta pelle. Ciò creerà falsi positivi, ma se questo è un problema puoi passare le immagini così rilevate attraverso la moderazione effettiva. Questo non solo riduce notevolmente il lavoro dei moderatori, ma ti offre anche un sacco di porno gratis. È vantaggioso per tutti.
#!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)
Questo codice misura i toni della pelle al centro dell'immagine. Ho testato 20 immagini "porno" relativamente docili e 20 immagini completamente innocenti. Contrassegna il 100% del "porno" e 4 delle 20 immagini pulite. Si tratta di un tasso di falsi positivi piuttosto alto, ma lo script mira ad essere abbastanza cauto e potrebbe essere ulteriormente modificato. Funziona su tonalità della pelle chiare, scure e asiatiche.
I suoi principali punti deboli con i falsi positivi sono gli oggetti marroni come la sabbia e il legno e, naturalmente, non conosce la differenza tra carne "cattiva" e "bella" (come i colpi di faccia).
La debolezza con falsi negativi sarebbe immagini senza molta carne esposta (come il bondage in pelle), pelle dipinta o tatuata, immagini in bianco e nero, ecc.
codice sorgente e immagini di esempio