【Wikipedia】 ImageMagickとImlib2

Perl で作る画像類似検索システムの考察を見ていて使ってみたくなったので、
環境構築した時のメモ

fedora core 6 編


1. まずはライブラリのinstall
$ yum install imlib2
$ yum install imlib2-devel

2. perl module install
cpan> install ExtUtils::CBuilder
cpan> install Module::Build
cpan> install Image::Imlib2
cpan> install Image::Seek

はまった点


- ライブラリを入れないとperl moduleはinstallできない
- imlib2だけでOKだとおもったが、perl moduleをmakeするときに、/usr/bin/imlib2-configを使っている。これはimlib2-develパッケージに含まれている
- ライブラリを入れても、Imge::Seekを入れるまでに依存関係がある。xtUtils::CBuilderとModule::Buildは先にinstallしておかなければいけない

centos編


- first serverの仮想専用サーバつき945円のコースを使っているが、そこに↑の環境を構築したメモ
-- けっこうスカスカに近い環境なので、構築に一苦労した

- ライブラリのinstall。必要になったパッケージは以下のとおり。first server社提供のGUI画面からinstallしたものと、手動でダウンロードしてinstallしたもの含める。
gcc-c++-4.1.2-42.el5 Sun 06 Jul 2008 11:52:58 PM JST
gcc-4.1.2-42.el5 Sun 06 Jul 2008 11:52:58 PM JST
libstdc++-devel-4.1.2-42.el5 Sun 06 Jul 2008 11:52:56 PM JST
libgomp-4.1.2-42.el5 Sun 06 Jul 2008 11:52:56 PM JST
cpp-4.1.2-42.el5 Sun 06 Jul 2008 11:52:56 PM JST
libstdc++-4.1.2-42.el5 Sun 06 Jul 2008 11:52:55 PM JST
libgcc-4.1.2-42.el5 Sun 06 Jul 2008 11:52:55 PM JST
db4-utils-4.3.29-9.fc6 Sun 06 Jul 2008 11:48:46 PM JST
db4-tcl-4.3.29-9.fc6 Sun 06 Jul 2008 11:48:46 PM JST
db4-devel-4.3.29-9.fc6 Sun 06 Jul 2008 11:48:45 PM JST
libXext-devel-1.0.1-2.1 Sun 06 Jul 2008 11:09:04 PM JST
freetype-devel-2.2.1-20.el5_2 Sun 06 Jul 2008 11:07:55 PM JST
freetype-demos-2.2.1-20.el5_2 Sun 06 Jul 2008 11:07:55 PM JST
freetype-2.2.1-20.el5_2 Sun 06 Jul 2008 11:07:54 PM JST
imlib2-devel-1.4.0-1.el5.rf Sun 06 Jul 2008 11:00:21 PM JST
mesa-libGL-devel-6.5.1-7.5.el5 Sun 06 Jul 2008 11:00:05 PM JST
libX11-devel-1.0.3-9.el5 Sun 06 Jul 2008 11:00:05 PM JST
xorg-x11-proto-devel-7.1-9.el5.centos Sun 06 Jul 2008 11:00:04 PM JST
libXdmcp-devel-1.0.1-2.1 Sun 06 Jul 2008 11:00:04 PM JST
mesa-libGL-6.5.1-7.5.el5 Sun 06 Jul 2008 11:00:03 PM JST
libXau-devel-1.0.1-3.1 Sun 06 Jul 2008 11:00:03 PM JST
libdrm-2.0.2-1.1 Sun 06 Jul 2008 11:00:03 PM JST
libXxf86vm-1.0.1-3.1 Sun 06 Jul 2008 11:00:02 PM JST
libX11-1.0.3-9.el5 Sun 06 Jul 2008 11:00:02 PM JST
imlib2-1.4.0-1.el5.rf Sun 06 Jul 2008 10:58:37 PM JST
libid3tag-0.15.1b-3.el5.rf Sun 06 Jul 2008 10:57:39 PM JST
libtool-ltdl-devel-1.5.22-6.1 Sun 06 Jul 2008 10:44:30 PM JST
libtool-ltdl-1.5.22-6.1 Sun 06 Jul 2008 10:44:30 PM JST
pkgconfig-0.21-2.el5 Sun 06 Jul 2008 10:32:20 PM JST

- 手動でinstallしたのは以下。
$ wget http://dag.wieers.com/rpm/packages/libid3tag/libid3tag-0.15.1b-3.el5.rf.i386.rpm
$ rpm -i libid3tag-0.15.1b-3.el5.rf.i386.rpm
$ wget http://packages.sw.be/imlib2/imlib2-1.4.0-1.el5.rf.i386.rpm
$ rpm -i imlib2-1.4.0-1.el5.rf.i386.rpm
$ wget http://packages.sw.be/imlib2/imlib2-devel-1.4.0-1.el5.rf.i386.rpm
$ rpm -i imlib2-devel-1.4.0-1.el5.rf.i386.rpm

はまった点


- rpm -i http://*** でinstallしようとしたけど、エラーでできなかった。一度localにwgetで落としてからinstallしている
- 初期状態でg++がないなど、いろいろとつまずいた
- Template.pmの挙動がfedora core 6 の環境と異なるのか、newでpath指定しないと動かなかった
# これでできた
my $tt = Template->new({ INCLUDE_PATH => '/tmp/',
INTERPOLATE => 1, });
$tt->process('hoge.tt', $vars);

# これはだめ
my $tt = Template->new;
$tt->process(\*DATA, $vars);

1;
__DATA__
ほげほげ
(略)


Imlib2について


- 性能がいいらしい。ImageMagickから乗り換えようか検討したい
-- [http://hibinokoto.jp/archives/2007/10/post-217.html:title]

Image::Seekについて


- ソースを軽く読んでみたところ、類似画像判定には、RGBで判定しているっぽい。類似画像=RGBが似てるという定義なら、GDのIFで同様のことができそうだが、精度の違いはどうだろう?
-- cpan Image::Seek
sub add_image_imlib2 {
my ($img, $id) = @_;
my ($reds, $blues, $greens);
require Image::Imlib2;
my $thumb = $img->create_scaled_image(128,128);
for my $y (0..127) {
for my $x (0..127) {
my ($r, $g, $b,$a) = $thumb->query_pixel($x,$y);
$reds .= chr($r); $blues .= chr($b); $greens .= chr($g);
}
}
addImage($id, $reds, $greens, $blues);
}

-- cpan GD
$index = $image->colorClosestHWB(red,green,blue)

This also attempts to return the color closest in the color table to the red green and blue components specified.
It uses a Hue/White/Black color representation to make the selected color more likely to match human perceptions of similar colors.

If no colors have yet been allocated, then this call returns -1.