простейшей капчи, он хоть и расписал, но моему уму серовно не хватает извилин
чтобы представить себе как это работает, я сейчас покажу код и задам пару
вопросов, кто может ответе на них пожалуйста
<?php
function captcha_recognize($filename) {
$symbols = array( //забиваем массив идентификаторами циферок
'---XX---'.
'-X---XX-'.
'-X----X-'.
'XX----XX'.
'X------X'.
'X------X'.
'X------X'.
'X------X'.
'XX----XX'.
'-X----X-'.
'-XX--XX-'.
'---XX---',
'--------'.
'---X----'.
'-XXX----'.
'XX-X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----'.
'---X----',
'---XXX--'.
'-XX---X-'.
'-X-----X'.
'-------X'.
'------X-'.
'------X-'.
'-----X--'.
'----X---'.
'---X----'.
'--X-----'.
'-X------'.
'XXXXXXXX',
'--XX----'.
'XX---X--'.
'X----X--'.
'-----X--'.
'-----X--'.
'---XX---'.
'-----X--'.
'------X-'.
'------X-'.
'X-------'.
'X----X--'.
'--XX----',
'-----X--'.
'-----X--'.
'----XX--'.
'---X-X--'.
'-----X--'.
'--X--X--'.
'-X---X--'.
'-----X--'.
'XXXXXXXX'.
'-----X--'.
'-----X--'.
'-----X--',
'-XXXXXX-'.
'-X------'.
'-X------'.
'-X------'.
'---XX---'.
'XX---X--'.
'------X-'.
'------X-'.
'------X-'.
'X-----X-'.
'-X---X--'.
'--XXX---',
'---XXX--'.
'--X---X-'.
'-X----X-'.
'XX------'.
'X--XXX--'.
'XX----X-'.
'XX----X-'.
'X------X'.
'X------X'.
'-X----X-'.
'-X----X-'.
'---XX---',
'XXXXXXXX'.
'------X-'.
'-----X--'.
'----XX--'.
'----X---'.
'---XX---'.
'---X----'.
'---X----'.
'--X-----'.
'--X-----'.
'--X-----'.
'--X-----',
'---XX---'.
'-X---XX-'.
'-X----X-'.
'-X----X-'.
'-X----X-'.
'--XXXX--'.
'-X----X-'.
'X------X'.
'X------X'.
'X------X'.
'-X----X-'.
'---XX---',
'---XX---'.
'-X----X-'.
'XX------'.
'X------X'.
'X------X'.
'-X----XX'.
'--XXX--X'.
'-------X'.
'------XX'.
'-X----X-'.
'-X---X--'.
'--XXX---');
$return = ''; //это мы будем возвращать
list($width, $height) = getimagesize($filename); //определяем размер
$source = imagecreatefromgif($filename); //грузим картинку
$im = imagecreatetruecolor($width, $height); //создаём новую
imagecopyresized($im, $source, 0, 0, 0, 0, $width, $height, $width, $height); //и сохраняем её
//а всё потому, что на сервере капча гененируется через imagecreate вместо imagecreatetruecolor и нихера у нас без этого не получится
//кому интересно - попробуйте брать оригинальюную картинку, imagecolorat будет возвращать рандомные данные
imagedestroy($source); //выгружаем, он нам не нужен
$was_new_symbol = false; //будем записывать какой была $new_symbol
for($x=0;$x<$width;$x++) { //гоним по X
$new_symbol = false; //мы ещё на нашли новый тёмный пиксель
for($y=0;$y<$height;$y++) { //гоним по Y
$color = imagecolorat($im, $x, $y); //определяем цвет пикселя
if($color <= 3353395) { //если цвет темнее, значит мы нашли часть циферки на капче
$new_symbol = true; //запоминаем
}
}
if($new_symbol == true && $was_new_symbol == false) { //если в предыдушем цикле мы нашли циферку, а в прошлый раз там все пиксели были светлые, значит точно нашли
$id = ''; //создаём идентификатор
$matches = array(0,0,0,0,0,0,0,0,0,0); //записываем кол-во совпадений
for($y2=4;$y2<=15;$y2++) { //гоним по Y 4 - 15 там размещается циферка по высоте
for($x2=$x;$x2<=$x+7;$x2++) { //гоним по X - X+7 там размещается циферка по ширине
$color = imagecolorat($im, $x2, $y2); //определяем цвет
if($color <= 3353395) { //если пиксель тёмный, пишем в индентификатор "X" иначе пишем "-"
$id .= 'X';
}else{
$id .= '-';
}
}
}
foreach ($symbols as $symbol=>$symbol_id) { //берём наш массив идентификаторов
$len = strlen($symbol_id); //определяем длину идентификатора
for($i=0;$i<$len;$i++) { //гоним по длине и берём по 1му символу ("-" или "X")
if($id[$i] == 'X' && $symbol_id[$i] == $id[$i]) { //если текущий символ "X" и он совпадает с символом идентификатора
$matches[$symbol]++; //записываем это совпадание
}
}
}
arsort($matches); //сортируем совпадания по убыванию
$return .= key($matches); //берём первый ключ - это и есть циферка, которую мы ищем
}
$was_new_symbol = $new_symbol; //запоминаем нашли мы тёмный пиксель или нет за этот прогон
}
imagedestroy($im); //выгружаем капчу из памяти
return $return; //возвращаем строку
}
?>
1) што ето за дивное строение цыферок???
'---XX---'.
'-X---XX-'.
'-X----X-'.
'XX----XX'.
'X------X'.
'X------X'.
'X------X'.
'X------X'.
'XX----XX'.
'-X----X-'.
'-XX--XX-'.
'---XX---',
чё ето за точки кавычки почему так надо??
2) зачем создавать ещо оду картинку?
3)Всё што творится дальше после создания изображения я вобще не могу понять, што как и какисм образом он там переберает??? хто может попорядку обьяснить попонятней?
особенно интерисует вот ето
for($y2=4;$y2<=15;$y2++) { //гоним по Y 4 - 15 там размещается циферка по высоте
for($x2=$x;$x2<=$x+7;$x2++) { //гоним по X - X+7 там размещается циферка по ширине
Спустя 35 минут, 46 секунд (16.09.2011 - 22:12) caballero написал(а):
Цитата |
код для определения простейшей капчи |
В данном случае простейшая - цифры (только цифры) на черно-белом фоне, не покуроченные , определенным шрифтом и размеров.
Найти капчу подходящую под определение (а правильно - распознавание) такоей прогой - большое везение. На мало мальски ценных ресурсах вероятность такого везения равна нулю
Цитата |
но моему уму серовно не хватает извилин чтобы представить себе как это работает, |
писать проги для OCR - не колбасу коньками нарезать.
Цитата |
чё ето за точки кавычки почему так надо?? |
Шаблоны символов.
Цитата |
зачем создавать ещо одну картинку? |
Незачем - никто и не создает - читает рисунок капчи с файла
Цитата |
особенно интерисует вот ето |
часть алгоритма сравнения с шаблоном
Спустя 23 часа, 46 минут, 36 секунд (17.09.2011 - 21:59) qaz333 написал(а):
А можно более исчерпающий отвт? я просил ответить того хто может ответить нормально а не так далёко как вы
Спустя 3 минуты, 45 секунд (17.09.2011 - 22:02) caballero написал(а):
А это и есть исчерпывающий ответ.
Что конкретно непонятно или ненормально?
Может просветите в чем собственно состоит задача?
разобрать код или вам надо капчу распознать?
предполагаю второе раз вы так с этим кодом носитесь. Если да - то забудьте. Этот код ничего не распознает. И накакой нормально сделаную капчу не распознает. Во всяком случае сменить алгоритм капчи на три порядка проще чем под нее распознавалку писать.
Что конкретно непонятно или ненормально?
Может просветите в чем собственно состоит задача?
разобрать код или вам надо капчу распознать?
предполагаю второе раз вы так с этим кодом носитесь. Если да - то забудьте. Этот код ничего не распознает. И накакой нормально сделаную капчу не распознает. Во всяком случае сменить алгоритм капчи на три порядка проще чем под нее распознавалку писать.
Спустя 2 минуты, 56 секунд (17.09.2011 - 22:05) vital написал(а):
Цитата (qaz333 @ 17.09.2011 - 20:59) |
А можно более исчерпающий отвт? я просил ответить того хто может ответить нормально а не так далёко как вы |
А это вполне достаточный ответ. У вас нету знаний для другого, если вы не понимаете даже занчения точек и кавычек в пхп.
Спустя 1 час, 2 минуты, 33 секунды (17.09.2011 - 23:08) Invis1ble написал(а):
caballero
не обращай внимания, у него все ответы плохие
не обращай внимания, у него все ответы плохие

Спустя 1 день, 11 часов, 43 минуты, 17 секунд (19.09.2011 - 10:51) walerus написал(а):
qaz333 - забей на этот код, юзай
Свернутый текст
http://antigate.com
