PDA

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


Zabuldon
29.09.2008, 00:36
Народ вот подскажите ка пишуться распознователи капч =) мот у кого нить пример есть?

rushter
29.09.2008, 00:42
<?php
$rand = rand(10000,99999);
for($i = 0; $i < 5; $i++)
{
$arr[$i] = substr($rand, $i, 1);
}
$im = imagecreate(89,20);
imagecolorallocate($im, 34, 34, 34);
$a = 0;
for($i = 0; $i < 5;$i++)
{
$color = imagecolorallocate($im, 255, 255, 255);
imagestring($im, 3, $a += 14, 4, $arr[$i], $color);
}
header("Content-type: image/jpeg");
imagejpeg($im, '', 100);
?>
вот пример,вроде isis писал его.

Zabuldon
29.09.2008, 00:54
<?php
$rand = rand(10000,99999);
for($i = 0; $i < 5; $i++)
{
$arr[$i] = substr($rand, $i, 1);
}
$im = imagecreate(89,20);
imagecolorallocate($im, 34, 34, 34);
$a = 0;
for($i = 0; $i < 5;$i++)
{
$color = imagecolorallocate($im, 255, 255, 255);
imagestring($im, 3, $a += 14, 4, $arr[$i], $color);
}
header("Content-type: image/jpeg");
imagejpeg($im, '', 100);
?>
вот пример,вроде isis писал его.

эмм... а это разве не сама капча?? О_о

а если к примеру на капче нелинейные искажения есть? тогда что делать?

DIAgen
29.09.2008, 01:00
Народ вот подскажите ка пишуться распознователи капч =) мот у кого нить пример есть?
Смотри раздел статьи там было про распознование...

Chaak
29.09.2008, 07:49
Там только на перле. Очень интересует php.

GreenBear
29.09.2008, 08:00
принцип то не меняется.

.:nbd:.
29.09.2008, 08:55
Есть рабочий пример на С++ http://libcaca.zoy.org/wiki/PWNtcha сам юзал. Если есть хотя бы поверхностные знания С разобраться в коде и переписать на пыхе не проблема.

Shadow_p1raT
29.09.2008, 17:56
Там только на перле. Очень интересует php.
Вот хорошая статейка от NOmeR1 (php)

http://forum.antichat.ru/thread60049.html

Zabuldon
29.09.2008, 20:49
Ребят просмотрел все статейки, но нигде нет ответа на вопрос:
Что делать если на картинку наложены нелинейные искажения??

З.Ы. язык программирования не важен важен алгоритм...

KillDead
29.09.2008, 21:14
Надо копать в сторону нейройных цепей, т.е. когда производится обучение системы.
Один из алгоритмов

1) Бьем наш рисунок на одинаковые прямоугольные области, в каждом из которых находится строго 1 символ + возможно какой-то мусор. Это легко сделать для капч из PHPBB - там символы всегда на одних и тех же местах, просто повернуты под углом.

2) В каждом прямоугольном участке находится один символ, нам надо его распознать. Для этого мы проходим по всем пикселям этого участка, цвет каждого пикселя умножаем на определенное число Wi, и потом все вместе складываем. Это и есть нейронная сеть в простейшем виде. Вопрос только в этих числах Wi, которые называются весовые коэффициенты - и показывают "вклад" каждого пиксела в общую сумму. Нам надо подобрать эти числа так, чтоб итоговая сумма для разных символов капчи всегда попадала в разные диапазоны. То есть если на картинке цифра 1, то как бы она ни была повернута мы должны на выходе получить сумму всех пикселов, к примеру, от 30000 до 40000, а если на картинке цифра 2, то у нас сумма всегда должна попадать в другой диапазон (например от 10000 до 12000).

Таким образом мы по сумме пикселов всегда гарантрованно определяем символ, изображенный на картинке. Теперь дело за малым - найти все эти весовые коэффициенты, то есть ОБУЧИТЬ нашу нейронную сеть.

Способов обучения есть много, но все они подразумевают, что вы будете показывать вашей сети картинку и говорить, что на ней изображено - и так много раз. Так что без своего генератора капчей не обойтись.

Возьмем изначально для каждого пиксела весовой коэффициент равный единице. То есть мы тупо складываем все пиксели на картинке и получаем какое-то число. Даже на данном этапе уже нетрудно заметить, что для восьмерки это число будет получаться всегда больше, чем для единицы, так как в восьмерке больше закрашенных пикселов. Но вот к примеру 8 от 0 отличается не так сильно. Чтоб она попала в "старший" диапазон, нам надо тем пикселам, которые образуют центральную перегородку, придать бОльший вес по сравнению с остальными. Тогда как только на картинке в этом месте оказывается группа закрашенных пикселов - у нас автоматически сумма сильно вырастает, и 8 от 0 мы легко можем отличить. Но проблема в том, что в этой же области находятся и пикселы на цифрах "3" и "5" - соответственно их суммы тоже вырастут. Значит надо калибровать дальше. Посмотрим, сколько сейчас получаются суммы для 3 и для 5. Допустим, получаются примерно одинаковые. Как их отличить? Опять же, придать бОльший вес тем пикселам, которые отличают 3 от 5 (и в идеале от всех других цифр). Ну и так далее.

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


Есть уже реализованная прога http://www.cap-cap.ru/- всё что надо- сохранить все цифры-буквы в папку с прогой и запустить её с опр параметрами.

Если не страшно, можно почитать теорию http://www.intuit.ru/catalog/human/expert/

Zabuldon
29.09.2008, 21:25
Надо копать в сторону нейройных цепей, т.е. когда производится обучение системы.
Один из алгоритмов


Есть уже реализованная прога http://www.cap-cap.ru/- всё что надо- сохранить все цифры-буквы в папку с прогой и запустить её с опр параметрами.

Если не страшно, можно почитать теорию http://www.intuit.ru/catalog/human/expert/

т.е. мини ИИ чтоль? я правильно понял?

diehard
30.09.2008, 02:04
Фигня это всё, индусов запряги или негров, они тебе распознают по дешовке

Zabuldon
30.09.2008, 18:25
Разобрался начал писать как закончу кину в паблик