Was ist der beste Weg, um Pornobilder programmgesteuert zu erkennen? [geschlossen]


120

Akismet leistet hervorragende Arbeit bei der Erkennung von Spam-Kommentaren. Kommentare sind heutzutage jedoch nicht die einzige Form von Spam. Was wäre, wenn ich wollte, dass so etwas wie akismet automatisch Pornobilder auf einer Social-Networking-Site erkennt, auf der Benutzer ihre Bilder, Avatare usw. hochladen können?

Es gibt bereits einige bildbasierte Suchmaschinen sowie Gesichtserkennungsmaterialien, daher gehe ich davon aus, dass dies keine Raketenwissenschaft wäre und durchgeführt werden könnte. Ich habe jedoch keine Ahnung, wie das Zeug funktioniert und wie ich vorgehen soll, wenn ich es von Grund auf neu entwickeln möchte.

Wie soll ich anfangen?

Gibt es dafür ein Open Source Projekt?


82
Eigentlich würde ich sagen, das klingt viel schwieriger als Raketenwissenschaft! Wir haben bereits viele Raketen, aber AFAIK keinen solchen "
Pornodetektor

4
LOL. Es gibt Gesichtserkennung, aber noch keine Technologie zur Genital- und Brusterkennung. Pech gehabt.
Jon Limjap

11
Pornografie ist eine Frage der Geografie - außerdem bin ich mir sicher, dass es viele Bilder gibt, die überhaupt keine Genitalien oder Nacktheit zeigen, was (wieder - an einigen Stellen) als ziemlich hardcore angesehen werden würde. Klingt nach einem Job für eine fortgeschrittene KI, nicht nach einem einfachen Algorithmus.
Noam Gal

2
Ich bin gerade auf dieses Dienstprogramm gestoßen, das mich an diesen Thread erinnert hat. Frage mich, ob es funktioniert? proofpronto.com/porn-detection-stick-by-paraben.html
Martin Smith

1
@ jm666, wenn das Problem für Sie so ernst ist und Sie der Meinung sind, dass sich der Stand der Technik in diesem Bereich in den letzten zwei Jahren verbessert hat, wie wäre es dann mit einem Kopfgeld für den Betrüger, auf den verwiesen wird? Sie sollten auf diese Weise etwas Aufmerksamkeit und vielleicht einige Antworten auf sich ziehen.
Michael Petrotta

Antworten:


69

Dies wurde im Jahr 2000 geschrieben, nicht sicher, ob der Stand der Technik in der Pornodetektion überhaupt fortgeschritten ist, aber ich bezweifle es.

http://www.dansdata.com/pornsweeper.htm

PORNsweeper scheint in der Lage zu sein, Bilder von Menschen von Bildern von Dingen zu unterscheiden, die keine Menschen sind, solange die Bilder farbig sind. Es ist weniger erfolgreich, schmutzige Bilder von Menschen von sauberen zu unterscheiden.

Bei der Standardeinstellung mit mittlerer Empfindlichkeit haben Sie eine Wahrscheinlichkeit von 50%, wenn die Personalabteilung ein Bild des neuen Kollegen in den Konten sendet. Wenn Ihre Schwester Ihnen ein Bild von ihrem Sechsmonatigen schickt, ist es ebenfalls wahrscheinlich, dass Sie inhaftiert werden.

Es ist nur fair, auf amüsante Fehler wie das Aufrufen des Mona Lisa-Pornos hinzuweisen, wenn sie für das Verhalten der Software repräsentativ sind. Wenn die Macher zugeben, dass ihr algorithmischer Bilderkenner den Ball 15% der Zeit fallen lässt, dann ist es dumm, sich darüber lustig zu machen, wenn es genau das tut.

Aber PORNsweeper scheint nur in einer Abteilung den angegebenen Spezifikationen gerecht zu werden - der Erkennung tatsächlicher Pornos. Es ist halbwegs anständig, Pornos zu erkennen, aber es ist schlecht, saubere Bilder zu erkennen. Und ich wäre nicht überrascht, wenn in naher Zukunft keine größeren Sprünge in diesem Bereich gemacht würden.


Natürlich hat die Pornodetektion seitdem Fortschritte gemacht. Bei der Objekterkennung / Bildklassifizierung / Computer Vision gab es viele Gedanken. 2000 fühlt sich für mich wie die Steinzeit an.
Maarten

89

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


Möchten Sie Ihren 20-Zeilen-Python-Proof of Concept veröffentlichen? (-1)
Bobobobo

Nicht schlecht, +1. Interessanterweise zeigen Bilder von normalen Oberflächen (wie Teppich- oder Kühlschrankoberflächen) eine hohe Hautmenge.
Bobobobo

6
Spoiler: Keine tatsächliche Nacktheit in den Bildbeispielen.
Luc

Dies wird auch Holz als Haut betrachten. Weil es genau die gleiche Farbe hat, aber unterschiedliche Textur. Ganz zu schweigen von Porträts.
Maarten

45

Ich würde lieber zulassen, dass Benutzer über schlechte Bilder berichten. Die Entwicklung der Bilderkennung kann zu viel Aufwand und Zeit in Anspruch nehmen und ist nicht so genau wie das menschliche Auge. Es ist viel billiger, diesen Moderationsjob auszulagern.

Schauen Sie sich an: Amazon Mechanical Turk

"Der Amazon Mechanical Turk (MTurk) ist Teil der Suite von Amazon Web Services, einem Crowdsourcing-Marktplatz, auf dem Computerprogramme den Einsatz menschlicher Intelligenz koordinieren können, um Aufgaben auszuführen, die Computer nicht ausführen können."


4
Es gibt wahrscheinlich einen Markt für eine Website im Amazon Mechanical Turk-Stil, aber einen, der sich auf diese Art von Themen spezialisiert hat .... :)
Rich

6
Amazon Mechanical Turk kostet wahrscheinlich Geld. Angesichts des Themas würden Sie denken, dass es ein cleveres Geschäftsmodell gibt, mit dem Sie dies kostenlos erledigen können.
Ankur

1
Ich denke, das ist ein ziemlich unethischer Ansatz.
Mittag Seide

2
@ Ankur LOL! Großartige Idee. Gehen Sie zu nic.com, um zu überprüfen, ob PornOrNot.com noch verfügbar ist.
Pekka

9
@Noon Silk, warum denkst du, ist dies ein unethischer Ansatz?
Mazatec


15

BOOM! Hier ist das Whitepaper mit dem Algorithmus.

Weiß jemand, wo man den Quellcode für eine Java-Implementierung (oder eine andere Sprache) erhält?

Das würde rocken.

Ein Algorithmus namens WISE hat eine Genauigkeitsrate von 98%, aber eine Falsch-Positiv-Rate von 14%. Sie lassen also die Benutzer die 2% falsch-negativen Ergebnisse markieren, idealerweise mit automatischer Entfernung, wenn eine bestimmte Anzahl von Benutzern sie markiert, und lassen die Moderatoren die 14% falsch-positiven Ergebnisse anzeigen.


Sie haben den Algorithmus gefunden. Das ist verdammt gut. Der Quellcode wird oft als Übung belassen. Wir spezifizieren doch keine bestimmte Programmiersprache, oder?
Ian


8

Es gibt Software, die die Wahrscheinlichkeit für Pornos erkennt, aber dies ist keine exakte Wissenschaft, da Computer nicht erkennen können, was sich tatsächlich auf Bildern befindet (Bilder sind nur eine große Menge von Werten in einem Raster ohne Bedeutung). Sie können dem Computer einfach beibringen, was Pornos sind und was nicht, indem Sie Beispiele nennen. Dies hat den Nachteil, dass nur diese oder ähnliche Bilder erkannt werden.

Angesichts der Wiederholung von Pornos haben Sie gute Chancen, wenn Sie das System mit wenigen Fehlalarmen trainieren. Wenn Sie beispielsweise das System mit nackten Personen trainieren, werden möglicherweise auch Bilder eines Strandes mit "fast" nackten Personen als Pornos gekennzeichnet.

Eine ähnliche Software ist die kürzlich erschienene Facebook-Software. Es ist nur auf Gesichter spezialisiert. Das Hauptprinzip ist das gleiche.

Technisch gesehen würden Sie eine Art Feature-Detektor implementieren, der eine Bayes-Filterung verwendet. Der Feature-Detektor sucht möglicherweise nach Features wie dem Prozentsatz der fleischfarbenen Pixel, wenn es sich um einen einfachen Detektor handelt, oder berechnet nur die Ähnlichkeit des aktuellen Bilds mit einer Reihe gespeicherter Pornobilder.

Dies ist natürlich nicht auf Pornos beschränkt, sondern eher ein Eckfall. Ich denke häufiger sind Systeme, die versuchen, andere Dinge in Bildern zu finden ;-)


1
Warum stimmen die Leute diese Antwort ab?
Patrick Cornelissen

weil es nichts wie einen Algorithmus, ein Rezept oder eine Referenz enthält.
Ian

7
Es ist also keine gültige Antwort, um dem Benutzer die Frage zu erklären, dass es nicht wirklich möglich ist, was er erreichen möchte. Alter, du bist vielleicht ein bisschen entspannter ...
Patrick Cornelissen

Es macht auch eine falsche Aussage "da Computer nicht erkennen können, was tatsächlich auf Bildern ist"
Daveth3Cat

Weil sie nicht können. Sie können nur lernen, bestimmte Bilder zu erkennen, und je größer Ihre Datenbank mit positiven und negativen Fällen ist, desto besser. Im Allgemeinen erhalten Sie jedoch nie eine Lösung, die so genau wie ein Mensch ist, sodass Sie eine große Anzahl von Bildern erhalten falsch positive und negative.
Patrick Cornelissen

5

Die Antwort ist wirklich einfach: Man kann mit ziemlicher Sicherheit sagen, dass dies in den nächsten zwei Jahrzehnten nicht möglich sein wird. Vorher werden wir wahrscheinlich gute Übersetzungswerkzeuge bekommen. Als ich das letzte Mal nachgesehen habe, hatten die KI-Leute Mühe, dasselbe Auto auf zwei Fotos zu identifizieren, die aus einem leicht veränderten Winkel aufgenommen wurden. Sehen Sie sich an, wie lange sie gebraucht haben, um gemeinsam eine ausreichende OCR- oder Spracherkennung zu erreichen. Dies sind Erkennungsprobleme, die von Wörterbüchern stark profitieren können und trotz der Millionenmonate, die auf sie geworfen werden, noch weit davon entfernt sind, absolut zuverlässige Lösungen zu finden.

Davon abgesehen könnten Sie einfach eine "Offensive" hinzufügen? Link neben User Generated Contend und lassen Sie die eingehenden Beschwerden von einem Mod überprüfen.

bearbeiten:

Ich habe etwas vergessen: WENN Sie eine Art Filter implementieren, benötigen Sie einen zuverlässigen. Wenn Ihre Lösung zu 50% richtig wäre, werden 2000 von 4000 Benutzern mit anständigen Bildern blockiert. Erwarten Sie eine Empörung.


5

Ein Doktorand der Nationalen Cheng Kung Universität in Taiwan hat 2004 zu diesem Thema geforscht. Er konnte eine Erfolgsquote von 89,79% bei der Erkennung von aus dem Internet heruntergeladenen Nacktbildern erzielen. Hier ist der Link zu seiner These: Die Studie zur Bilderkennung von Nackten anhand der Hautfarbe
Sie ist auf Chinesisch, daher benötigen Sie möglicherweise einen Übersetzer, falls Sie sie nicht lesen können.


4

kurze antwort: benutze einen moderator;)

Lange Antwort: Ich glaube nicht, dass es ein Projekt für diese Sache gibt. Was ist Porno? Nur Beine, volle Nacktheit, Zwerge usw. Es ist subjektiv.


3
Die Frage ist "Was ist der beste Weg, um Pornobilder programmatisch zu erkennen?", programmatisch ...
Agusti-N

5
Ich kenne die Frage, aber wie gesagt, es gibt keinen 100% genauen Pornoblocker, weil Pornos subjektiv sind. Subjektiv kann nicht mit Code in Verbindung gebracht werden. Ich denke, es ist nur Nacktheit, andere denken, es ist Porno. Eine bessere Lösung ist die Schaltfläche "Bild melden". Gleiche Idee wie Koistya Navin .NET
RvdK

1
"Zwerge etc."? Heiliges Non-Sequitur, Batman.
Doug McClean

Es gibt so etwas wie Zwergporno.
Chris Sherlock

4

Fügen Sie einen anstößigen Link hinzu und speichern Sie den md5 (oder einen anderen Hash) des fehlerhaften Bildes, damit es in Zukunft automatisch markiert werden kann.

Wie cool wäre es, wenn jemand eine große öffentliche Datenbank mit Bild md5 und beschreibenden Tags als Webservice hätte? Viele Pornos sind keine Originalarbeiten (da die Person, die sie jetzt hat, es wahrscheinlich nicht geschafft hat) und die beliebten Bilder dazu neigen, an verschiedenen Orten zu schweben, so dass dies wirklich einen Unterschied machen könnte.


8
Ich bezweifle das. Es gibt so viele Pornos (und tonnenweise mehr, die von Tag zu Tag generiert werden), dass Ihre Chancen, dasselbe Bild zweimal zu sehen (IMHO), ziemlich nahe bei Null liegen.
Vilx

Denken Sie darüber nach, wie oft Wannenmädchen für eine Weile überall aufgetaucht ist. Es wäre einmal markiert worden und dann hätten alle anderen es vermeiden können.
Rfusca

3
es sei denn, es wurde zugeschnitten, in der Größe
geändert

Ja, ich habe darüber nachgedacht :( eh, es war ein Gedanke.
rfusca

1
Besser als md5, TinEye der Lizenz-IDEE.
Tobu

2

Wenn Sie wirklich Zeit und Geld haben:

Eine Möglichkeit besteht darin, 1) einen Bilderkennungsalgorithmus zu schreiben, um festzustellen, ob ein Objekt ein Mensch ist oder nicht. Dies kann durch Bitmasken eines Bildes erfolgen, um dessen "Konturen" abzurufen und festzustellen, ob die Konturen zu einer menschlichen Kontur passen.

2) Daten analysieren viele Pornobilder und verwenden Data Mining-Techniken wie die C4-Algorithmen oder die Partikelschwarmoptimierung, um zu lernen, Muster zu erkennen, die mit Pornobildern übereinstimmen.

Dazu müssen Sie festlegen, wie die Konturen eines nackten Mannes / einer nackten Frau eines menschlichen Körpers im digitalisierten Format aussehen müssen (dies kann auf die gleiche Weise erreicht werden, wie OCR-Bilderkennungsalgorithmen funktionieren).

Hoffe du hast Spaß! :-)


2

Mir scheint, dass das Haupthindernis darin besteht, ein "Pornobild" zu definieren. Wenn Sie es leicht definieren können, könnten Sie wahrscheinlich etwas schreiben, das funktionieren würde. Aber selbst Menschen können sich nicht darauf einigen, was Pornos sind. Woher weiß die Anwendung das? Benutzermoderation ist wahrscheinlich die beste Wahl.


1

Ich habe eine Webfilteranwendung gesehen, die Pornobilder filtert. Entschuldigung, ich kann mich nicht an den Namen erinnern. Es war ziemlich anfällig für Fehlalarme, aber die meiste Zeit funktionierte es.

Ich denke, der Haupttrick besteht darin, "zu viel Haut auf dem Bild zu erkennen :)"


1
Ich kann mich auch nicht an die Studie erinnern - aber sie führte eine Kantenerkennung durch und stimmte mit den scheinbar gedrehten oder verdeckten Mustern von Vulva überein. Sehr interessant in Bezug auf die Bildverarbeitung.
Jim

-1, Dies liefert einen Kommentar, gibt aber keine wesentliche Lösung.
Brad Koch

1

Das Erkennen von Pornobildern ist immer noch eine bestimmte KI-Aufgabe, die noch sehr theoretisch ist.

Ernten Sie kollektive Macht und menschliche Intelligenz, indem Sie einen Button / Link "Spam / Missbrauch melden" hinzufügen. Oder beschäftigen Sie mehrere Moderatoren, um diesen Job zu erledigen.

PS Wirklich überrascht, wie viele Leute Fragen stellen, vorausgesetzt, Software und Algorithmen sind mächtig, ohne darüber nachzudenken, ob das, was sie wollen, getan werden kann. Sind sie Vertreter dieser neuen Generation von Programmierern, die kein Verständnis für Hardware, Low-Level-Programmierung und all diese "Magie dahinter" haben?

PS # 2. Ich erinnere mich auch daran, dass es in bestimmten Situationen vorkommt, dass Menschen selbst nicht entscheiden können, ob es sich bei einem Bild um Pornos handelt oder ob Kunst vor Gericht gebracht wird. Selbst nach den Gerichtsentscheidungen wird die Hälfte der Menschen die Entscheidung wahrscheinlich für falsch halten. Die letzte dumme Situation dieser Art war vor kurzem, als eine Wikipedia-Seite in Großbritannien wegen eines CD-Titelbildes mit etwas Nacktheit verboten wurde.


1

Zwei Optionen, die ich mir vorstellen kann (obwohl keine von ihnen programmgesteuert Pornos erkennt):

  1. Blockieren Sie alle hochgeladenen Bilder, bis einer Ihrer Administratoren sie angesehen hat. Es gibt keinen Grund, warum dies lange dauern sollte: Sie könnten eine Software schreiben, die 10 Bilder pro Sekunde zeigt, fast wie ein Film - selbst bei dieser Geschwindigkeit ist es für einen Menschen leicht, ein potenziell pornografisches Bild zu erkennen. Dann spulen Sie in dieser Software zurück und schauen genauer hin.
  2. Fügen Sie die übliche Option "Dieses Bild als unangemessen markieren" hinzu.

1

Die BrightCloud-Webdienst-API ist dafür perfekt geeignet . Es ist eine REST-API, mit der Sie einfach nach Websites suchen können. Es enthält eine sehr große und sehr genaue Webfilter-Datenbank und eine der Kategorien, Adult, hat über 10 Millionen Pornoseiten identifiziert!


1

Ich habe von Tools gehört, die einen sehr einfachen, aber sehr effektiven Algorithmus verwenden. Der Algorithmus berechnete die relative Anzahl von Pixeln mit einem Farbwert in der Nähe einiger vordefinierter "Haut" -Farben. Wenn dieser Betrag höher als ein vordefinierter Wert ist, wird davon ausgegangen, dass das Bild erotischen / pornografischen Inhalt hat. Natürlich liefert dieser Algorithmus falsch positive Ergebnisse für Nahaufnahmen von Gesichtern und viele andere Dinge.
Da Sie über soziale Netzwerke schreiben, werden viele "normale" Fotos mit einer hohen Hautfarbe angezeigt. Verwenden Sie diesen Algorithmus daher nicht, um alle Bilder mit positivem Ergebnis abzulehnen. Sie können es jedoch verwenden, um Moderatoren zu helfen. Markieren Sie diese Bilder beispielsweise mit höherer Priorität.


Ich habe tatsächlich ein ähnliches System gesehen. Es ist nicht zuverlässig genug, um allein gelassen zu werden, aber es macht einen sehr guten Job, wenn es darum geht, einen Moderator zu alarmieren. Es ist kein vollständiger Beweis, besonders wenn die Person nur mit einem kleinen exponierten Bereich bedeckt ist. Das Verhältnis funktioniert umgekehrt nicht ganz so zuverlässig.
Tim Post


0

Überprüfen Sie den Dateinamen und alle Attribute. Es gibt nicht annähernd genug Informationen, um selbst 20% der ungezogenen Bilder zu erkennen, aber eine einfache Keyword-Blacklist würde zumindest Bilder mit beschreibenden Bezeichnungen oder Metadaten erkennen. 20 Minuten Codierung für eine Erfolgsquote von 20% sind kein schlechtes Geschäft, insbesondere als Vorscreen, der zumindest einige einfache abfangen kann, bevor Sie den Rest zur Beurteilung an einen Moderator weitergeben.

Der andere nützliche Trick ist natürlich das Gegenteil. Führen Sie eine Whitelist mit Bildquellen, um dies ohne Moderation oder Überprüfung zu ermöglichen. Wenn die meisten Ihrer Bilder von bekannten sicheren Uploadern oder Quellen stammen, können Sie sie einfach verbindlich akzeptieren.




0

Es ist keine Raketenwissenschaft. Nicht länger. Es ist der Gesichtserkennung sehr ähnlich. Ich denke, dass der einfachste Weg, damit umzugehen, das maschinelle Lernen ist. Und da es sich um Bilder handelt, kann ich auf neuronale Netzwerke verweisen, da diese für Bilder bevorzugt zu sein scheinen. Sie benötigen Trainingsdaten. Im Internet finden Sie unzählige Trainingsdaten, aber Sie müssen die Bilder auf den Teil zuschneiden, den der Algorithmus erkennen soll. Natürlich müssen Sie das Problem in verschiedene Körperteile aufteilen, die Sie erkennen und Trainingsdaten für jeden erstellen möchten, und hier werden die Dinge amüsant.

Wie jemand oben sagte, kann es nicht zu 100% gemacht werden. Es wird Fälle geben, in denen solche Algorithmen fehlschlagen. Die tatsächliche Genauigkeit wird durch Ihre Trainingsdaten, die Struktur Ihrer neuronalen Netzwerke und die Art und Weise bestimmt, wie Sie die Trainingsdaten (Penisse, Vagina, Brüste usw. und Kombinationen davon) gruppieren. Auf jeden Fall bin ich sehr zuversichtlich, dass dies mit hoher Genauigkeit für explizite Pornobilder erreicht werden kann.



-1

Es gibt keine Möglichkeit, dies zu 100% (ich würde sagen, vielleicht sind 1-5% plausibel) mit dem heutigen Wissen zu tun. Sie würden ein viel besseres Ergebnis erzielen (als diese 1-5%), wenn Sie nur die Bildnamen auf sexbezogene Wörter überprüfen :).

@ SO Troll: So wahr.


-1, Dies liefert einen Kommentar, gibt aber keine wesentliche Lösung.
Brad Koch
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.