#!/usr/bin/perl -w use strict; #use Tk; #use Gtk -init; use Image::Magick; my %ca; $ca{"0000000"} = "0"; $ca{"1110111"} = "0"; $ca{"0000011"} = "1"; $ca{"0111110"} = "2"; $ca{"0011111"} = "3"; $ca{"1001011"} = "4"; $ca{"1011101"} = "5"; $ca{"1111101"} = "6"; $ca{"1010111"} = "7"; $ca{"1111111"} = "8"; $ca{"1011111"} = "9"; my $_hlthre = 45; my $_vlthre = 45; # &hlditect($wid, $tht, 0, 0, $gwid, $ght, @oimg); sub hlditect { my($w, $h, $ox, $oy, $xx, $yy, @ar) = @_; my $x; my $y; my $s; my $r; my $c; my $p; # print "#HL w $w, h $h, ox $ox, oy $oy, xx $xx, yy $yy\n"; $c = 0; for($y=$oy;$y<$oy+$h;$y++) { $s = 0; for($x=$ox;$x<$ox+$w;$x++) { $p = $xx*$y+$x; if($ar[$p]>0) { $s++; } } $r = int(($s*100)/$w); if($r>$_hlthre) { $c++; } } return $c; } # &vlditect($wid, $tht, 0, 0, $gwid, $ght, @oimg); sub vlditect { my($w, $h, $ox, $oy, $xx, $yy, @ar) = @_; my $x; my $y; my $s; my $r; my $c; my $p; # print "#ar ".$#ar."\n"; # print "#VL w $w, h $h, ox $ox, oy $oy, xx $xx, yy $yy\n"; $c = 0; for($x=$ox;$x<$ox+$w;$x++) { $s = 0; for($y=$oy;$y<$oy+$h;$y++) { $p = $xx*$y+$x; if($ar[$p]>0) { $s++; } } $r = int(($s*100)/$h); if($r>$_vlthre) { $c++; } } return $c; } sub K { my($gwid, $ght, @oimg) = @_; my $tht; my $hwd; my $hht; my $wid; $wid = $gwid; $tht = int($ght/3); $hwd = int($gwid/2); $hht = int($ght/2); #print "wid $wid, ht $ht\n"; #print "tht $tht\n"; #print "hwd $hwd, hht $hht\n"; my $v1; my $v2; my $v3; my $v4; my $v5; my $v6; my $v7; $v1 = &vlditect($hwd, $hht, 0, 0, $gwid, $ght, @oimg); $v2 = &vlditect($hwd, $hht, 0, $hht, $gwid, $ght, @oimg); $v3 = &hlditect($wid, $tht, 0, 0, $gwid, $ght, @oimg); $v4 = &hlditect($wid, $tht, 0, $tht, $gwid, $ght, @oimg); $v5 = &hlditect($wid, $tht, 0, $tht*2, $gwid, $ght, @oimg); $v6 = &vlditect($hwd, $hht, $hwd, 0, $gwid, $ght, @oimg); $v7 = &vlditect($hwd, $hht, $hwd, $hht, $gwid, $ght, @oimg); if(0) { print "v1 $v1\n"; print "v2 $v2\n"; print "v3 $v3\n"; print "v4 $v4\n"; print "v5 $v5\n"; print "v6 $v6\n"; print "v7 $v7\n"; } my $sig = ($v1>0 ? "1": "0").($v2>0 ? "1": "0"). ($v3>0 ? "1": "0").($v4>0 ? "1": "0").($v5>0 ? "1": "0"). ($v6>0 ? "1": "0").($v7>0 ? "1": "0"); # print STDERR "sig $sig\n"; if(defined $ca{$sig}) { # print STDERR "FOUND ".$ca{$sig}."\n"; # print $ca{$sig}; return $ca{$sig}; } else { # print STDERR "ERROR\n"; # print "@"; return "@"; } } # Lck($image) sub Lck { my ($xi) = @_; my @ximg; my $r; my $x; my $y; my $p; my $tv; my $wd; my $ht; $wd = $xi->Get('columns'); $ht = $xi->Get('rows'); for($y=0;$y<$ht;$y++) { for($x=0;$x<$wd;$x++) { $p = $y*$wd+$x; $tv = $xi->Get("pixel[$x,$y]"); $ximg[$p] = ($tv eq '65535,65535,65535,0' ? 0 : 1); # print $ximg[$p]."\n"; # if($ximg[$p]==0) { print $ximg[$p]."\n"; } } } $r = &K($wd,$ht,@ximg); # print $r; #$xi->Display(); return $r; } my $ti = Image::Magick->new; my $xxx; $xxx = $ti->Read($ARGV[0]); #print "width ".$ti->Get('columns'), " height ".$ti->Get('rows')."\n"; my $wd; my $ht; $wd = $ti->Get('columns'); $ht = $ti->Get('rows'); #$ti->Display; my ($x1,$x2,$x3,$x4,$x5,$x6,$x7,$x8,$x9,$xa); my ($y1,$y2,$y3,$y4,$y5,$y6,$y7,$y8,$y9); my ($u1,$u2); my ($v1,$v2); my ($lw,$l0,$l1,$l2,$l3,$l4,$l5,$l6,$l7,$l8,$l9); $x1=$wd*0.018; $x2=$wd*0.065; $x3=$wd*0.935; $x4=$wd*0.982; $y1=$ht*0.0137; $y2=$ht*0.049; $y3=$ht*0.951; $y4=$ht*0.986; $x5=$wd*.0966; $x6=$wd*.338; $y5=$ht*.9568; $y6=$ht*.9806; $x7=$wd*.412; $x8=$wd*.565; $x9=$wd*.664; $xa=$wd*.906; $u1=$wd*.341; $u2=$wd*.926; $v1=0; $v2=$ht*.065; $lw=$wd*(.0266+0.014); $l0=$wd*(.4125-0.007); $l1=$wd*(.4533-0.007); $l2=$wd*(.4933-0.007); $l3=$wd*(.5341-0.007); $l4=$wd*(.6633-0.007); $l5=$wd*(.7050-0.007); $l6=$wd*(.7516-0.007); $l7=$wd*(.7925-0.007); $l8=$wd*(.8391-0.007); $l9=$wd*(.8800-0.007); my $ndarea; $ndarea = $ti->Clone(); $ndarea->Crop(geometry=> ''.$u2-$u1.'x'.$v2.'+'.$u1.'+'.$v1); my ($il0,$il1,$il2,$il3,$il4,$il5,$il6,$il7,$il8,$il9); $il0 = $ti->Clone(); $il0->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l0.'+'.$v1); $il0->Set(monochrome=>"True"); $il1 = $ti->Clone(); $il1->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l1.'+'.$v1); $il1->Set(monochrome=>"True"); $il2 = $ti->Clone(); $il2->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l2.'+'.$v1); $il2->Set(monochrome=>"True"); $il3 = $ti->Clone(); $il3->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l3.'+'.$v1); $il3->Set(monochrome=>"True"); $il4 = $ti->Clone(); $il4->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l4.'+'.$v1); $il4->Set(monochrome=>"True"); $il5 = $ti->Clone(); $il5->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l5.'+'.$v1); $il5->Set(monochrome=>"True"); $il6 = $ti->Clone(); $il6->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l6.'+'.$v1); $il6->Set(monochrome=>"True"); $il7 = $ti->Clone(); $il7->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l7.'+'.$v1); $il7->Set(monochrome=>"True"); $il8 = $ti->Clone(); $il8->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l8.'+'.$v1); $il9 = $ti->Clone(); $il8->Set(monochrome=>"True"); $il9->Crop(geometry=> ''.$lw.'x'.$v2.'+'.$l9.'+'.$v1); $il9->Set(monochrome=>"True"); my $oq = ''; my $v; $v = &Lck($il0); $oq .= $v; $v = &Lck($il1); $oq .= $v; $v = &Lck($il2); $oq .= $v; $v = &Lck($il3); $oq .= $v; $v = &Lck($il4); $oq .= $v; $v = &Lck($il5); $oq .= $v; $v = &Lck($il6); $oq .= $v; $v = &Lck($il7); $oq .= $v; $v = &Lck($il8); $oq .= $v; $v = &Lck($il9); $oq .= $v; print "SHOTNOTE $oq ";