Jaki jest najlepszy sposób na programowe wykrywanie obrazów pornograficznych? [Zamknięte]


120

Akismet wykonuje niesamowitą robotę w wykrywaniu komentarzy spamowych. Jednak komentarze nie są obecnie jedyną formą spamu. Co jeśli chciałbym, aby coś takiego jak akismet automatycznie wykryło obrazy porno w serwisie społecznościowym, który umożliwia użytkownikom przesyłanie zdjęć, awatarów itp.?

Istnieje już kilka wyszukiwarek opartych na obrazach, a także narzędzi do rozpoznawania twarzy, więc zakładam, że nie byłaby to nauka o rakietach i można to zrobić. Jednak nie mam pojęcia, jak to działa i jak powinienem się do tego zabrać, jeśli chcę go rozwijać od podstaw.

Jak mam zacząć?

Czy jest na to jakiś projekt open source?


82
Właściwie powiedziałbym, że brzmi to o wiele trudniej niż nauka o rakietach! Mamy już dużo rakiet, ale AFAIK nie ma takiego „wykrywacza porno” :)
GaZ

4
LOL. Istnieje rozpoznawanie twarzy, ale nie ma jeszcze technologii rozpoznawania narządów płciowych i piersi. Pech.
Jon Limjap

11
Pornografia to kwestia geografii - poza tym jestem pewien, że jest mnóstwo zdjęć, które w ogóle nie pokazują genitaliów ani nagości, co można by uznać za dość hardcore (znowu - w niektórych miejscach). Brzmi jak praca dla zaawansowanej sztucznej inteligencji, a nie prosty algorytm.
Noam Gal

2
Właśnie natknąłem się na to narzędzie, które przypomniało mi ten wątek. Ciekawe, czy to działa? proofpronto.com/porn-detection-stick-by-paraben.html
Martin Smith

1
@ jm666, jeśli problem jest dla Ciebie tak poważny i uważasz, że stan wiedzy w tej dziedzinie poprawił się w ciągu ostatnich dwóch lat, co powiesz na przyznanie nagrody za wspomnianego duplikanta? W ten sposób powinieneś zwrócić uwagę, a może i kilka odpowiedzi.
Michael Petrotta

Odpowiedzi:


69

Zostało to napisane w 2000 roku, nie jestem pewien, czy stan wiedzy w zakresie wykrywania pornografii w ogóle się rozwinął, ale wątpię w to.

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

Wydaje się, że PORNsweeper ma pewną zdolność rozróżniania zdjęć ludzi od zdjęć rzeczy, które nie są ludźmi, o ile zdjęcia są kolorowe. Mniej skuteczny jest w odróżnianiu zdjęć ludzi brudnych od czystych.

Przy domyślnej, średniej czułości, jeśli dział kadr przesyła dookoła zdjęcie nowego faceta z kont, masz około 50% szans na to. Jeśli twoja siostra prześle ci zdjęcie swojego sześciomiesięcznego dziecka, podobnie prawdopodobnie zostanie zatrzymane.

Uczciwie jest wskazanie zabawnych błędów, takich jak wywołanie pornografii Mona Lisy, jeśli są one reprezentatywne dla zachowania oprogramowania. Jeśli twórcy przyznają, że ich algorytmiczny system rozpoznawania obrazu upuści kulkę w 15% przypadków, to naśmiewanie się z niej, gdy robi to dokładnie, jest głupie.

Ale PORNsweeper wydaje się spełniać określone specyfikacje tylko w jednym dziale - wykrywaniu rzeczywistego porno. Jest w połowie przyzwoity w wykrywaniu pornografii, ale jest zły w wykrywaniu czystych zdjęć. I nie zdziwiłbym się, gdyby w najbliższej przyszłości nie dokonano większych skoków w tej dziedzinie.


Wykrywanie pornografii przyczynowo-skutkowej rozwinęło się od tego czasu. Było wiele przełomowych myśli w rozpoznawaniu obiektów / klasyfikacji obrazu / wizji komputerowej. 2000 rok to dla mnie epoka kamienia łupanego.
Maarten

89

W rzeczywistości jest to dość łatwe. Możesz programowo wykrywać odcienie skóry - a obrazy porno mają zwykle dużo skóry. Spowoduje to fałszywe alarmy, ale jeśli jest to problem, możesz przekazać obrazy wykryte w ten sposób poprzez faktyczną moderację. To nie tylko znacznie ogranicza pracę moderatorów, ale także zapewnia dużo darmowego porno. To wygrana-wygrana.

#!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)

Ten kod mierzy odcienie skóry na środku obrazu. Przetestowałem na 20 stosunkowo oswojonych obrazach „porno” i 20 zupełnie niewinnych obrazach. Oznacza 100% „pornografii” i 4 z 20 czystych obrazów. To dość wysoki współczynnik fałszywych trafień, ale scenariusz ma być dość ostrożny i można go dalej dostroić. Działa na jasne, ciemne i azjatyckie odcienie skóry.

Głównymi słabościami fałszywych alarmów są brązowe obiekty, takie jak piasek i drewno, i oczywiście nie ma różnicy między „niegrzecznym” a „miłym” ciałem (jak zdjęcia twarzy).

Słabość z fałszywymi negatywami to obrazy bez zbytnio odsłoniętego ciała (jak wiązanie skóry), pomalowana lub wytatuowana skóra, obrazy czarno-białe itp.

kod źródłowy i przykładowe obrazy


Chcesz opublikować swój 20-wierszowy dowód słuszności koncepcji Pythona? (-1)
bobobobo

Nieźle, +1. Co ciekawe, obrazy zwykłych powierzchni (takich jak dywan lub powierzchnia lodówki) pokazują, że mają dużą ilość skóry.
bobobobo

6
Spoiler: brak rzeczywistej nagości w próbkach obrazu.
Luc,

Spowoduje to również uznanie drewna za skórę. Ponieważ ma dokładnie ten sam kolor, ale inną teksturę. Nie wspominając o portretach.
Maarten

45

Wolałbym pozwolić użytkownikom zgłaszać złe obrazy. Rozwój rozpoznawania obrazu może wymagać wiele wysiłku i czasu i nie będzie tak dokładny jak ludzkie oczy. O wiele taniej jest zlecić tę moderację na zewnątrz.

Spójrz na: Amazon Mechanical Turk

Amazon Mechanical Turk (MTurk) jest jednym z pakietów Amazon Web Services, rynku crowdsourcingowego, który umożliwia programom komputerowym koordynację wykorzystania ludzkiej inteligencji do wykonywania zadań, których komputery nie są w stanie wykonać”.


4
Prawdopodobnie istnieje rynek dla witryny Amazon Mechanical w stylu tureckim, ale taka, która specjalizuje się w tego rodzaju tematyce .... :)
Bogaty

6
Amazon Mechanical Turk prawdopodobnie kosztuje. Biorąc pod uwagę temat, można by pomyśleć, że istnieje sprytny model biznesowy, w którym można to zrobić za darmo.
Ankur

1
Myślę, że jest to dość nieetyczne podejście.
Noon Silk

2
@Ankur LOL! Świetny pomysł. Udaj się na nic.com, aby sprawdzić, czy PornOrNot.com jest nadal dostępny.
Pekka,

9
@Noon Silk dlaczego uważasz, że jest to nieetyczne podejście?
Mazatek


15

BUM! Oto raport zawierający algorytm.

Czy ktoś wie, skąd wziąć kod źródłowy do implementacji Java (lub dowolnego języka)?

To by wstrząsnęło.

Jeden algorytm o nazwie WISE ma 98% współczynnik dokładności, ale 14% współczynnik fałszywie pozytywnych wyników. Więc co robisz, to pozwalasz użytkownikom oznaczać 2% fałszywych wyników negatywnych, najlepiej z automatycznym usuwaniem, jeśli pewna liczba użytkowników oznaczy to, a moderatorzy sprawdzają 14% fałszywych trafień.


Znalazłeś algorytm. To jest cholernie dobre. Kod źródłowy jest często pozostawiony jako ćwiczenie. W końcu nie określamy żadnego konkretnego języka programowania, prawda?
Ian,


8

Istnieje oprogramowanie, które wykrywa prawdopodobieństwo wystąpienia pornografii, ale nie jest to nauka ścisła, ponieważ komputery nie potrafią rozpoznać, co jest na zdjęciach (zdjęcia to tylko duży zestaw wartości na siatce bez znaczenia). Możesz po prostu nauczyć komputer, czym jest pornografia, a czego nie, podając przykłady. Ma to tę wadę, że rozpoznaje tylko te lub podobne obrazy.

Biorąc pod uwagę powtarzalność pornografii, masz duże szanse, jeśli trenujesz system z kilkoma fałszywymi alarmami. Na przykład, jeśli trenujesz system z nagimi osobami, zdjęcia plaży z „prawie” nagimi ludźmi mogą również oznaczać jako porno.

Podobnym oprogramowaniem jest oprogramowanie Facebook, które niedawno wyszło. Specjalizuje się tylko w twarzach. Główna zasada jest taka sama.

Technicznie rzecz biorąc, zaimplementowałbyś jakiś rodzaj detektora cech, który wykorzystuje filtrowanie Bayesa. Detektor funkcji może szukać funkcji, takich jak procent pikseli w kolorze ciała, jeśli jest to prosty detektor, lub po prostu oblicza podobieństwo bieżącego obrazu z zestawem zapisanych obrazów porno.

Oczywiście nie ogranicza się to do pornografii, w rzeczywistości jest to raczej przypadek narożny. Myślę, że bardziej powszechne są systemy, które próbują znaleźć inne rzeczy na obrazach ;-)


1
Dlaczego ludzie odrzucają tę odpowiedź?
Patrick Cornelissen

ponieważ nie zawiera niczego takiego jak algorytm, przepis ani odniesienie.
Ian,

7
Więc nie jest to poprawna odpowiedź, aby wyjaśnić użytkownikowi pytanie, że nie jest możliwe, co próbuje osiągnąć? Stary, możesz być trochę bardziej zwolniony ...
Patrick Cornelissen

Zawiera również fałszywe stwierdzenie „ponieważ komputery nie mogą rozpoznać tego, co jest na zdjęciach”
Daveth3Cat,

Ponieważ nie mogą. Możesz nauczyć się tylko wykrywać określone obrazy, a im większa jest baza przypadków pozytywnych i negatywnych, tym lepiej, ale generalnie nigdy nie uzyskasz rozwiązania tak dokładnego jak człowiek, więc otrzymasz ogromną liczbę fałszywie pozytywne i negatywne.
Patrick Cornelissen

5

Odpowiedź jest naprawdę prosta: można śmiało powiedzieć, że nie będzie to możliwe w ciągu najbliższych dwóch dekad. Wcześniej zapewne otrzymamy dobre narzędzia tłumaczeniowe. Kiedy ostatni raz sprawdzałem, faceci z AI walczyli o zidentyfikowanie tego samego samochodu na dwóch zdjęciach zrobionych pod nieco zmienionym kątem. Zobacz, ile czasu zajęło im uzyskanie razem wystarczająco dobrego OCR lub rozpoznawania mowy. Są to problemy z rozpoznawaniem, które mogą wiele zyskać dzięki słownikom i nadal są dalekie od znalezienia całkowicie niezawodnych rozwiązań, pomimo rzuconych na nie wielu milionów ludzi miesięcy.

Biorąc to pod uwagę, możesz po prostu dodać „ofensywę”? link obok rywalizacji wygenerowanej przez użytkownika i poproś mod krzyż o sprawdzenie napływających skarg.

edytować:

Zapomniałem o czymś: JEŚLI zamierzasz zaimplementować jakiś filtr, będziesz potrzebować niezawodnego. Jeśli twoje rozwiązanie byłoby poprawne w 50%, 2000 z 4000 użytkowników z przyzwoitymi obrazami zostanie zablokowanych. Spodziewaj się oburzenia.


5

Absolwent z National Cheng Kung University na Tajwanie przeprowadził badania na ten temat w 2004 roku. Udało mu się osiągnąć wskaźnik sukcesu 89,79% w wykrywaniu nagich zdjęć pobranych z Internetu. Oto link do jego pracy magisterskiej: Badanie nad wykrywaniem obrazów nagich ludzi na podstawie koloru skóry
Jest w języku chińskim, więc jeśli nie możesz go przeczytać, możesz potrzebować tłumacza.


4

krótka odpowiedź: skorzystaj z moderatora;)

Długa odpowiedź: nie sądzę, że istnieje projekt w tej sprawie, czym jest porno? Tylko nogi, pełna nagość, karły itp. To subiektywne.


3
pytanie brzmi: „Jaki jest najlepszy sposób na programowe wykrywanie obrazów pornograficznych?”, programowo ...
Agusti-N

5
Znam to pytanie, ale jak powiedziałem, nie ma w 100% dokładnego blokera porno, ponieważ porno jest subiektywne. Subiektywny nie może być powiązany z kodem. Ja uważam, że to tylko nagość, inni uważają, że to porno. Lepszym rozwiązaniem jest przycisk „Zgłoś obraz”. Ten sam pomysł co Koistya Navin .NET
RvdK

1
"Karły itp."? Holy non-sequitur, Batman.
Doug McClean

Jest coś takiego jak porno z karłem.
Chris Sherlock,

4

Dodaj obraźliwy link i zapisz md5 (lub inny skrót) obraźliwego obrazu, aby w przyszłości mógł zostać automatycznie oznaczony.

Jak fajnie by było, gdyby ktoś miał dużą publiczną bazę danych obrazu md5 wraz z opisowymi tagami działającymi jako usługa sieciowa? Wiele pornografii nie jest oryginalnymi dziełami (w tym sensie, że osoba, która je ma, prawdopodobnie tego nie zrobiła), a popularne obrazy mają tendencję do unoszenia się w różnych miejscach, więc może to naprawdę zmienić.


8
Wątpię. Jest tak dużo porno (i mnóstwo więcej generowanych z dnia na dzień), że twoje szanse na dwukrotne obejrzenie tego samego zdjęcia są (IMHO) raczej bliskie zeru.
Vilx

Pomyśl o tym, jak często dziewczyna z wanny pojawiała się wszędzie przez jakiś czas. Raz zostałby oflagowany, a wtedy wszyscy inni mogliby tego uniknąć.
rfusca

3
chyba że został przycięty, zmieniono jego rozmiar lub po prostu otwarty i zapisany ponownie przed przesłaniem ..
Blorgbeard jest niedostępny.

Tak, myślałem o tym :( eh, to była myśl.
rfusca

1
Lepsze niż md5, licencja TinEye.
Tobu

2

Jeśli naprawdę masz czas i pieniądze:

Jednym ze sposobów jest 1) napisanie algorytmu wykrywania obrazu w celu ustalenia, czy obiekt jest człowiekiem, czy nie. Można to zrobić przez maskowanie bitów obrazu w celu odzyskania jego „konturów” i sprawdzenia, czy kontury pasują do konturów człowieka.

2) Wydobywam wiele obrazów pornograficznych i wykorzystuję techniki eksploracji danych, takie jak algorytmy C4 lub Optymalizacja roju cząstek, aby nauczyć się wykrywać wzorce pasujące do obrazów pornograficznych.

Będzie to wymagało określenia, jak nagi mężczyzna / kobieta muszą wyglądać kontury ludzkiego ciała w formacie cyfrowym (można to osiągnąć w ten sam sposób, w jaki działają algorytmy rozpoznawania obrazu OCR).

Mam nadzieję, że dobrze się bawisz! :-)


2

Wydaje mi się, że główną przeszkodą jest zdefiniowanie „obrazu porno”. Jeśli możesz to łatwo zdefiniować, prawdopodobnie mógłbyś napisać coś, co by działało. Ale nawet ludzie nie mogą się zgodzić co do tego, czym jest porno. W jaki sposób aplikacja będzie wiedzieć? Moderacja użytkowników to prawdopodobnie najlepszy wybór.


1

Widziałem aplikację filtrującą w sieci, która filtruje obrazy porno, przepraszam, że nie pamiętam nazwy. Był dość podatny na fałszywe alarmy, ale przez większość czasu działał.

Myślę, że główną sztuczką jest wykrycie „zbyt dużej ilości skóry na zdjęciu :)


1
Nie pamiętam też tego badania - ale wykryło krawędź i dopasowało to, co wyglądało na wzory sromów obróconych lub zasłoniętych. Całkiem interesujące z punktu widzenia przetwarzania obrazu.
jim

-1, stanowi komentarz, ale nie daje merytorycznego rozwiązania.
Brad Koch

1

Wykrywanie obrazów pornograficznych jest nadal określonym zadaniem AI, które jest jeszcze bardzo teoretyczne.

Zdobądź zbiorową władzę i ludzką inteligencję, dodając przycisk / link „Zgłoś spam / nadużycie”. Lub zatrudnij kilku moderatorów do wykonania tej pracy.

PS Naprawdę zaskoczony, jak wiele osób zadaje pytania zakładając, że oprogramowanie i algorytmy są wszechmocne, nawet nie zastanawiając się, czy to, czego chcą, można zrobić. Czy są przedstawicielami tej nowej rasy programistów, którzy nie rozumieją sprzętu, niskopoziomowego programowania i całej tej „magii”?

PS nr 2. Pamiętam też, że okresowo zdarza się, że do sądu trafia sytuacja, w której ludzie sami nie mogą zdecydować, czy zdjęcie jest pornografią, czy sztuką. Nawet po orzeczeniu sądu jest szansa, że ​​połowa ludzi uzna tę decyzję za złą. Ostatnia taka głupia sytuacja miała miejsce całkiem niedawno, kiedy strona Wikipedii została zbanowana w Wielkiej Brytanii z powodu okładki płyty CD z nagością.


1

Dwie opcje, które przychodzą mi do głowy (chociaż żadna z nich nie wykrywa programowo pornografii):

  1. Blokuj wszystkie przesłane obrazy, dopóki jeden z administratorów ich nie obejrzy. Nie ma powodu, dla którego miałoby to zająć dużo czasu: możesz napisać oprogramowanie, które wyświetla 10 obrazów na sekundę, prawie jak film - nawet przy tej szybkości człowiek może łatwo zauważyć potencjalnie pornograficzny obraz. Następnie przewijasz do tyłu w tym oprogramowaniu i przyjrzyj się bliżej.
  2. Dodaj zwykłą opcję „oznacz ten obraz jako nieodpowiedni”.

1

BrightCloud serwis internetowy API jest idealny do tego. Jest to interfejs API REST do wyszukiwania witryn internetowych w ten sposób. Zawiera bardzo dużą i bardzo dokładną bazę danych do filtrowania sieci, a jedna z kategorii, dla dorosłych, ma ponad 10 milionów witryn pornograficznych!


1

Słyszałem o narzędziach, które wykorzystywały bardzo prosty, ale dość skuteczny algorytm. Algorytm obliczył względną liczbę pikseli z wartością koloru zbliżoną do niektórych wstępnie zdefiniowanych kolorów „karnacji”. Jeśli ta kwota jest wyższa niż pewna z góry określona wartość, wówczas obraz uznaje się za zawierający treści erotyczne / pornograficzne. Oczywiście ten algorytm da fałszywie pozytywne wyniki w przypadku zbliżeń twarzy i wielu innych rzeczy.
Ponieważ piszesz o sieciach społecznościowych, będzie dużo "normalnych" zdjęć z dużą ilością koloru skóry, więc nie powinieneś używać tego algorytmu do odrzucania wszystkich zdjęć z wynikiem pozytywnym. Ale możesz go użyć, aby zapewnić pomoc moderatorom, na przykład oznaczyć te zdjęcia z wyższym priorytetem,


Właściwie widziałem system podobny do tego w użyciu. Nie jest wystarczająco wiarygodny, aby pozostawić go samemu sobie, ale bardzo dobrze ostrzega moderatora w razie potrzeby. Nie jest to pełny dowód, zwłaszcza jeśli osoba jest zakryta tylko jednym małym, odsłoniętym obszarem. Współczynnik nie działa tak niezawodnie w odwrotnej kolejności.
Tim Post


0

Spójrz na nazwę pliku i wszelkie atrybuty. Nie ma wystarczającej ilości informacji, aby wykryć nawet 20% niegrzecznych obrazów, ale prosta czarna lista słów kluczowych mogłaby przynajmniej wykryć obrazy z opisowymi etykietami lub metadanymi. 20 minut kodowania zapewniającego 20% wskaźnik sukcesu nie jest złym interesem, zwłaszcza jako ekran wstępny, który może przynajmniej złapać kilka prostych, zanim przekażesz resztę moderatorowi do oceny.

Inną przydatną sztuczką jest oczywiście odwrotność: utrzymuj białą listę źródeł obrazów, aby zezwalać bez umiaru lub sprawdzania. Jeśli większość twoich obrazów pochodzi od znanych bezpiecznych uploaderów lub źródeł, możesz je po prostu zaakceptować.




0

To nie jest fizyka jądrowa. Nigdy więcej. Jest to bardzo podobne do rozpoznawania twarzy. Myślę, że najłatwiej sobie z tym poradzić dzięki uczeniu maszynowemu. A ponieważ mamy do czynienia z obrazami, mogę wskazać sieci neuronowe, ponieważ wydaje się, że są one preferowane dla obrazów. Będziesz potrzebował danych treningowych. Możesz znaleźć mnóstwo danych treningowych w Internecie, ale musisz przyciąć obrazy do określonej części, którą algorytm ma wykryć. Oczywiście będziesz musiał rozbić problem na różne części ciała, które chcesz wykryć i utworzyć dane treningowe dla każdej z nich, i wtedy sytuacja staje się zabawna.

Jak powiedział ktoś powyżej, nie da się tego zrobić w 100%. Będą przypadki, w których takie algorytmy zawiodą. Rzeczywista precyzja zostanie określona przez twoje dane treningowe, strukturę twoich sieci neuronowych i to, jak zdecydujesz się zgrupować dane treningowe (penisy, pochwy, piersi itp. Oraz ich kombinacje). W każdym razie jestem przekonany, że można to osiągnąć z dużą dokładnością w przypadku wyraźnych zdjęć pornograficznych.



-1

Nie ma sposobu, abyś mógł to zrobić w 100% (powiedziałbym, że może 1-5% byłoby prawdopodobne) przy dzisiejszej wiedzy. Uzyskasz znacznie lepszy wynik (niż te 1-5%) po prostu sprawdzając nazwy obrazów pod kątem słów związanych z płcią :).

@SO Troll: To prawda.


-1, stanowi komentarz, ale nie daje merytorycznego rozwiązania.
Brad Koch
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.