UPD: Когда мне после добавления этого загрузили в качестве профиля дик пик и при этом оказалось что алгоритмы этого сервиса посчитали его как безопасное фото, то пришлось перейти на AWS, кстати там тоже вполне себе тариф, вот ссылка
Ранее я писал про то, как я делал бот для знакомств в телеграм (ссылка), на удивление в него начали добавляться люди, но некоторые из них в качестве фото профиля выбирали фото порнографического характера, мне это не совсем понравилось и я подумал, "я конечно не гугл, но ограничивать такое дело нужно" и сломя голову "полетел" изучать информацию.
Как оказалось есть много способов это сделать, и вот некоторые из них:
1 - Написать и обучить свою нейросеть (это сразу в топку, просто я не гугл и у меня нет такого количества ресурсов, знаний и особенно времени)
2 - Использовать какие-то куски кода с GitHub где что-то "распознается" (тоже в топку, код не мой, не понятно как оно работает и нет уверенности в завтрашнем дне, ну и опять же таки нужно еще и разобраться как оно у них работает)
3 - Использовать API cторонних сервисов, и тут мне стало интересно, так как в этом есть несколько плюсов, как минимум распознавание не очень желательного контента будет не на моем сервере, что значительно позволит действовать более выгодно в плане экономики😁
Как вы уже поняли я выбрал третий вариант, в ходе гугления я выяснил, что API для такого дела (кстати там много чего можно распознавать) предоставляют такие сервисы:
- Amazon Rekognition
- Google
- Microsoft
- Yahoo
- Algorithmia
- Clarifai
- DeepAI
- Imagga
- Nanonets
- Sightengine
- X-Moderator
Так как на основной части некоторых сервисов из списка я уже был и использовал все лимиты, я выбрал Imagga API, начал читать доки и оказалось что все проще чем я думал, по факту вы отправляете им картинку, а они вам в ответ возвращают JSON в котором помимо другой инфы и есть то что мне нужно, процент увиденной запрещенки на фото, от него я и могу отталкиваться.
Внимание: Все что дальше идет взято из доков, так что если вы их прочитали то все что ниже вам уже не нужно😁
Так вот, реализация (базовая, это все описано в доке если что) ну и еще важный момент, там есть лимиты, базовый аккаунт это как я понял 1000 запросов на проверку в месяц, дальше это стоит денег (но у меня пока не такая мощная динамика добавления пользователей в мес, по этому мне этот вариант подходит), ну а еще я использую Python
1 - После регистрации вам выдадут api_key и api_secret, его нужно будет сохранить от сторонних глаз
1 - Лимит, перед тем как отправлять на проверку фото и тратить время можно проверить а не уперся ли я в лимит, и как оказалось это вполне реализуемо, их API предоставляет хорошие доки по API эндпоинтам:
Для проверки лимитов нужно обратиться к эндпоинту /usage, сделать это можно многими языками программирования, та даже curl подойдет, я выбрал python (пример по факту взят из тех же доков)
Зная эти данные уже можно городить проверки и проверки проверок на лимиты, а вот теперь по самом распознавании, все так же просто:
Тут мы просто вычитываем все байты из картинки, отправляем их на сервера, там оно собирается в кучу и анализируется сервисом, в ответ приходит JSON, вот данные:
[{'confidence': 97.8026885986328, 'name': {'en': 'nsfw'}}, {'confidence': 2.19188809394836, 'name': {'en': 'underwear'}}]
Этот вывод говорит что картинка на 97.8026885986328 процентов nsfw (не безопасная)
оперируя этими данными и можно сделать проверки. Если не найдете адекватное обьяснение по выводу то вот - https://docs.imagga.com/#nsfw_beta-categorizer, в целом можно было бы намного больше написать, но это все уже написали в документации.