最近のUbuntuでDiffImgをビルドする
diffは大事。テキストでも画像でも。
OSS画像diffツールの昨今
OSSの画像diffツールとしてはDiffImgが有名。本家プロジェクトは昔懐かしSourceForge(以下SF)にホストされており、近年更新されていない。Ubuntu用のビルドはhttps://launchpad.net/~dhor/+archive/ubuntu/myway?field.series_filter=にあるが、16.04を最後にビルドされていない。このため、20.10(Groovy Gorilla)のような先鋭的Ubuntu環境においては自前でビルドする必要がある*1。
[*1] 先鋭的どころか、18.04(Bionic Beaver)や20.04(Focal Fossa)といった近年のLTS勢でも状況は同じはず
さて、ソースにバグフィックス類の手を加えてコツコツとメンテされているGitHub上のリポジトリが存在する(https://github.com/sandsmark/diffimg)ので、今回はこれを使う。
ビルド環境を整える
ビルドにあたり、依存関係を揃える。DiffImgはQtにがっつり依存しているため、Qtもろもろをインストールする。
$ sudo apt install libopencv-dev libfreeimage-dev qt5-default \ libqwt-qt5-dev qt5-qmake qttools5-dev-tools
DiffImgのドキュメントにはlibqwt-dev
を入れろとあるが、Ubuntu 18.04あたりでパッケージの命名ルールが変わったようで、最新版には存在しない。このため、libqwt-qt5-dev
を指定するのがよい。これに気付かず、ソースからlibqwtをインストールして遠回りをした。
ソースコード取得・ビルド
$ git clone https://github.com/sandsmark/diffimg.git
forkのコード差分を信用すべきではないと考える(まったくもって正しい疑い方だと思う)場合はちゃんと差分を確認するか、SFのコードを拾ってきてほしい。
普段どおりのCMake作法でビルドする。今回はfork版(CMakeでビルドが通るように手を加えられている)を使っているのですんなり行ったけれど、fork版をメンテしているSF版ではすんなりいかないかもしれない。
$ mkdir build $ cd build/ $ cmake .. -- The CXX compiler identification is GNU 10.2.0 -- Check for working CXX compiler: /usr/bin/c++ -- Check for working CXX compiler: /usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done -- Found Qwt: /usr/lib/libqwt-qt5.so (found version "6.1.4") -- Configuring done -- Generating done -- Build files have been written to: /home/muo/workspace/diffimg/build $ make -j ... [100%] Built target diffimg
インストール
diffimg
バイナリが生成されるので、そのまま使うなりsudo make install
するなり好きにやる。うまくビルドできていれば、無事に画像diffをとれる(図1)。
$ diffimg i_183.png i_188.png
これで、老眼入りつつある👀でもやっていける。