Автор: saskiuhia
Я сделал баянометр аккордеонометр - JR Accordion
TL;DR
https://jr-accordion.ivaxor.com
Зачем?
Да, я и сам не знаю. Интереса ради, судя по всему. Я крайне редко делаю посты и даже никогда не пользовался ни одним баянометром до этого, хотя знал про их существование. Те кто постят бояны вечно говорят, что задумчивый баянометр вечно не работает/молчит, но я полагаю что они лжецы. У меня включены донаты на GitHub, но не думаю что это будет хоть сколько-то коммерчески успешным проектом (лучше задонать на сервера джою) . Было бы классно, если бы дали медальку “Сделал баянометр”.
Что оно умеет?
Находить похожие медиа файлы (картинки, гифки и видео) и вставки (BandCamp, Coub, SoundCloud, YouTube и Vimeo). Медиа можно искать как по ссылке, так и загружая файлы предварительно выбрав насколько “похожие” результаты искать. Адаптивный дизайн должен достаточно хорошо работать как на ПК, так и на телефонах. Есть история поисков которую можно очистить. Так-же есть игра “Найди баян” на сайте (не рекомендую) и в телеграмм (рекомендую) напоминающая Tinder. В итоге, классический баянометр + дополнительные фишки.
Что оно не умеет?
На текущий момент нет разделения на SFW/NSFW при поиске или голосовании, поэтому всегда есть шанс получить сюрприз. 18+ посты в телеграмм закрыты мозайкой (вероятно, когда-то это появиться и на сайте).
Почему аккордеонометр?
Насколько я знаю, до этого во всех реализациях баянометров использовался pHash как основа. Я же решил пойти другой дорогой и взял за основу AI. Да-да, чёртовые нейронные сети добрались даже до баянометров (хотя JoyReactor уже имеет встроенную нейронку для создания описания картинок и постов). В связи с этой разницей есть большой плюс: он легко находит обрезанные, отзеркаленые, отфотошопленные картинки с фильтрами/ватермарками и без. Однако так-как это не хэши, а скорее “образы” то будут “галлюцинации”. Технически, в pHash тоже могут быть коллизии, но нейронки подвержены этому ещё больше. Например, ему очень тяжело даются черно-белые или насыщенные контентом картинки (вроде рисунков-набросков или длинных страниц комиксов). Поэтому этот как баян, но аккордеон: для большинства почти одна и та же вещь, но разница всё таки есть.
Как оно работает?
В гифках или видео берётся один кадр посередине видеоряда. Изображение пережимается до 224 х 224 пикселей и отдаётся нейронке. На выходе получается вектор (добро пожаловать в 9 класс на геометрию) который потом хранится и сравнивается с другими векторами.
Как оно работает технически?
Веб на Angular, Bootstrap и RxJS. Google Analytics для сбора статистики. Бэк на ASP.NET Core через background сервисы и WebAPI. Общение с JoyReactor через GraphQL и HTTP. PostgreSQL как SQL база, кэп. Qdrant как веторная база. RabbitMQ как message broker. ElasticSearch как база логов. Хостится через Docker контейнеры. CloudFlare как CDN и прокси. В качестве нейронной сети была выбрана CLIP ViT-B/32 в версии ONNX от OpenAI, а дистанция векторов сравнивается через Cosine. Если очень интересно, то исходный код доступен на GitHub. Можно даже поднять локально, ибо требования не сильно большие (~6Гб ОЗУ). Правда, уйдет ~2 месяцев только чтобы скачать и обработать весь джой (при условии что вас не забанят за DDoS). Кстати, это всего лишь 30Гб на диске (SQL + вектора).
Насколько тернистый путь был?
Было весело. Работать над этим проектом я начал где-то за пару дней до НГ. Так-что суммарно до первой “стабильной” версии ушло чуть больше 4 месяцев. За это время я успел разъехаться с женой, завести двух кошек, начал ходить в зал и скинул 10кг. 2 раза попал в бан по IP за “DDoS” GraphQL и img серверов: первый раз на неделю и второй раз почти на месяц - пришлось сидеть на любимом джое исключительно через мобильный интернет. Потратил почти месяц скачивая картинки и забыл что по умолчанию внизу картинки есть жёлтый баннер который явно влияет на качество результатов - пришлось всё удалить и начать сначала. Пару раз приходилось чинить ¼ миллиона записей в базе, ибо что-то когда-то пошло не так. Периодически нахожу интересные теги которые технически “баяны”, но фактически нет: Вечерний костёр(БЛ), Loop (Anime) и т.д.. Несмотря на то, что я построил этого франкенштейна я всё ещё не понимаю кучи вещей: как работает тег удалённое, как работает перенос постов между cc и com и много чего ещё. Так-что если есть олды/админы готовые пояснить за джой - буду очень рад. Нужен ли тег “пидоры помогите”?
Я шизик и боюсь что мою историю поисков в фурри-фута фэндомах сольют. GDPR?
Сервис предоставляется as-is: без каких-либо гарантий и/или претензий. Большая часть ваших данных хранятся в вашем браузере (LocalStorage и IndexedDb), а именно история поисков и отметка где вы остановились в “Найди баян”. В базе на сервере остаётся IP адрес или Telegram User Id проголосовавшего в чистом виде (лень было хэшировать, может быть когда-то сделаю). Вероятно корпорация добра будет сливать ваши данные через Google Analytics (не читал terms of service), а у меня на это просто не будет времени. Trust me bro. Ну или именно ты можешь провести аудит безопасности за бесплатно.
У меня есть идея/я нашёл баг/ты пидор. Куда отправлять голубя?
Сразу скажу, что галлюцинации - это не баг, это фича. Для общих запросов и баг репортов есть GitHub (ссылка внизу справа страницы). Просьба не загружать туда 18+ контент, ибо вам будет бан. Для всего остального есть ЛС и комментарии.
Какие планы дальше?
Понаблюдать как оно работает и работает ли вообще. Заодно посмотрим каких хуёв предложений добавят комментаторы. Были планы сделать локализацию сайта на инглише. Светлая тема или какие-то приколы на прадники (8 марта, НГ и т.д.). Хотел добавить поддержку тегов чтобы сделать “Найди баян” ещё умнее (можно будет сразу пропускать посты из anon, политики и т.п.), но придется пройтись по всем постам за всё время ещё раз. Можно ещё добавить поддержку com и других доменов, если появиться понимание как это всё работает.
Комментировать
Подробнее https://reactor...