Под недавним постом меня снова попинали на тему того, как хуево работает баянометр и все такое. О его недостатках мне хорошо известно, но, к сожалению это просто ограничения алгоритма который используется(pHash). Соответственно что бы от них избавиться - нужно заменять алгоритм, заново собирать новую базу и т.д. В качестве тестов уже был испробован ORB и SURF, и разные варианты на их основе. Они себя неплохо показали, особенно с поиском кропнутых картинок, но, когда речь заходит о другой деформации картинки в лице шакалов или ватермарков - начинаются большие проблемы. Даже незначительное шакальство они переваривают плохо и начинают давать в разы больше ложно положительных результатов, или наоборот не находить то, что точно должны. Был испробован другой алгоритм, использующий акселерацию ресурсами GPU. Он себя показал неплохо, но требует просто дохуища ресурсов, а без них - просто неюзабелен, ибо время поиска даже на тестовом, не особо большом объеме данных, достигало минут. Арендовать сервер с GPU крайне недешевое удовольствие, потому отпал как вариант. Сейчас на примете есть несколько еще алгоритмов которые можно было бы попробовать, и которые не на столько жрущие, но все ровно сулят существенным увеличением требований к серверу, потому решил провести опрос, дабы понимать вообще стоит тратить время на тесты и проработку вариантов, или оставляем как есть.
Текущий сервер на котором крутиться баянометр обходиться 12$/месяц. Его хватает с достаточным запасом, а благодаря трем реакторчанам на патреоне я могу снять с себя вопрос содержания сервера, за что им отдельное спасибо. Предполагаемая стоимость аренды сервера которого будет достаточна для +- адекватной роботы с терпимой скоростью поиска лежит в диапазоне 40-70$. Брать на себя полную ответственность за спонсирование этого я не готов, потому решил спросить у вас, готовы ли вы оплачивать содержание этого добра, если это будет реализовано. Метод оплаты - patreon / buymeacoffee. Отвечайте пожалуйста честно, с расчетом на своим реальные возможности, а так же учитывая среднесрочное прогнозирование. Спасибо
Да, готов. Могу позволить выделить на это 10$/мес. без какого либо дискомфорта | |
|
20 (1.7%) |
Да, готов. Мой комфортный придел - 3$ или около того | |
|
55 (4.6%) |
Мне бы хотелось что бы это было реализовано, но на финансовую поддержку действа я не готов | |
|
263 (22.1%) |
Забей хуй, и так нормально все работает, а те косяки которые есть - терпимы | |
|
851 (71.6%) |
если сработает - то уже предлагать финансировать на постоянку показывая результат что в тестовом режиме баяны не проходили
Слишком дорогое удовольствие
Плюс, вспоминаю статью чуваков, которым понадобилось находить кропнутые кадры из видео. Они сохраняли в базу phash сделанный с небольшим отступом от краёв кадра. А потом, при сравнении, входное изображение аугментировали, обрезая с разных сторон.
RGB Histogram - худшее из возможных решений. Не пережевывает цветокор, пережатие изображения, ватермарки как и кроп. А еще скриншоты из всякого твиттера передают привет, с одинаковыми показателями.
Угадывать как могло быть обрезано изображение... Да наверное можно, но эффективность такого метода сомнительна + очень затратна по времени
А насчёт затрат времени, поиск идёт за O(n) или O(log(n))?
с некоторыми изменениями, в лице поддержки регенерации всей базы на лету
Чтобы не получилось так, что уважаемые пидоры не рассчитали свои реальные возможности и через пару месяцев, даже из пожертвований по $3 не набралось нужной суммы.
Насколько мне не изменяет память, самым эффективным алгоритмом был SIFT. ORB и SURF не дают такой точности, но и работают быстрее. Вся проблема SIFT - он отрабатывает на CPU 1-3 секунды, если картинки имеют большое количество одинаковых кейпоинтиов. Плюс надо использовать FlannBasedMatcher.knnMatch (для SURF тоже, а вот для ORB юзают BFMatcher). Дальше отбираешь только хорошие кейпоинты, а потом их решейпишь. В итоге на 3 значениях решаешь, баян или нет.
matches = matcher.knnMatch(des1, des2, k=2)
good = [m for m, n in matches if m.distance < 0.6 * n.distance]
src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
Перед сравнением картинки надо перегнать в COLOR_BGR2GRAY, сделать normalize с NORM_MINMAX, потом equalizeHist.
Из вариантов для GPU есть такая моча https://arxiv.org/abs/2112.02906
Работает в разы быстрее SIFT/ORB/SURF, запущенных на cuda_backend, но опять таки нужна видеокарта.
Проверка 10к картинок - 2.5 минуты. Итого, для всей базы в 7 лямов картинок - больше суток
И это при заранее известных кейпоинтах, а не перегенерации
платить за то что не работает постоянно?
баяны когда постит школота по не знанию, то их минусят, а когда олдфаги и кармодрочены, то в коментах пишут, что то подобное "это древний баян и пришло время его запостить." то он улетает в плюсы.
Так что единственный баянометр который работает - это бесплатные местные пидоры.