アーカイブ

2011年04月

カテゴリ:
ちょっくら必要になったので、画像比較を検討して、Image::Seek がどうもあれだったので、

類似画像検索システムを作ろう

様を参考に、というか全部同じで。opencv, c, python を全部 perl で。

速度は、まだ観てません。Imager 便利すぎ。関数名は内容とあってないかも。きにしない。

#!/usr/local/bin/perl

use strict;
use warnings;
use Imager;
use List::Util qw(min sum);
use List::MoreUtils qw/each_array/;

sub calc_hist_intersection {
    my ($hist1, $hist2) = @_;
    my $total;
    my $ea = each_array( @$hist1, @$hist2 );
    while(my ($his1, $his2) = $ea->()) {
        $total += min($his1, $his2);
    }
    return $total / sum(@$hist1);
}

sub equalize_64 {
    my $cc = shift;
    return 32  if ($cc < 64);
    return 96  if ($cc < 128);
    return 160 if ($cc < 196);
    return 224;
}

sub equalize_rgb_64 {
    my ($cr, $cg, $cb) = @_;
    return equalize_64($cr), equalize_64($cg), equalize_64($cb);
}

sub rgb_to_bin_64 {
    my ($red, $green, $blue) = @_;
    return 16 * int($red / 64) + 4 * int($green / 64) + int($blue / 64);
}

sub get_lazyhistgram_64 {
    my $img = shift;

    my $lazy_histgram = [ map { 0 } 0..64 ];

    my $colors = $img->getcolorusagehash;
    my @rgb;
    foreach my $k (keys %{$colors||{}}) {
        @rgb = unpack("C*", $k);
        $lazy_histgram->[rgb_to_bin_64(equalize_rgb_64(@rgb))]++;
    }

    return $lazy_histgram;
}

sub compare_images {
    my ($filename1, $filename2) = @_;

    my $img = Imager->new or die;

    $img->read(file => $filename1) or die $img->errstr;
    my $hist1 = get_lazyhistgram_64($img);

    $img->read(file => $filename2) or die $img->errstr;
    my $hist2 = get_lazyhistgram_64($img);

    return calc_hist_intersection($hist1, $hist2);
}

warn compare_images($ARGV[0], $ARGV[1]);

1;


getcolorusagehash が便利すぎる。

ヒストグラムは、mysql の text カラムにいれとく。どうせ比較しないと近いかどうかわからないので、64カラムのテーブルとかしてもあまりいいことないですよね。きっと。

カテゴリ:
knoppix の慣れない感が将来に深刻な禍根を残すことになりそうだったので負けといわれようとも redhat 系をいれることにした。で、centos 5.6 の netinstall 。これは便利。

http://nobuneko.com/blog/archives/2010/10/centos_55usb.html

にしたがい、riken 指定。例によってキーボードも使いにくい vaio ux90ps なのですが、なんと途中で 「ぼうず、vnc でやらねぇか?」 って言われて歓喜。なんのハードルもなく vnc サーバが起動してそとから X のインストーラでインストール続行しました。
やっぱみんな vaio ux のキーボードは使いにくいと思ってたんだなぁ。

カテゴリ:
knoppix_v6.4.4CD_20110130-20110301 を vaio ux90ps というゼロスピ(といいながらファンはあるよ)に install した。
なぜ knoppix かというと、ubuntu 10.10 netbook remix が入らなかったから。インストールが 3/7 くらいから進まない。頑張ったらいけるかも感はあったけど、なにしろこの vaio のキーボードはうちにくいとかうちずらいとか、そういうレベルじゃない。のと、なにしろポインティングデバイスが腐ってて、いや、Win で使ってる分にはまぁ普通だったんだけど、Linux だとデバドラの関係か何か知りませんがとにかく使えない。ちょっと押したらクリック状態になっちゃって何ていうかもう無理状態。なのでサクリっとあきらめて puppy linux とか knoppix とか試して、knoppix のほうがよかったので、knoppix を knoppix インストールして、vaio は knoppix に knoppix りました。

ssh の自動起動がうまくいかないので調べたら /etc/rc*.d/* を全然起動してくれないんですねこいつ。で、みたら /etc/rc.local に

SERVICES="cups"

for i in $SERVICES; do
[ -x /etc/init.d/"$i" ] && /etc/init.d/"$i" start >/dev/null 2>&1
done


とか書いてある。いいけどね・・・。cups ssh として終了。

このページのトップヘ

見出し画像
×