Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Авторские статьи (https://forum.antichat.xyz/forumdisplay.php?f=31)
-   -   Распознавания элементарных Captcha часть I (https://forum.antichat.xyz/showthread.php?t=51141)

Xszz 25.01.2008 14:45

ppm Говорит , что нет пакета GD . Как быть ?

Xszz 25.01.2008 14:59

Разобрался :)

Xszz 25.01.2008 18:18

можно ли распозновать Gif картинку , она тоже простейшая ? на белом фоне красные цифры .
размер 60х20 . Чем можно разбить картинку на подобную диаграмму чтоб вычислить координаты пикселей . Зависит ли цвет фона \ цифр при исчислении ?
спасибо

Shred 03.03.2008 19:15

Цитата:

Сообщение от -Hormold-
А возможно такое на php?

Можно, как грит вики библиотека GD входит в стандартную поставку интерпретатора PHP 4.3, так что осталось просто переписать скриптец на пхп :)

vvs777 04.03.2008 18:57

Цитата:

можно ли распозновать Gif картинку , она тоже простейшая ? на белом фоне красные цифры .
размер 60х20 . Чем можно разбить картинку на подобную диаграмму чтоб вычислить координаты пикселей . Зависит ли цвет фона \ цифр при исчислении ?
спасибо
Можно. Открываешь ее в тотал коммандере в листере - там при наведении мыши внизу координаты пишутся. В принципе под это и пейнт пойдет. наводишься, запоминаешь координаты, чикаешь картинку, распознаешь начиканное. Все лучше перегнать в ч/б изображение - так удобнее считать.

в пхп гд тоже есть так что можно. Я вообще этими делами на Дельфях занимаюсь.

demonoid 10.07.2008 23:27


Тренировался в написании модулей ( классов )


Код:

package BOCR;
use strict;
use GD;
use constant {
                RED  => 44,
                GREEN => 18,
                BLUE  => 4,
};

my %c = ( 0 => '7:4,0:4' ,
          1 => '2:2,3:2' , 
          2 => '7:9' , 
          3 => '0:1,0:8' , 
          4 => '5:2,6:9' , 
          5 => '0:0,0:1' , 
          6 => '3:4,0:4' ,
          7 => '7:0' ,
          8 => '2:4,3:4' ,
          9 => '7:4,7:7' , );


sub new {
    my $class = shift;
    my $self  = {  DEBUG  => 0,
                    NAME  => undef,
                    @_,
                };
    return bless $self, $class;
}

sub recognition {
    my $self = shift;
    unless ( defined $self->{ NAME } ){
        $self->{ NAME } = shift ;
    }
   
    my $count = 0;
    my $image = GD::Image->newFromJpeg( $self->{ NAME } );
    for ( my $x0 = 5; $x0 <= 41; $x0 += 9 )
    {
        print "\t\tНачало новой позиции цифры \n\n" if $self->{ DEBUG };
        foreach my $n ( sort keys %c )
        {
            print " Цифра : #$n\n\n" if $self->{ DEBUG };
            foreach ( split ',',$c{$n} )
            {
                my ( $x,$y ) = split ':';
                print "Координаты : x = $x y = $y ; " if $self->{ DEBUG };
                my ( $r,$g,$b ) = $image->rgb( $image->getPixel( $x+$x0,$y+5 ) );
                print "RGB : r = $r g = $g b = $b\n" if $self->{ DEBUG };
                if  ( ( RED>=$r )&&( GREEN>=$g )&&( $b=BLUE ) ){
                    $count++;
                    print "Совпадение #$count : цифра #$n ; координаты : x = $x y = $y \n" if $self->{ DEBUG };
                }
                if ( ( $count == 2 ) || ( $count == 1 ) && ( $n == 2 ) || ( $count == 1 ) && ( $n == 7 ) ){
                    $count = 0;
                    print "Найдена цифра : '$n' \n" if $self->{ DEBUG };
                    $self->{ NUMBER } .= $n;
                    last;
                }
            }
            $count = 0;
          print "\n" if $self->{ DEBUG };
        }
    }
    print "Результат : $self->{ NUMBER }\n" if $self->{ DEBUG };
    return $self->{ NUMBER };
}

1;

Использывать примерно так :

Код:

#!/usr/bin/perl -w

use strict;
use BOCR;

my $i = new BOCR(  DEBUG => 1, # можно и без отладки =]
                    NAME  => 'b.jpeg' );
print $i->recognition;


Пример отладки :


Код:

$ perl b.pl
                      Начало новой позиции цифры

 Цифра : #0

Координаты : x = 7 y = 4 ; RGB : r = 236 g = 198 b = 68
Координаты : x = 0 y = 4 ; RGB : r = 28 g = 14 b = 4
Совпадение #1 : цифра #0 ; координаты : x = 0 y = 4
.....
 Цифра : #6

Координаты : x = 3 y = 4 ; RGB : r = 36 g = 14 b = 4
Совпадение #1 : цифра #6 ; координаты : x = 3 y = 4
Координаты : x = 0 y = 4 ; RGB : r = 28 g = 14 b = 4
Совпадение #2 : цифра #6 ; координаты : x = 0 y = 4
Найдена цифра : '6'
.....
Результат : 6099



Время: 20:54