Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2014, 13:07   #1
Zooma
Пользователь
Пользователь
 
Аватар для Zooma
 
Регистрация: 06.06.2011
Сообщений: 18
По умолчанию Шаблонное распознавание простейшей капчи, ошибка в шаблоне

Делаю шаблонное распознавание капчи по этой статье xakep.ru/41033. При сравнение шаблона цифры пять, результата не было. Решил проверить, оказывается шаблон неправильный, хотя всё посчитал вроде правильно, начиная с нуля. Код за меня писать не надо, нужна подсказка. (Полный скрипт ниже)
PHP код:
<?
$data 
"/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDABQODxIPDRQSERIXFhQYHzMhHxwcHz8tLyUzSkFOTUlBSEZSXHZkUldvWEZIZoxob3p9hIWET2ORm4+AmnaBhH//2wBDARYXFx8bHzwhITx/VEhUf39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f39/f3//wAARCAAQAC0DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwDoLrU2gv8A7Ii2wYorAzXHl7iSRgDac9P1rRHTmqOowXN3HJbIsHkSptZ3Y7l9SBjB7Y5FWpbeKeLyp40lTj5XUMD+dAD2YIpZiAoGST0AqrYX320z/umjET7Ru6sMAg47delSy2kEtqbZowISNuxflAHtjpVew0/7HPdPudllcFd0rOcBQOcnrnP6UATTahZ28hjnu4InHVXkAP5E1NHIkqK8bq6MMhlOQRUM1tLJIWS9uIh/dRYyB+ak1NGpRFVnZyByzYyfyAFAH//Z";

$data base64_decode($data);
$im imagecreatefromstring($data);
imagegif($im'./original.gif');

$width imagesx($im);
$height imagesy($im);
$white imagecolorallocate($im255255255);    
$black imagecolorallocate($im000);        
  
//Цикл перевода капчи в монохромное изображение
for($i=0;$i<$width;$i++) {
    for(
$j=0;$j<$height;$j++) {
        
// Получаем RGB пикселя по координате
        
$color=imageColorAt($im,$i,$j);
        
// Разбиваем RGB на Red,Green,Blue и записываем каждую составляющую в свою переменную
        
list($r,$g,$b)=array_values(imageColorsForIndex($im,$color));
        
//Сравнение белого ли цвета пиксель
        
if(($r>=131 && $r <= 256) && ($g>=131 && $g <= 256) && ($b>=131 && $b <= 256)) {
            
imagesetpixel($im,$i,$j,$white); // Установка пикселя в белый
        
}
        else {
            
imagesetpixel($im,$i,$j,$black); // Установка пикселя в чёрный
        
}
    }
}

// Представление картинки в двоичном виде
for($j=0;$j<$height;$j++) {
    for(
$i=0;$i<$width;$i++) {
        
$color=imageColorAt($im,$i,$j);
        list(
$r,$g,$b)=array_values(imageColorsForIndex($im,$color));
        
$pixels[$j][$i] = ($r==&& $g==&& $b==0) ? 0;  // Замена пикселей на свои обозначения
        
echo $pixels[$j][$i]; // Вывод бинарной матрицы
    
}
    echo 
"<br>";
}
// Out
imagegif($im'./mono.gif');
echo 
"<br>Оригинальное изображение капчи: <img src=original.gif></img><br> Бинарное изображение капчи : <img src=mono.gif></img><br>";
imagedestroy($im);
// Ищем координаты
for($j=0;$j<$height;$j++) { // сначала высота 
    
for($i=0;$i<$width;$i++) { // потом ширина
        
if($pixels[$j][$i] == 1) {
            
$pX $i
            
$pY $j;
            
$i $width
            
$j $height;
            if(
            
            
$pixels[$pX][$pY]==&&     
            
$pixels[$pX+4][$pY]==&&        
            
$pixels[$pX][$pY+3]==&&     
            
$pixels[$pX+4][$pY+4]==&& 
            
$pixels[$pX+4][$pY+7]==&& 
            
$pixels[$pX][$pY+8]==1       
            
)
            {
                
$symbol_5 5;
            }
            else 
$symbol_5 "not recognized.";
        }
    }
}
echo 
"--------------------<br>";
echo 
"pX = $pX<br>pY = $pY<br>";
echo 
"--------------------<br>";
echo 
"Result - ".$symbol_5;
echo 
"<br>--------------------<br>";
// Проверка шаблона
echo $pixels[$pX][$pY]."<br>";            /* $pixels[$pX+1][$pY+1]  Будет 1 */    
echo $pixels[$pX+4][$pY]."<br>";        // 1        
echo $pixels[$pX][$pY+3]."<br>";         /* $pixels[$pX][$pY+3]       Будет 1 */
echo $pixels[$pX+4][$pY+4]."<br>";         // Тут должна быть 1
echo $pixels[$pX+4][$pY+7]."<br>";        // Тут должна быть 1
echo $pixels[$pX][$pY+8];                 // Тут должна быть 1
echo "<br>--------------------";

?>
Для распознавания цифры 5 идёт шаблон. (Кусок кода ниже)
PHP код:
if(   
 
$pixels[$pX][$pY]==&&      
 
$pixels[$pX+4][$pY]==&&         
 
$pixels[$pX][$pY+3]==&&      
 
$pixels[$pX+4][$pY+4]==&&  
 
$pixels[$pX+4][$pY+7]==&&  
 
$pixels[$pX][$pY+8]==1        

 { 
   
$symbol_5 5

else 
$symbol_5 "not recognized."
Там проверяются координаты в бинарной матрице изображения. Если в указанных координатах существуют единицы то цифра определена.
Для составления шаблона, вывел матрицу на экран и посчитал все нужные мне координаты и записал в код для проверки шаблона. Проблема заключается в не определении координат. То есть координаты я посчитал, но при выполнении скрипта выдаёт в тех координатах, которые я посчитал, нули.
Zooma вне форума Ответить с цитированием
Старый 05.10.2014, 21:33   #2
Zooma
Пользователь
Пользователь
 
Аватар для Zooma
 
Регистрация: 06.06.2011
Сообщений: 18
По умолчанию

Тема вверх
Zooma вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распознавание капчи bilibian Общие вопросы Delphi 3 16.07.2014 23:46
Распознавание капчи михончик Фриланс 0 27.03.2013 11:57
Распознавание капчи russian-stalker Свободное общение 9 13.02.2011 08:34
Распознавание капчи. Alex Cones Общие вопросы Delphi 20 11.01.2011 14:41
Шаблонное распознавание текса. Как хранить двухцветные шаблоны? TwiX Мультимедиа в Delphi 1 29.03.2010 09:23