Pull to refresh

Comments 51

Спросили бы «Какое изображение скручено по часовой?».
«Какое изображение забавнее выглядит?»
«Какое изображение я загадал?»
UFO landed and left these words here
А смысл подсовывать капчу ботам, если они её всё равно обойдут? Имхо, намного удобнее и действеннее ловушки ставить.
UFO landed and left these words here
UFO landed and left these words here
Человек не будет, а «шпана и неадекват» с деньгами, заплативший за скрипт взлома каптчи — увы, будет =).
UFO landed and left these words here
UFO landed and left these words here
UFO landed and left these words here
Можно было бы сделать такую штуку: если вы бот, то введите капчу с картинки. :)
Вы недооцениваете невнимательность и глупость некоторых пользователей) Потом сотнями посыпятся вопросы «ПАЧИМУ НИРАБОТАЕТ????? Я ВСЁ ПРАЛЬНО ВЫБИРАЮ, А МЕНЯ НИПУСКАЕТ!!!!» :)
UFO landed and left these words here
Если каптчу будут распознавать только боты, это тоже хорошо: не распознал белый текст на белом же фоне — значит, человек ты, проходи, милейший!
UFO landed and left these words here
Любая общая каптча очень легко ломается хотя бы одним из этих способов:
а) Аутсорсом живым индусам/китайцам (которые только и делают, что целый день разгадывают присылаемые им каптчи за копейки)
б) Пробросом каптч по схеме: держим какой-нибудь популярный порносайт, на котором крутим каптчу, но не свою, а с ломаемого ресурса. Живой человек ради контента разгадывает, а мы для валидации отправляем его ввод на целевой сервер. Сервер сказал: «свой, проходи» — говорим то же самое на своём ресурсе.
Имхо эта борьба щита и меча никогда не закончится, сколь бы искусно изощрённые методы защиты ни придумывали. До сих пор нет 100% защиты от взлома реальных банковско-денежных систем (включая фальшивомонетчество), хотя что-что, а деньги защищать есть огромный стимул и имеются средства.
Кажись, Митник ещё сказал, что если в системе есть человеческий фактор — она ломается проще простого =).
UFO landed and left these words here
а как быть, если на картинке изначально будет что-то вроде спирали, да еще и с нечеткими линиями? :)
Самое страшное если оно еще и скручиваться в противоположную сторону будет.
В результате скручивания они станут сильно чётче и Собель их надетектит чуть более чем дофига.
И к стати сказать далеко не только Собель, но и любой другой оператор выделения края.
В демо проверил неправильный ввод.
«No, Mr. Robot, you shall not pass!»
Убило.
Вообще, скручивание плодит края, так что задачу можно решать анализом спектра пространственных частот.
Или использовать оператор выделения края оптимизированный вообще не находить краёв в нормальном изображении, а только когда скрутка их наплодит, и решение принимать на основании суммы всех пикселов после детектора, которую можно посчитать и в самом детекторе. Минимальное значение, суть не искаженное изображение.
Идея — шикарна.

Вместо слэша при сборке пути до картинки нужно использовать os.sep
os.path.join лучше, потому что:
* умеет правильно работать с абсолютными и относительными путями
* не добавит дублирующих слешей
* эта функция предназначена для формирования путей

Потренируйтесь, и напишите свою функцию которая будет работать аналогично os.path.join
Вот примеры для тестов

os.path.join('/home','usr')
os.path.join('/home/','usr')
os.path.join('/home/','/usr')


Зачем мне писать уже готовую функцию?
Зачем рассуждать о преимуществах использования данной функции в отрыве от конкретной ситуации?

Я предлагаю исправить код на:
img = cv2.imread(dir + os.sep + str(i) + '.jpg')

Вы на:
img = cv2.imread(os.path.join(dir, str(i) + '.jpg'))

Весь спор — не более чем мнение каждого из нас о том, что такое «pythonic way».
Мне нравится мой вариант.

Кто-то может и вместо оставшегося плюса в вашем варианте какой-нибудь «более правильный» способ формирования строки обосновать. Добавив этим (с моей точки зрения) нечитаемости и наколбасив символов, которые можно не колбасить.
Я не говорю, что вашем варианте есть изьян.

Как и pawnhearts я утверждаю, что os.path.join — правильнее использовать как в общем так и в данном кокнретном случае. Правильнее — потому что всегда для склейки пути стоит использовать os.path.join и забыть о проблеме переносимости, дубликатов слешей, относительности путей,… Даже на секунду не надо задумываться, питоник/непитоник, больше символов/меньше, для склейки путей надо использовать os.path.join

По поводу читабельности и «наколбасить» символов тоже не соглашусь. Код

img = cv2.imread(os.path.join(dir, '%s.jpg'%i)) 

отлично читается, тут дословно написано: «объединиться путь к файлам»

Как только в коде вы увидите os.path.join — значит формируется путь к файлу, когда в коде используются знакомые общепринятые конктрукции — такой код всегд будет читаться лучше.
Мне нравится.

Я к стыду своему думал, что минимальный код для форматирования строки:
'%s.jpg' % (i)
Интересно, будет ли работать такой подход — покрутить на разные углы и прокоррелировать с исходным изображением? Предположительно, наиболее закрученные изображения должны давать более высокие значения корреляции при одинаковых углах поворота.
Просто выводить 3 разных картинки, 1 из которых не скручена.


Возможно, немного сложнее оригинала, но всяко проще рекапчи. Как такое разгадывать будете?)
UFO landed and left these words here
UFO landed and left these words here
А, извиняюсь, вижу слайдер. Хм, в любом случае, если вместо морфинга там будет даваться несколько различных изображений, одно из которых не искажено, то разгадать капчу станет сложнее.
А потом капчу спросит гугл.
Неужто нет алгоритма, который определит, что большинство линий изогнуты по одинаковому алгоритму? :) В скрученном изображении не бывает прямых, каждая линия — спиралевидна.
Можно использовать разные алгоритмы искажения. Например, как в эффектах Photo Booth:



Но, как было сказано выше, даже если разместить 6 картинок с одной правильной, то при случайном тыке — будет 30% правильных распознаваний, что вполне себе нормальный результат.

9 картинок, 3 правильные
UFO landed and left these words here
c(9,3)=84, все равно большая вероятность угадать
UFO landed and left these words here
UFO landed and left these words here
Я уже не помню комбинаторику, разве не 1/9*1/8*1/7? В любом случае этот шанс достаточно низок, чтобы при разумном количестве попыток блокировать ip на часов 6 :).
UFO landed and left these words here
А если скручивание будет относительно нескольких центров вместо одного — сработает?
UFO landed and left these words here
Only those users with full accounts are able to leave comments. Log in, please.