Який найкращий спосіб програмного виявлення порнообразів? [зачинено]


120

Акісмет робить дивовижну роботу з виявлення спам-коментарів. Але коментарі - не єдина форма спаму в ці дні. Що робити, якщо я хотів, щоб щось на зразок akismet автоматично виявляло порно-зображення в соціальній мережі, що дозволяє користувачам завантажувати фотографії, аватари тощо?

Уже є кілька пошукових систем на основі зображень, а також матеріалів розпізнавання облич, тому я припускаю, що це не буде ракетна наука, і це можна зробити. Однак я не маю поняття щодо того, як працює цей матеріал і як мені це робити, якщо я хочу розвивати його з нуля.

Як слід почати?

Чи існує якийсь проект з відкритим кодом для цього?


82
Насправді я б сказав, що це звучить набагато важче, ніж ракетна наука! У нас уже багато ракет, але в AFAIK немає такого «
порнодетектора

4
ЛОЛ. Розпізнавання обличчя існує, але поки що не існує технології розпізнавання статевих органів та грудей. Жорстка удача.
Джон Лімжап

11
Порнографія - це питання географії - до того ж, я впевнений, є безліч знімків, на яких зовсім не видно геніталій чи оголеності, що вважалося б досить жорстким (знову ж - десь). Звучить як робота для розширеного AI, а не простий алгоритм.
Ноам Гал,

2
Я просто натрапив на цю утиліту, яка змусила мене запам'ятати цю тему. Цікаво, чи працює? proofpronto.com/porn-detection-stick-by-paraben.html
Мартін Сміт

1
@ jm666, якщо проблема для вас настільки серйозна, і ви думаєте, що стан мистецтва в цій області покращився за останні два роки, як щодо розміщення щедрості на згаданому дупі? Вам слід зібрати певну увагу, а може, і відповіді саме так.
Майкл Петротта

Відповіді:


69

Це було написано в 2000 році, не впевнений, що стан сучасного пошуку порно взагалі просунувся, але я сумніваюся в цьому.

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

PORNsweeper, здається, має певну здатність відрізняти фотографії людей від зображень речей, які не є людьми, доки зображення є кольоровими. Менш успішно відрізняти брудні фотографії людей від чистих.

Якщо за замовчуванням є середня чутливість, якщо Human Resources надсилає картинку нового розділу в облікових записах, у вас є приблизно 50% шансів отримати його. Якщо ваша сестра надішле вам фотографію її шестимісячної, вона, схоже, може бути затримана.

Справедливо лише зазначити кумедні помилки, як-от дзвонити в порно Mona Lisa, якщо вони є представниками поведінки програмного забезпечення. Якщо виробники зізнаються, що їх алгоритмічний розпізнавальник зображень скидає м'яч 15% часу, то висміюючи його, коли він робить саме це, нерозумно.

Але PORNsweeper тільки здається, що відповідає його заявленим характеристикам в одному відділі - виявлення фактичного порно. На півшляху пристойно виявляти порно, але погано виявляти чисті фотографії. І я не був би здивований, якби в цій галузі найближчим часом не було зроблено великих стрибків.


З тих пір виявлення причин порно прогресувало. Було багато роздумів щодо розпізнавання об'єктів / класифікації зображень / комп'ютерного зору. 2000 рік мені здається кам'яним віком.
Маартен

89

Це насправді досить просто. Ви можете програмно виявляти тони шкіри - а у порнозображень, як правило, багато шкіри. Це створить помилкові позитиви, але якщо це проблема, ви можете передавати такі виявлені зображення за допомогою фактичного модерації. Це не тільки значно скорочує роботу для модераторів, але й дає безліч безкоштовних порно. Це безпрограшно.

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

Цей код вимірює тони шкіри в центрі зображення. Я перевірив 20 відносно ручних "порно" зображень та 20 абсолютно невинних зображень. Він позначає 100% "порно" і 4 з 20 чистих зображень. Це досить високий хибний позитивний показник, але сценарій має на меті бути досить обережним і може бути додатково налаштований. Він працює на світлих, темних та азіатських тонах шкіри.

Основні слабкі сторони з помилковими позитивами - коричневі предмети, такі як пісок та дерево, і, звичайно, він не знає різниці між "неслухняною" та "приємною" плоттю (як знімки обличчя).

Слабкістю з помилковими негативами можуть бути зображення без сильно оголеної плоті (як шкіряна пов'язка), пофарбована або татуйована шкіра, зображення B&W тощо.

вихідний код та зразки зображень


Хочете розмістити 20-лінійну концепцію Python? (-1)
бобобобо

Непогано, +1. Цікаво, що зображення звичайних поверхонь (наприклад, килимової або холодильної поверхні) показують, що вони мають велику кількість шкіри.
бобобобо

6
Спойлер: Фактичної оголеності у зразках зображення немає.
Люк

Це також вважатиме деревину шкірою. Тому що він має точно такий же колір, але різну текстуру. Не кажучи вже про портати.
Маартен

45

Я б швидше дозволяв користувачам повідомляти про погані зображення. Розвиток розпізнавання зображень може зайняти занадто багато зусиль і часу і не буде настільки точним, як людські очі. Набагато дешевше передати цю роботу з модерації.

Погляньте на: Amazon Mechanical Turk

" Механічний турк Amazon (MTurk) є одним із наборів веб-сервісів Amazon, ринку краудсорсингу, який дозволяє комп'ютерним програмам координувати використання людського інтелекту для виконання завдань, які комп'ютери не в змозі зробити".


4
Напевно, є ринок веб-сайту Amazon Mechanical Turk-style, але той, який спеціалізується на таких видах предметів .... :)
Багатий

6
Amazon Mechanical Turk, ймовірно, коштує грошей. Зважаючи на предмет, ви можете подумати, що існує розумна бізнес-модель, де ви можете це зробити безкоштовно.
Анкур

1
Я думаю, що це досить неетичний підхід.
Шовковий полудень

2
@Ankur LOL! Чудова ідея. Зверніться до nic.com, щоб перевірити, чи PornOrNot.com все ще доступний.
Пекка

9
@Noon Silk, чому ти вважаєш це неетичним підходом?
Мазатек

22

15

БУМ! Ось довідка, що містить алгоритм.

Хтось знає, де взяти вихідний код для реалізації Java (або будь-якої мови)?

Це би гойдало.

Один алгоритм під назвою WISE має 98% коефіцієнт точності, але 14% помилково позитивний показник. Тож, що ви робите, ви дозволяєте користувачам позначити 2% помилкових негативів, в ідеалі - з автоматичним видаленням, якщо певна кількість користувачів позначить його, а модератори зможуть переглянути 14% помилкових позитивних результатів.


Ви знайшли алгоритм. Це досить чортово добре. Вихідний код часто залишається як вправа. Зрештою, ми не вказуємо конкретної мови програмування, чи не так?
Ян


8

Існує програмне забезпечення, яке визначає ймовірність порно, але це не точна наука, оскільки комп'ютери не можуть розпізнати, що насправді є на фотографіях (фотографії є ​​лише великим набором значень у сітці без сенсу). Ви можете просто навчити комп’ютер, що таке порно, а що ні, наводячи приклади. Це має той недолік, що він розпізнає лише ті чи подібні зображення.

Враховуючи повторюваний характер порно, у вас є хороший шанс, якщо ви тренуєте систему з кількома помилковими позитивами. Наприклад, якщо ви тренуєте систему з оголеними людьми, вона може позначати зображення пляжу з "майже" голими людьми як порно.

Подібне програмне забезпечення - це програмне забезпечення facebook, яке нещодавно вийшло. Це просто спеціалізується на обличчях. Основний принцип той самий.

Технічно ви б реалізували якийсь функціональний детектор, який використовує баєсову фільтрацію. Функція детектора може шукати такі функції, як відсоток пікселів кольорового кольору, якщо це простий детектор або просто обчислює схожість поточного зображення з набором збережених порнозображень.

Це, звичайно, не обмежується порно, це насправді більше кутовий випадок. Думаю, більш поширеними є системи, які намагаються знаходити інші образи у зображеннях ;-)


1
Чому люди голосують за цю відповідь?
Патрік Корнеліссен

тому що він не містить нічого, як алгоритм, рецепт чи посилання.
Ян

7
Тож це неправдива відповідь, щоб пояснити користувачеві, що задає питання, що насправді неможливо, чого він намагається досягти? Чувак, ти можеш бути трішки більше випущений ...
Патрік Корнеліссен

Це також робить помилкове твердження "оскільки комп'ютери не можуть розпізнати, що насправді є на фотографіях"
Daveth3Cat

Тому що вони не можуть. Ви можете лише навчитися виявляти певні образи, і чим більший ваш позитивний і негативний випадки, тим краще, але в цілому ви ніколи не отримаєте рішення, таке точне, як людське, тож ви отримаєте величезну кількість помилкові позитиви та негативи.
Патрік Корнеліссен

5

Відповідь дійсно проста: сказати, що це не можливо в наступні два десятиліття, можна з упевненістю сказати. До цього ми, мабуть, отримаємо хороші інструменти для перекладу. Востаннє, коли я перевіряв, хлопці з ШІ намагалися ідентифікувати той самий автомобіль на двох фотографіях, знятих із трохи зміненого кута. Погляньте на те, скільки часу їм знадобилося, щоб вони отримали достатньо хороший OCR або розпізнавання мовлення разом. Це проблеми з розпізнаванням, які можуть значно виграти від словників, але все ще далеко не мають цілком надійних рішень, незважаючи на багатомільйонні чоловікові місяці.

Якщо говорити, ви можете просто додати "образливість?" Посилання поруч із створеним користувачем суперечкою і мати перехресну перевірку вхідних скарг.

редагувати:

Я щось забув: якщо ви збираєтесь реалізувати якийсь фільтр, вам знадобиться надійний. Якщо ваше рішення буде на 50% правильним, 2000 з 4000 користувачів з гідними зображеннями будуть заблоковані. Чекайте обурення.


5

Аспірант Національного університету Чен Кунг в Тайвані провів дослідження з цього приводу в 2004 році. Йому вдалося досягти рівня успішності 89,79% у виявленні оголених знімків, завантажених з Інтернету. Ось посилання на його тезу: Дослідження виявлення зображень голих людей на основі кольору шкіри
Це китайською мовою, тому вам може знадобитися перекладач, якщо ви не можете його прочитати.


4

коротка відповідь: використовуйте модератора;)

Довга відповідь: я не думаю, що для цієї справи є проект, що таке порно? Тільки ноги, повна оголеність, бадилля тощо. Її суб'єктивна.


3
питання: "Який найкращий спосіб програмно виявити
порнообрази

5
Я знаю питання, але, як я вже сказав, немає стовідсоткового точного блокатора порно, оскільки порно суб'єктивне. Суб'єктив не може бути пов'язаний з кодом. 1 думає, що це просто нагота, інші вважають її порно. Кращим рішенням є наявність кнопки "зображення зображення". Та сама ідея, що і Koistya Navin .NET
RvdK

1
"Кабачки тощо"? Святий не послідовник, Бетмен.
Дуг МакКлін

Є таке поняття, як порно-попу.
Кріс Шерлок

4

Додайте образливе посилання та зберігайте md5 (або інший хеш) зображення образи, щоб воно могло автоматично позначатися в майбутньому.

Як здорово було б, якби хтось мав велику публічну базу даних зображення md5 разом з описовими тегами, що працюють як веб-сервіс? Багато порно - це не оригінальна робота (оскільки людина, яка має її зараз, мабуть, не зробила), а популярні образи, як правило, плавають навколо різних місць, тому це дійсно може змінити значення.


8
Я сумніваюся в цьому. Там так багато порно (і тонн більше генерується за день), що шанси побачити одну і ту ж картину двічі (IMHO) досить близькі до нуля.
Vilx-

Подумайте про те, як часто дітлахи на деякий час з’являлися у всьому світі. Він би потрапив би під один раз і тоді всі інші могли його уникнути.
rfusca

3
якщо його не обрізали,
змінили

Так, я подумав про це :( е, це була думка.
rfusca

1
Краще, ніж md5, ліцензія TineEye Idée.
Тобу

2

Якщо у вас дійсно є час і гроші:

Один із способів зробити це шляхом 1) Написання алгоритму виявлення зображення, щоб знайти, чи є об’єкт людиною чи ні. Це можна зробити за допомогою бітового малювання зображення, щоб отримати його «контури» та побачити, чи підходить контур людському контуру.

2) Дані шахтують багато порнозображень та використовують методи видобутку даних, такі як алгоритми С4 або оптимізація частинок рою, щоб навчитися визначати візерунок, який відповідає порнообразам.

Для цього потрібно визначити, як повинні виглядати контури людського тіла голого чоловіка / жінки в оцифрованому форматі (це можна досягти так само, як працюють алгоритми розпізнавання зображень OCR).

Сподіваюся, вам весело! :-)


2

Мені здається, що головною перешкодою є визначення "порнообразу". Якщо ви можете це легко визначити, ви, ймовірно, могли написати щось, що спрацювало б. Але навіть люди не можуть погодитись, що таке порно. Як дізнається додаток? Модернізація користувача - це, мабуть, найкраща ставка.


1

Я бачив додаток для фільтрування в Інтернеті, який робить фільтрування порно зображень, вибачте, що не можу згадати ім'я. Він був досить схильний до помилкових позитивів, проте більшу частину часу працював.

Я думаю, що головна хитрість - виявити "занадто багато шкіри на знімку :)


1
Я також не можу пригадати дослідження - але воно виявило ребро і збігалося з тим, що, здавалося, візерунки вульви повертаються або затуманюються. Досить цікаво з точки зору обробки зображень.
Джим

-1, Це дає коментар, але не дає істотного рішення.
Бред Кох

1

Виявлення порнозображень все ще є певним завданням AI, яке ще дуже теоретичне.

Урожай колективної сили та людського інтелекту, додавши кнопку / посилання "Повідомити про спам / зловживання". Або зайняти кілька модераторів для виконання цієї роботи.

PS Дійсно здивований, як багато людей задають питання, припускаючи, що програмне забезпечення та алгоритми всесильні, навіть не замислюючись, чи можна зробити те, що вони хочуть. Чи є вони представниками тієї нової породи програмістів, яка не розуміє апаратного забезпечення, програмування низького рівня та всього того, що "магія позаду"?

PS №2. Я також пам’ятаю, що періодично трапляється така ситуація, коли люди самі не можуть вирішити, чи є фотографія порно чи мистецтвом. Навіть після того, як суд ухвалить, шанси половини людей вважатимуть рішення неправильним. Остання дурна ситуація подібного роду була зовсім недавно, коли сторінку Вікіпедії заборонили у Великобританії через зображення обкладинки компакт-дисків, яка містить деяку наготу.


1

Я можу придумати два варіанти (хоча жоден з них не програмно виявляє порно):

  1. Блокуйте всі завантажені зображення, поки хтось із ваших адміністраторів не перегляне їх. Немає причин, чому це повинно зайняти багато часу: ви можете написати програмне забезпечення, яке показує 10 зображень в секунду, майже як фільм - навіть із такою швидкістю людині легко помітити потенційно порнографічний образ. Потім ви перемотаєтесь в це програмне забезпечення і ознайомтеся ближче.
  2. Додайте звичайну опцію "позначити це зображення як невідповідне".

1

BrightCloud веб - сервіс API ідеально підходить для цього. Це REST API для того, щоб робити пошук веб-сайтів саме так. Він містить дуже великий і дуже точний БД для фільтрування, і одна з категорій, для дорослих, має ідентифіковано понад 10 мільйонів порносайтів!


1

Я чув про інструменти, які використовували дуже простий, але досить ефективний алгоритм. Алгоритм розраховував відносну кількість пікселів зі значенням кольору, близьким до деяких заздалегідь визначених кольорів "шкіри". Якщо ця сума перевищує деяку заздалегідь задану вартість, то зображення вважається еротичним / порнографічним змістом. Звичайно, що алгоритм дасть помилкові позитивні результати для фотографій крупним планом та багатьох інших речей.
Оскільки ви пишете про соціальні мережі, буде багато "звичайних" фотографій з великою кількістю кольору шкіри, тому не слід використовувати цей алгоритм, щоб заперечувати всі фотографії з позитивним результатом. Але ви можете скористатися нею, щоб допомогти модераторам, наприклад, позначте ці зображення з більш високим пріоритетом,


Я фактично бачив систему, подібну до тієї, що використовується. Це недостатньо надійно, щоб залишити його самостійно, але це дуже добре справляє попередження модератора, коли це доречно. Це не повний доказ, особливо якщо людина покрита лише однією невеликою оголеною ділянкою. Коефіцієнт не дуже надійно працює в зворотному напрямку.
Тім Пост

1

Цей виглядає багатообіцяючим. В основному вони виявляють шкіру (за допомогою калібрування, розпізнаючи обличчя) і визначають "шкірні шляхи" (тобто вимірюють частку пікселів шкіри проти пікселів шкіри / пікселів шкіри). Це гідне виконання. http://www.prip.tuwien.ac.at/people/julian/skin-detection


0

Подивіться на ім’я файлу та будь-які атрибути. Немає майже достатньої інформації, щоб виявити навіть 20% неслухняних зображень, але простий чорний список ключових слів дозволить принаймні виявити зображення з описовими мітками або метаданими. 20 хвилин кодування для 20% успішності не є поганою справою, особливо як попередній екран, який може принаймні зафіксувати кілька простих, перш ніж передати решту модератору для судження.

Інший корисний трюк - це навпаки, звичайно, підтримуйте білий список джерел зображення, щоб це дозволяло без модерації та перевірки. Якщо більшість ваших зображень надходять із відомих безпечних завантажувачів або джерел, ви можете просто прийняти їх обов'язково.


0

Я сьогодні не намагатимусь далі визначати види матеріалів, які я розумію, щоб вони були охоплені у цьому скороченому описі ["жорстока порнографія"]; і, можливо, я ніколи не міг досягти успіху в розумному виконанні цього. Але я це знаю, коли бачу, і кінофільм, причетний до цієї справи, - це не те.

- Суддя Верховного Суду США Поттер Стюарт, 1964 рік



0

Це не ракетна наука. Більше не. Це дуже схоже на розпізнавання обличчя. Я думаю, що найпростіший спосіб впоратися з цим - це використовувати машинне навчання. А оскільки ми маємо справу із зображеннями, я можу вказати на нейронні мережі, тому що вони, здається, віддають перевагу образам. Вам знадобляться дані про навчання. І в Інтернеті ви можете знайти тони навчальних даних, але вам доведеться обрізати зображення на певну частину, яку ви хочете, щоб алгоритм виявив. Звичайно, вам доведеться розбити проблему на різні частини тіла, які ви хочете виявити та створити дані тренувань для кожного, і ось дещо стає кумедним.

Як хтось вище сказав, це не можна зробити на 100%. Будуть випадки, коли такі алгоритми виходять з ладу. Фактична точність визначатиметься вашими тренувальними даними, структурою ваших нейронних мереж та тим, як ви вирішите кластерувати дані тренувань (пеніси, піхви, груди тощо, та їх комбінації). У будь-якому випадку я дуже впевнений, що цього можна досягти з високою точністю для явних порнографічних зображень.



-1

Немає способу зробити це 100% (я б сказав, можливо, 1-5% було б правдоподібним) з сучасними знаннями. Ви отримаєте набагато кращий результат (ніж 1-5%), просто перевіривши назви зображень на слова, пов’язані з сексом :).

@SO Тролл: Так правда.


-1, Це дає коментар, але не дає істотного рішення.
Бред Кох
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.