| 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
|