Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Распознание цифр на изображении, Практикум 
:(
    Опции темы
CyClon
Дата 7.11.2006, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Я это уже как-то читал, токо мало чем помогло smile)) По теории я вроде делаю все правильно, но я не знаю, или погрешность какая-то существует или еще что. В общем цвета разные. Лимит цвета до 1000 индексов, а пофиг фон сравнивается.


--------------------
user posted image
PM   Вверх
capitan
Дата 26.1.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 602
Регистрация: 27.2.2005
Где: Москва

Репутация: нет
Всего: 13



Да, написать распознавалку captcha не так просто, но возможно. Я например ради интереса написал распознавалку для captcha  с почтового сервера http://www.nm.ru/. Пример можно глянуть на http://capitanstudio.net.ru/captcha_nm/index.php   Процент распознавания 100%. Картинка лёгкая. Белыми цифрами по синему фону. Вот сам код:
Код

<?
$filename = 'http://www.nm.ru/cgi-bin/defence.cgi';
//$filename = '6.gif';
$width1 = 10;
$height1 = 10;
$per1 = 5;
$per2 = 5;

// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width -$width1;
$newheight = $height -$height1;
$width = $width-$width1;
$height = $height -$height1;

// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromgif($filename);

// Resize
imagecopyresized($thumb, $source, 0, 0, $per1, $per2, $newwidth, $newheight, $width, $height);

// Output
//imagegif($thumb);

for ($i = 0; $i < $newwidth; $i++){
    
        for ($j = 0; $j < $newheight; $j++){
        $se[$i][$j] = (imagecolorat ($thumb, $i, $j)); 
            
        }            
    }
imagegif($thumb, 'test.gif'); 
imagedestroy($thumb);

echo '<img src="test.gif" /><br>';
$captcha_code ='';
for ($ish = 1; $ish <= 9; $ish++){
$img = imageCreateTrueColor(75, 20);
$background_color = imagecolorallocate ($img, 255, 255, 255); //white background
$black = imageColorAllocate($img, 0, 0, 255);    

//print_r ($se);
$sum_let =0;
$nach ='';
$captcha =0;
$array_col ='';

if($ish == '1'){$ish1=0;$ish2=10;}
if($ish == '2'){$ish1=10;$ish2=20;}
if($ish == '3'){$ish1=20;$ish2=25;}
if($ish == '4'){$ish1=25;$ish2=35;}
if($ish == '5'){$ish1=35;$ish2=43;}
if($ish == '6'){$ish1=43;$ish2=50;}
if($ish == '7'){$ish1=50;$ish2=56;}
if($ish == '8'){$ish1=56;$ish2=65;}
if($ish == '9'){$ish1=65;$ish2=73;}

for ($w = $ish1; $w < $ish2; $w++){
$ws = count($se[$w]);
for ($w1 = 0; $w1 < $ws; $w1++){ 

if($se[$w][$w1]=='16777215' AND $nach==''){$nach=$w1;}
if($se[$w][$w1]=='16777215'){
$array_col[] = '16777215'; 
$w3= $w1- $nach;
$captcha=$captcha+$w3;
imagesetpixel($img, $w, $w1, $se[$w][$w1]);    
}

}    
}

//header("Content-Type: image/png");
//imagepng($img);
imagepng($img, 'test.png'); 
imagedestroy($img);

if($captcha=='21' AND array_sum($array_col)=='234881010'){$captcha_code .= '0';}
if($captcha=='31' AND array_sum($array_col)=='234881010'){$captcha_code .= '1';}
if($captcha=='42' AND array_sum($array_col)=='251658225'){$captcha_code .= '2';}
if($captcha=='37' AND array_sum($array_col)=='251658225'){$captcha_code .= '3';}
if($captcha=='10' AND array_sum($array_col)=='268435440'){$captcha_code .= '4';}
if($captcha=='57' AND array_sum($array_col)=='318767085'){$captcha_code .= '5';}
if($captcha=='30' AND array_sum($array_col)=='301989870'){$captcha_code .= '6';}
if($captcha=='28' AND array_sum($array_col)=='201326580'){$captcha_code .= '7';}
if($captcha=='47' AND array_sum($array_col)=='318767085'){$captcha_code .= '8';}
if($captcha=='42' AND array_sum($array_col)=='301989870'){$captcha_code .= '9';}
}

echo '<b>Секретный код:</b> '.$captcha_code;
?>


Написал за 20 минут.  Лень было делать красивый код, думаю и так всё понятно. 
Обрезаем картинку, делаем трассировку по цифрам и ищем белые пиксели, дальше считаем их и точки по оси Y. Сравниваем с эталоном и получаем ответ.
PM MAIL WWW ICQ   Вверх
CyClon
Дата 22.2.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: нет
Всего: 4



Спс за код, посмотрю, может что хорошее вычерпну smile))


--------------------
user posted image
PM   Вверх
-SMall-
Дата 8.6.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.5.2007

Репутация: нет
Всего: нет



Есть ли шансы распознать вот эти варианты?

1. user posted image
2. user posted image
PM MAIL   Вверх
Golda
Дата 9.6.2007, 22:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: нет
Всего: 42



Шансы всегда есть   smile

Основная слабость первой captcha: шумовые линии значительно тоньше линий цифр. А значит, легко убираются операциями математической морфологии (сжатие/расширение). Отсутствие пересечений и разные цвета позволяют легко отделить буквы друг от друга.

Во второй сначала убирается чересполосица. Сравниваем количество черных и белых пикселей на вертикали (для надежности можно работать с площадью узкой полоски шириной чуть больше ширины буквы) и если количество черного превосходит - инвертируем цвета. А можно и просто вычислить шаг полос. Он же не меняется, как и их ширина. Беспорядочные точки убираются сжатием/расширением. Буквы не пересекаются и не деформированы, что тоже не добавляет стойкости captcha. Возможно, проблемой являются жирные полосы, которые могут пересекать буквы. Чтобы сказать, насколько они являются проблемой, нужно увидеть их закономерности (количество/длина/расположение/пересечение с буквами и друг с другом) на большем количестве примеров. 

Но это все, если кто-то займется именно Вашей captcha. Если Ваш ресурс не представляет какой-то исключительной ценности, вероятность того, что ею займутся спамеры пропорциональна ее распространенности в сети.    smile 

Это сообщение отредактировал(а) Golda - 9.6.2007, 22:18


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
XseZ
Дата 30.7.2007, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 30.7.2007

Репутация: нет
Всего: нет



может кто поможет с кодом   smile 
user posted image
PM MAIL   Вверх
Golda
Дата 30.7.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: нет
Всего: 42



Э нет, так не пойдет. На этом форуме помогают понять, как построить защиту, а не как взламывать чужие системы


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Графика | Следующая тема »


 




[ Время генерации скрипта: 0.0441 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.