PDA

Просмотр полной версии : Капча ВК


Primat6202
24.02.2010, 20:01
Среда:c++ builder
задача:вывести капчу в tbitmap или timage.
подскажите пожалуйста, трое суток голову ломаю :confused:

Chrome~
24.02.2010, 20:50
В чем проблема?

Отправляем какой-нибудь POST запрос. Скажем, тот же POST запрос при авторизации. Сервак может ответить, что требуется ввести капчу. Признаком этого служит значение captcha_sid, которое приходит нам в ответе. Используя это значение, скачиваем капчу, сохраняем либо в памяти, либо на жестком диске, и потом выводим в Image.

Zuldrak
24.02.2010, 20:53
Тож интересует этот вопрос, вот например http://vk.com/captcha.php?s=1&sid=310888503411 как его сохранить в timage ?

RedFern.89
25.02.2010, 00:37
на тебе пример на Delphi. думаю сможешь перевести


uses jpeg;

.........

var
Img : TJpegImage;
Ms : TMemoryStream;
begin
Img := TJpegImage.Create;
Ms := TMemoryStream.Create;
// Запрашиваем картинку и пишем ее в память
Http.Get('http://vkontakte.ru/captcha.php?s=1&sid=' + sid, Ms);
Ms.Position := 0;
// Грузим картинку из памяти
Jpg.LoadFromStream(ms);
Image1.Picture.Graphic := jpg; // Отображаем в Image1
// Чистим память
jpg.Free;
Ms.free;
end;

Zuldrak
25.02.2010, 09:54
Огромное СПАСИБО

Zuldrak
25.02.2010, 09:59
Задам прям тут даб темы не плодить. Раньше я где т находил исходник проги на делфи которая по маске разбирает цифры и буквы на данной ей картинки. Брал вроде с хакера а щас чет не найти . У кого есть дайте ссылочку

Dark_Scorpicore
25.02.2010, 10:07
по маске разбирает цифры и буквы на данной ей картинки.
Такое с контактовской каптчей не пройдет, слишком уж сложная она. Неужели ты думаешь, что такой код, разгадывающий каптчу, даже если бы его написали, был бы выкинут в паблик? ИМХО, программно можно разгадать лишь каптчи вроде такой (http://dmtsoft.ru/img/captcha/dmt-Simple-Captcha-1.png) (ну и различные вариации)

Zuldrak
25.02.2010, 10:55
Я говорю есть в нете исходник проги.в проги вы выбираете картинку которая идет с ней и она пишет цифры и буквы которые на ней. Про контакт я не слова не говорил

cel
25.02.2010, 11:05
Это анти-капча пример на Delphi ,там не прога распазнаёт а Китайцы)

Zuldrak
25.02.2010, 11:07
Да нет же,там есть картинки и она сравнивает с ними

RedFern.89
25.02.2010, 11:10
в контакте в прринципе не такая уж и сложная капча (с параметром "&s=1") думаю FineReader смог бы опознать))

Fliplab
25.02.2010, 12:04
Zuldrak на счес капчи,попробуй для начала ее сделать чернобелой,далее увеличь резкость и сделай символы максимальна тонкими. Потом читай побайтно и определяй что за символ.

Fliplab
25.02.2010, 12:09
Блин заинтриговал прям.буду теперь сидеть и разбирать её

Zuldrak
25.02.2010, 13:44
Че никто не видел такую прогу

RDL_Rider
25.02.2010, 14:00
Да нет же,там есть картинки и она сравнивает с ними
имхо бесполезно, т.к. капчи генерятся абсолютно случайно, с абсолютно случайными сочетаниями букв и цифр, а также с абсолютно случайными смещениями каждой цифры/буквы относительно 0:0

Для автоматического распознавания символов нужно сначала отделить эти символы друг от друга, что довольно проблематично, если они соединены. Затем необходимо скелетизировать и подавать их на вход обученной нейросети.

RedFern.89
25.02.2010, 14:08
незабвайте, что помимо символов, картинка так же содержит кривые линии и т.д. шансы автоматического опознания практически равны 0

Zuldrak
25.02.2010, 14:10
Вы мне не объясняте а исходник той программы дайте которую я выше описал в нете она есть

Kaimi
25.02.2010, 14:12
Вы мне не объясняте а исходник той программы дайте которую я выше описал в нете она есть

У нас его нет. Гуглить умеешь сам наверное. Тема исчерпана?

RedFern.89
25.02.2010, 14:18
я думаю за сутки работы, можно и написать такую прогу. я бы и написал, однако хз, как с графикой работать.. тока основами владею

Fliplab
25.02.2010, 15:37
Сорс называется ocr-characters-recognize,есть на сайте delphisources.ru

Zuldrak
25.02.2010, 17:28
Нет не тоното уже близко

Zuldrak
25.02.2010, 17:43
Image1.Picture.Graphic := jpg; // Отображаем в Image1

как в c++ это сдлеать чет не доходит

Kaimi
25.02.2010, 18:24
Image1.Picture.Graphic := jpg; // Отображаем в Image1

как в c++ это сдлеать чет не доходит

И в гугле забанили вдобавок?
Например:

TJPEGImage *jp = new TJPEGImage();
AnsiString data = IdHTTP1->Get("http://mail.oru.ru/registration.php");
int pos1 = data.Pos("image.php?n=");
int pos2 = data.Pos("\" border=\"1\" width=\"197\" height=\"40");
AnsiString picurl = data.SubString(pos1,pos2-pos1);
TStream *lol = new TMemoryStream();
IdHTTP1->Get("http://mail.oru.ru/"+picurl, lol);
lol->Seek(0, soFromBeginning);
jp->LoadFromStream(lol);
Image1->Picture->Assign(jp);

RedFern.89
25.02.2010, 18:31
кстати да! Assign лучшее присвоение в своем роде))

1n0y
25.02.2010, 19:01
чуваки, разгадывающие капчу вк - http://forum.antichat.ru/thread178309-%F0%E0%F1%EF%EE%E7%ED%E0*.html

Go0o$E
25.02.2010, 21:26
2 Zuldrak
http://www.rapidshare.ru/1392618

sn0w
26.02.2010, 12:25
файнридер может?)) а поповоду детекта капчи - людской фактор имхо, либо фейк)

sn0w
26.02.2010, 12:35
Я говорю есть в нете исходник проги.в проги вы выбираете картинку которая идет с ней и она пишет цифры и буквы которые на ней. Про контакт я не слова не говорил

был отличный и довольно старый пример на codeproject.com, назывался както dmnist , жаль не помню точно. обучаемая нейросеть, распознавание цифирей, обучение сети, ща посмотрел - много наклонировали, и на sourceforge и на том же кодпрожекте

Fliplab
26.02.2010, 12:36
Так,кто подскажет как в капче убрать задние линии?по капче заметно,что это градиент такой же как у цифр справа на лево.и второй вопрос как отделить символы?делая их слишком тонкими 9 как q может определиться.и на счет шрифта,она использует таймс.максимум чево я добился,это убрал задний фон и минимально разделил символы

RedFern.89
26.02.2010, 15:35
вообще думаю так. Символ - это объект, который больше, чем линия, т.е. надо искать, там где кончается символ, и в конце символа ставить белый фон чтоле. Простите, если сказал бред. Но все же может чем то помогу

1n0y
26.02.2010, 20:43
http://forum.antichat.ru/showpost.php?p=1936897&postcount=19

Новый хрумер будет уметь ВК капчу распозновать.
Покупаешь его и спамишь сколько душе угодно.
Рефку дать?)

всё реально, как аказалось..

WanSider
28.02.2010, 07:05
Помучался немножко сегодня с этой капчей, получилось лишь слегка расчистить. С линиями еще побьюсь, но вопрос:

Как организовать сравнение с эталоном? Буквы выкручены волнами и совпадать будут на малый процент. А все образцы насколько я понимаю собрать почти нереально.

Может кто-то механизм объяснить?

P.s.: пока у меня получилось вот так очистить. Надеюсь дальше больше.
http://dump.ru/viewer/preview/biggest/4374722.jpg (http://dump.ru/file/4374722)

Скачать файл VkCapcha-Looker.exe (http://dump.ru/file/4374721)

RDL_Rider
28.02.2010, 13:20
Изображение справа-внизу лишнее, имхо. Терь нужно отделить символы друг от друга и сравнивать с эталонами.

Fliplab
01.03.2010, 11:12
Вобщем заменяй еще в цветной пиксели линий на белый. Только смотри чтоб в букве ево не было.в общем получаца тонкие линии.

W!z@rD
01.03.2010, 11:22
довольно интересно, но проблема в том что буквы искажены. Эталоны эталонами, но имхо тут другой путь нужен.

Fliplab
01.03.2010, 11:42
Ты не прав если при полной очистке резать на буквы и делать их чуть толще то сравнение получица.вобще надо посмотреть сорс антикапчи для даталайф.там тоже буквы искажает,но они с этим боролись.

W!z@rD
01.03.2010, 13:06
> Ты не прав если при полной очистке резать на буквы и делать их чуть толще то сравнение получица.

толще?
как ты будешь определять в какую сторону делать букву "толще"?

Fliplab
01.03.2010, 14:30
Зачем тебе делать в сторону?делать на надо полностью всю.мне кажется ты не совсем понимаешь алгоритм сравнения с эталоном.

Fliplab
01.03.2010, 14:33
В даном случае погрешность пападания будет всегда,ее надо посчитать и учесть.это не капча летитбита где попадание сто.

RDL_Rider
01.03.2010, 21:05
Наоборот, нужно отделять символы друг от друга и делать их ТОНЬШЕ! А потом уже распознавать каждый символ по отдельности.

Fliplab
01.03.2010, 21:10
Ты не понял что я имел в виду:)ну что кто нибудь решил вопрос как убрать эти пересекающиеся линии?

RDL_Rider
01.03.2010, 22:20
похоже ты не совсем понял что я имел ввиду. Линии убирать не обязательно!

Fliplab
01.03.2010, 22:24
Ок.понял.тогда не подскажешь как разделить склееные буквы?

RDL_Rider
02.03.2010, 00:41
А это NP-полная задача(по моему так называется), т.е. нет чёткого алгоритма, 100%-но приводящего к правильному результату. Тут, как говорится, каждый извращается как может (=

gold-goblin
02.03.2010, 00:52
Наоборот, нужно отделять символы друг от друга и делать их ТОНЬШЕ!
С одной стороны верно...
Но если утолщать символ то он будет соответствовать большему количеству более тонких образцов.. Это и + и - одновременно...

RedFern.89
02.03.2010, 01:21
в принципе шрифт капчи выяснен. На сколько известно, буквы повернуты под разным уколном. А что, если считывать по букве(через опред расстояние) и сравнивать с эталоном, проварачивая буквы эти? оО конечно это будет медленно, но все же...

gold-goblin
02.03.2010, 01:25
зная шрифт возможно восстановить правильный угол расположения буквы (по более мелким сигнатурам. или как их лучше назвать =))

RedFern.89
02.03.2010, 02:16
ну что же)) осталось отделить буквы и сравнивать))) кто умеет это? я нет((

RDL_Rider
02.03.2010, 02:28
в принципе шрифт капчи выяснен. На сколько известно, буквы повернуты под разным уколном. А что, если считывать по букве(через опред расстояние) и сравнивать с эталоном, проварачивая буквы эти? оО конечно это будет медленно, но все же...
имхо бред.
1. Проблема "угадывания" расстояния
2. Если делать на нейросетях, то на угол поворота пофик, а если сравнивать попиксельно и задавать порог, то как ни крути.......

RDL_Rider
02.03.2010, 02:32
http://ocrai.narod.ru/

090808
02.03.2010, 03:55
на тебе пример на Delphi. думаю сможешь перевести


uses jpeg;

.........

var
Img : TJpegImage;
Ms : TMemoryStream;
begin
Img := TJpegImage.Create;
Ms := TMemoryStream.Create;
// Запрашиваем картинку и пишем ее в память
Http.Get('http://vkontakte.ru/captcha.php?s=1&sid=' + sid, Ms);
Ms.Position := 0;
// Грузим картинку из памяти
Jpg.LoadFromStream(ms);
Image1.Picture.Graphic := jpg; // Отображаем в Image1
// Чистим память
jpg.Free;
Ms.free;
end;


Под PNG сделай пожалуйста

RedFern.89
02.03.2010, 04:06
090808, все тоже самое, только юзай PngImage

WanSider
02.03.2010, 07:34
Наоборот, нужно отделять символы друг от друга и делать их ТОНЬШЕ! А потом уже распознавать каждый символ по отдельности.

Утончая символы ты лепишь между оставшимися точками интервалы, а значит множишь ошибки в отделении символом друг от друга :rolleyes:

RedFern.89
02.03.2010, 07:43
а утолщая символы, уменьшаешь расстояние от них. не забывай также про линии, ты можешь слить все в кашу. Лучше размер оставить естесственным. ИМХО

dvion
04.03.2010, 16:37
Наоборот, нужно отделять символы друг от друга и делать их ТОНЬШЕ!
Это смотря, что с ними потом будешь делать. Мне кажется, нейро-матричные принципы быстры, но ненадёжны.

В общем: сравнение с эталоном дело пустяковое. Я вытянул это дело на 95%, как оказалось, случняком получилось полууниверсальное))

Как правильно заметили, линии и слившиеся - сложнее.

Я на данный момент уже проверил подходов так с двадцатку, и не нашёл ни одного более-менее универсального. Скажу даже так: от 10 до 30 (на крайняк) 40 % точности разделения и "уборки" - далеко не супер.

Попался 1 вариант, реально дающий возможность разделить символы из любых линий, даже те же капчи с ВК 6-7 символьные тянет.

Но! Ждать 60 сек, до завершения первичного фильтра таким макаром - дело неблагородное)

Кроме того, и в нём свои минусы есть.

Надо ещё подумать, в общем)

RedFern.89
04.03.2010, 17:59
бы ло бы круто избавится от линий всетаки. блин. я с графикой не умею работать((

dvion
04.03.2010, 18:50
RedFern.89,
Дык))

Мне мои умения не очень-то помогают))

Ваще кое-что вроде придумал. Реализую, если что получится, отпишусь)

RedFern.89
04.03.2010, 18:55
dvion, линии можно удалить хотя бы вне символов (т.е. не трогать те, которые сквозь символ проходят). А как ваще с эталоном чото сравнить? можно простенький примерчик какойнить?))

dvion
04.03.2010, 21:04
RedFern.89,
Примерчик - всмысле код? Или теория? Поделиться не вопрос, знать бы чем)

Да, кстати, коэффициенты очень точные нужно использовать, т.е. многое зависит от точности мельчайших деталей)

RedFern.89
04.03.2010, 21:17
dvion,
да, я прошу код)) на Delphi ;желательно)

dvion
05.03.2010, 21:27
RedFern.89,
Ну, в связи с нехваткой времени, сначала теоретически напишу, потом кодом подкреплю, насколько это реально.

Сравнить можно так:

1. Подготовить знак "Х" (его матрицу).
2. Затем можно начать сравнение, следующим образом:
а) изменение "Х" (это может быть выполнено и разворотом, и деформацией)
б) Оптимизировать под него матрицу.
в) После каждого изменения мы находим размер матрицы и рендерим эталом в матрицу "Б".
г) Записываем во временную переменную процент совпадения.
д) После каждой операции мы записываем наибольшую вероятность в результат, и её (вероятности) соответствие в виде знака.
е) Берём следующий эталон для сравнения и начинаем всё заново с пункта а, загрузив исходную подготовленную матрицу "Х", соответственно.

Ну вот, такая вот теория.

WanSider
07.03.2010, 00:24
а) изменение "Х" (это может быть выполнено и разворотом, и деформацией)


Изменений бесчетное количество вариантов. Каждый вариант записать что ли получается? :rolleyes:

RedFern.89
07.03.2010, 01:18
нет. это сожрет всю память, и для сравнения с оригиналом придется сделать цикл на миллион а то и больше)) достаточно записать только основне варианты (a-z, 1-9) и использовать нейронные сети)) там хооть не нужно будет точных данных а хотябы приближенные)) думаю этот вариант полдойддет больше всего)

RDL_Rider
07.03.2010, 01:29
...Тем более что грамотно обученная нейросеть даёт ~95-98% верных распознаваний. Проверено и успешно используется :)

Fliplab
07.03.2010, 02:07
Ха,вот блин тему раскрутили как,а все началось лишь с банального вопроса:)

dvion
07.03.2010, 06:35
RedFern.89,
Ну, не знаю, как насчёт сожрёт память - относительно быстро работает, хотя я уже оставил этот метод. Придумал кое-что поновее, верней, зачитался и честно стырил кое-какие идеи, совместив их))

Точность не потерял, и сами символы теперь меньше, чем за 1 мс определяются. Правда, не совсем стандартным нейро-сетевым способом, но всё-же.

Теперь я вот думаю о линиях. Сбрутить их чтоли. Просто смотрю я на 7-значные капчи и думаю, что вот ну не подходят тут стандартные приёмы по разделению.

Попробовал шуровать мысль, замеченную здесь кем-то (градиент слева-направо, справо налево). Ну да, чистит. Токо вот результат оставляет желать лучшего. Лучше таким макаром не чистить, всё-таки.

Подсчитывать коэффициент взависимости от размеров картинки, и удалять длинные векторы... Тоже не катит. Больно уж высока вероятность потереть что-нить нужное.

Вариант ещё есть в векторе подсчитывать градус отклонения. И если ловится "следующая" линия - собирать их воедино, а потом делить с резким возрастанием длинны, в зависимости от коэффициента размера картинки. - Вот это я ещё не пробовал, как раз ковыряюсь.

Однако опять-таки, хорошо б, еслиб траблой были токо лини - я б их уже давно выкорчевал. Однако, слипшиеся символы - тоже вопрос. И если брутить картинку - то и линии не стОит лапать, имхо. Однако, гляжу я тут на эти компьютерные "поэзии" и понимаю, что вероятность брута в капчах 4 символа - может и составит процентов 80. Что при скорости распознования менее, чем в 50 мс даст желаемый результат. Однако, при более сложных вариантах, время возрастёт, а точность - прямопропорционально упадёт. А ведь можно! Выжимать более 80 процентов, независимо от сложности. Это можно сделать решив две основных задачи. Так что, собсне))
Такие дела)

RDL_Rider,
Это смотря какая нейросеть. 90% инфы, что я нашёл - не пригодна для подобных целей. Но мысль верная. Тем более, удалось кое-что реализовать, как я уже огласил.

Проверено и успешно используется
- Используется, только вот не в целях чтения каптч :-D

Fliplab?
а все началось лишь с банального вопроса
Угу, началось с того, что "не вывести каптчу в TImage" было :-D

RDL_Rider
07.03.2010, 14:33
- Используется, только вот не в целях чтения каптч :-D

..и в этих целях тоже :)

dvion
07.03.2010, 14:38
RDL_Rider,
Пример встудию! А то теоретически - легко говорить, я пока реализаций нормального уровня не встречал. Все (и нейросетевики) только ахают и охают "ой, ой! проще каптча, чем антикаптча! ПисАть нельзя antigate!"

;)

RDL_Rider
07.03.2010, 15:47
Ну, исходники антикапчи я, конечно же, выкладывать не буду, а простых примеров у меня в данный момент нет - все на сгоревшем венике. Но могу порекомендовать на доработку программу Neuro40 - сам с неё когда-то начинал.

dvion
07.03.2010, 15:55
RDL_Rider,
Угу, что ещё предложишь? Файн-ридер? :-D

Штук, вроде Neuro 40 - у самого написано в своё время много, и всё слишком просто.

В общем, как я понял, здесь каждый второй пишет алгоритм распознавания каптч - просто выкладывать он, конечно же, его не будет :-D

;)

RedFern.89
08.03.2010, 00:53
В общем так. Я щас с телефона. Как приеду в питер, сяду за ноут и обучу нейросеть. Дайте мне алгоритм на разделение символов. Поуй на эти линии. Главное алгоритм. Я займусь опознанием и обучением.

StpServer
03.04.2010, 00:47
юзай pda.vkontakte.ru там нет капчи