Das ist eigentlich ziemlich einfach. Sie können Hauttöne programmgesteuert erkennen - und Pornobilder haben in der Regel viel Haut. Dies führt zu Fehlalarmen. Wenn dies jedoch ein Problem darstellt, können Sie Bilder übergeben, die durch tatsächliche Moderation erkannt wurden. Dies reduziert nicht nur die Arbeit für Moderatoren erheblich, sondern bietet Ihnen auch viele kostenlose Pornos. Es ist Win-Win.
#!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)
Dieser Code misst Hauttöne in der Bildmitte. Ich habe an 20 relativ zahmen "Porno" -Bildern und 20 völlig unschuldigen Bildern getestet. Es kennzeichnet 100% der "Pornos" und 4 von 20 der sauberen Bilder. Das ist eine ziemlich hohe Falsch-Positiv-Rate, aber das Skript zielt darauf ab, ziemlich vorsichtig zu sein und könnte weiter optimiert werden. Es wirkt auf helle, dunkle und asiatische Hauttöne.
Die Hauptschwächen bei Fehlalarmen sind braune Objekte wie Sand und Holz, und natürlich kennt es den Unterschied zwischen "ungezogenem" und "schönem" Fleisch (wie Gesichtsaufnahmen) nicht.
Schwäche mit falschen Negativen wären Bilder ohne viel freiliegendes Fleisch (wie Lederbindung), bemalte oder tätowierte Haut, Schwarzweißbilder usw.
Quellcode und Beispielbilder