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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 20:25   #1
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
По умолчанию Скорость выполнения скрипта

Добрый день, есть небольшой скрапт на php который распознает капчу, примерно с 90%-ым совподением

Код:
class hCaptcha 
{
   function Recognition 
   {        
            // Матрица эталонов
        $matrix_etalone = array(
        array("11100111","11000011","10011001","00111100","00111100","00111100","00111100","10011001","11000011","11100111"),
        array("11100111","11000111","10000111","11100111","11100111","11100111","11100111","11100111","11100111","10000001"),   
        array("11000011","10011001","00111100","11111100","11111001","11110011","11100111","11001111","10011111","00000000"),
        array("10000011","00111001","11111100","11111001","11100011","11111001","11111100","11111100","00111001","10000011"),
        array("11111001","11110001","11100001","11001001","10011001","00111001","00000000","11111001","11111001","11111001"),
        array("00000001","00111111","00111111","00100011","00011001","11111100","11111100","00111100","10011001","11000011"),
        array("11000011","10011001","00111101","00111111","00100011","00011001","00111100","00111100","10011001","11000011"),   
        array("00000000","11111100","11111100","11111001","11110011","11100111","11001111","10011111","00111111","00111111"),
        array("11000011","10011001","00111100","10011001","11000011","10011001","00111100","00111100","10011001","11000011"),
        array("11000011","10011001","00111100","00111100","10011000","11000100","11111100","10111100","10011001","11000011"),
    );
         // Бинаризиция
        $img = imagecreatefromjpeg("0.jpeg");  // Тут я хочу что бы изображение бралось из сайта(ссылка у меня есть), как это реализовать?
        $color = imagecolorallocate($img,0,0,0);
        for($i = 0; $i <= imagesx($img); $i++)
        {
            for($j = 0; $j <= imagesy($img); $j++)
            {
                $cxy = imagecolorat($img,$i,$j);
                $resc = imagecolorsforindex($img,$cxy);
                $zn = ($resc[red]+$resc[green]+$resc[blue])/3;
                if ($zn>200)
                    imagesetpixel($img,$i,$j,0x0);
                 else 
                    imagesetpixel($img,$i,$j,0xFFFFFF);
            }
        }
        
        $img_cut = imagecreatetruecolor(35,10);
        imagecolorallocate($img_cut, 255, 255, 255);
        for($i = 5; $i <= 39; $i++)
        {
            for($j = 8; $j <= 17; $j++)
            {
                $col = imagecolorat($img,$i,$j);
                $colres = imagecolorsforindex($img,$col);
                $color2 = imagecolorallocate($img_cut,$colres[red],$colres[green],$colres[blue]);
                imagesetpixel($img_cut,$i-5,$j-8,$color2);
            }
        }
        
        $number1 = array(); $number2 = array();
        $number3 = array(); $number4 = array(); 
        $row; $chsl; 
        for($i = 0; $i <= 9; $i++)
        {
            $chsl = "";
            for($j = 0; $j <= 7; $j++)
            {
                $cxy1 = imagecolorat($img_cut,$j,$i);
                $rescol1 = imagecolorsforindex($img_cut,$cxy1);
                $res = $rescol1[red]+$rescol1[green]+$rescol1[blue];
                if ($res > 163) 
                    $chsl .= "0";
                else
                    $chsl .= "1";
            }
            $number1[$i] = $chsl;
        }       
        
        for($i = 0; $i <= 9; $i++)
        {
            $chsl = "";
            for($j = 9; $j <= 16; $j++)
            {
                $cxy1 = imagecolorat($img_cut,$j,$i);
                $rescol1 = imagecolorsforindex($img_cut,$cxy1);
                $res = $rescol1[red]+$rescol1[green]+$rescol1[blue];
                if ($res > 163) 
                    $chsl .= "0";
                else
                    $chsl .= "1";
            }
            $number2[$i] = $chsl;
        }
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Старый 06.04.2012, 20:26   #2
Arsenx777
Delphi, c++, php
Форумчанин
 
Аватар для Arsenx777
 
Регистрация: 14.03.2011
Сообщений: 288
По умолчанию

Код:
    for($i = 0; $i <= 9; $i++)
        {
            $chsl = "";
            for($j = 18; $j <= 25; $j++)
            {
                $cxy1 = imagecolorat($img_cut,$j,$i);
                $rescol1 = imagecolorsforindex($img_cut,$cxy1);
                $res = $rescol1[red]+$rescol1[green]+$rescol1[blue];
                if ($res > 163) 
                    $chsl .= "0";
                else
                    $chsl .= "1";
            }
            $number3[$i] = $chsl;
        }
        
        for($i = 0; $i <= 9; $i++)
        {
            $chsl = "";
            for($j = 27; $j <= 34; $j++)
            {
                $cxy1 = imagecolorat($img_cut,$j,$i);
                $rescol1 = imagecolorsforindex($img_cut,$cxy1);
                $res = $rescol1[red]+$rescol1[green]+$rescol1[blue];
                if ($res > 163) 
                    $chsl .= "0";
                else
                    $chsl .= "1";
            }
            $number4[$i] = $chsl;
        }
        
        $cnt = 0; $res_namb = "";
        for($i=0; $i<=9; $i++)
        {
            for($j=0; $j<=9; $j++)
            {
                for($k=0; $k<=7; $k++)
                {
                    if($number1[$j][$k]==$matrix_etalone[$i][$j][$k])
                    {
                        $cnt++;
                    } 
                } 
            }
            if((($cnt/80)*100)>91)
            {
                $res_namb = $i;
            }
            $cnt = 0;
        }
        
        for($i=0; $i<=9; $i++)
        {
            for($j=0; $j<=9; $j++)
            {
                for($k=0; $k<=7; $k++)
                {
                    if($number2[$j][$k]==$matrix_etalone[$i][$j][$k])
                    {
                        $cnt++;
                    } 
                } 
            }
            if((($cnt/80)*100)>91)
            {
                $res_namb .= $i;
            }
            $cnt = 0;
        }
        
        for($i=0; $i<=9; $i++)
        {
            for($j=0; $j<=9; $j++)
            {
                for($k=0; $k<=7; $k++)
                {
                    if($number3[$j][$k]==$matrix_etalone[$i][$j][$k])
                    {
                        $cnt++;
                    } 
                } 
            }
            if((($cnt/80)*100)>91)
            {
                $res_namb .= $i;
            }
            $cnt = 0;
        }
        
        for($i=0; $i<=9; $i++)
        {
            for($j=0; $j<=9; $j++)
            {
                for($k=0; $k<=7; $k++)
                {
                    if($number4[$j][$k]==$matrix_etalone[$i][$j][$k])
                    {
                        $cnt++;
                    } 
                } 
            }
            if((($cnt/80)*100)>91)
            {
                $res_namb .= $i;
            }
            $cnt = 0;
        }
        
        echo "$res_namb";
   }
};
 
    $rasp =  new hCaptcha();
    $rasp->Recognition();
1) Как узнать с какой скоротю выполняется данный скрипт( функция Recognition() )? Как вы думаете нормальная ли эта скороть?
2) Как можно оптемизировать данный скрипт?
3) Данная каптча находится на неком сайте, как с помощью php загрузить его(по ссылке) в переменную $img для распознования, без использования не стандартных функций(тоесть чтобы ненадо было скачивать какие то новые библиотеки и прочее...) ?


За помощь буду очень благодарен!

Админам: Я собераюсь это использовать в ознакомительных целях...
Мудр тот, кто знает нужное, а не многое.

Arsenx777 вне форума Ответить с цитированием
Старый 08.04.2012, 10:09   #3
Виталий Желтяков
Старожил
 
Аватар для Виталий Желтяков
 
Регистрация: 19.04.2010
Сообщений: 2,702
По умолчанию

Насторойте xdebug и экспериментируйте.
Виталий Желтяков вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скорость выполнения операций crawter C# (си шарп) 6 12.03.2012 19:57
Скорость выполнения операций crawter Visual C++ 0 11.03.2012 15:42
Скорость выполнения программы написанной на Delphi Terran Общие вопросы Delphi 9 13.01.2012 22:08
Скорость выполнения программы avd Общие вопросы Delphi 3 29.10.2010 17:44
Разбить время выполнения скрипта iankov PHP 9 03.08.2009 09:10