今回は画像の拡大とノイズ除去を行うWebサービスであるwaifu2xから変換のみの機能を切り出したwaifu2x-converter-cppを紹介します。6.0対応版』という同人誌を書きました。Markdownで下書きしたものをRe:VIEW形式に変換し,EPUBとPDF形式で出力するのですが,トリミングした画像が小さすぎるという問題に直面しました。具体的には図1のような感じです。これでは書かれている文字が読めません。トリミングした画像をPDFにすると小さすぎるGIMPやImagemagickでも画像を拡大することができますが,少し試した限りでは思っていたようなクオリティになりませんでした。waifu2xの存在を思い出し,拡大してみるとすごくきれいで驚きました。図2が原寸で,図3が拡大したものです。waifu2xで拡大した画像(876x362ピクセル)その際に枚数が多くてサーバーに負荷をかけたのを申し訳なく思い,次からは手元で拡大するようにしようと調べて見つけたのがwaifu2x-converter-cppです。GPUで高速化でき,しかもIntel/AMD/NvidiaそれぞれのGPUに対応しています。ビルドインストールするパッケージではビルドしてみましょう。今回使用するUbuntuのバージョンは19.04です。19.10以降もこの手順で動作するものと思われます。基本的に必要になるパッケージはgcc,git,cmake,opencl-headers,libopencv-devの5つで,あとはどのGPGPUを使用するのかによって変わります。NVIDIANVIDIAのプロプライエタリなドライバーを使用している場合,CUDAが使用できます。CUDAのパッケージ名はnvidia-cuda-toolkitです。AMDAMDのGPU/APUでオープンソースドライバーを使用している場合,mesa-opencl-icdとopencl-headersが必要です。プロプライエタリ―なドライバーは,今回は試していません。opencl-headersが必要のようですが,動作検証は行っていません。実際のビルドビルドを実行するコマンドは次のとおりです。ldconfigmakeコマンドのj16オプションは,16スレッドのCPUでビルドする場合です。ビルドするCPUに合わせて変更してください。ldconfigコマンドは正確にはビルドに必要なわけではなく,ビルドしたwaifu2x-converter-cppコマンドを実行するに必要です。実行ビルドができたら,まずは次のコマンドを実行してください。-lどのGPU/CPUを選択できるのかのリストが表示されます(図4⁠)⁠。原則としては上から順番に速いことが期待されます。実際に変換するコマンドの実行例は次のとおりです。"/path/to/image-big.png"--scale-ratioオプションはその名のとおり何倍に拡大するかで,ここでは2倍にしています。-mオプションはモードの指定で,scaleは拡大するだけです。noiseとするとノイズの除去をしてくれます。両方を指定するnoise-scaleもあります。-pオプションは先ほどのリストの番号を指定します。省略しても構いません。-iオプションは入力,-oオプションは出力するファイル名です。詳しいコマンドのオプションは-hオプション付きで実行して確認してください。今回サンプルとして使用した元画像は図5で,2011年8月27日に北海道帯広市の幸福駅(幸福交通公園)で筆者が撮影したものです。図6が拡大したものです。きれいに拡大されていることがわかります。拡大後のサンプル画像(4096x3072ピクセル)ベンチマークwaifu2x-converter-cppは完了後にかかった時間を出力します。そこで筆者が所有するいくつかのCPU/GPUでベンチマークとして実行してみました。結果は以下のとおりです。12.024s通常2048x1536ピクセルの画像をwaifu2xでさらに拡大するということはないでしょうから,ここまで大きな差が開くこともまたないでしょう。3600と同等なのは軽く驚きです。オープンソースでなんとかしようとすると,高速なCPUを購入するのがよさそうということもわかります。3600を使用する際の注意点」をご覧ください。TeamとLibreOffice日本語チームのメンバー。LibreOffice,VirtualBox,Joplin,Budgieデスクトップなどの翻訳を手がける。