waifu2xを利用してみた

画像を拡大しても、元画像の情報量は増えないので、劣化した画像が出来上がってしまいます。しかしながらwaifu2xを利用すれば、大量の画像データから、自動生成したフィルター処理を使用して補完すべき画素を推定して自然に拡大してくれます。ここではwaifu2xについて解説していきます。

01: waifu2xの種類

  • waifu2x
  • オリジナル版(NVIDIA製のGPUを利用する)
  • waifu2x-converter-cpp
  • 派生版(Intel製のCPU統合CPUでも利用できる/C++、OpenCVで実装)
  • waifu2x-converter-gls
  • 派生版(Intel製のCPU統合CPUでも利用できる/OpenCV、OpenGLで実装)

02: waifu2x-converter-cpp

環境

  • Windows 7 Professional
  • VirtualBox 5.1.22
  • Vagrant 1.9.5
  • Vagrant: Ubuntu 14.04.5 LTS

OpenCVをインストール

bash


# OpenCVに必要なパッケージのインストール
$ sudo apt-get update
$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev ¥
               libtiff4-dev libjasper-dev libopenexr-dev cmake python-dev ¥
               python-numpy python-tk libtbb-dev libeigen3-dev ¥
               yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev ¥
               libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev ¥
               libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra ¥
               libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev ¥
               libswscale-dev default-jdk ant libvtk5-qt4-dev

# OpenCVのインストール
$ cd
$ wget https://github.com/opencv/opencv/3.0.0-rc1.zip
$ unzip 3.0.0-rc1.zip
$ cd opencv-3.0.0-rc1
$ mkdir build
$ cd build
$ cmake -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON ¥
               -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON ¥
               -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_VTK=ON ..
$ make
$ sudo make install

OpenCVを設定

bash


$ sudo nano /etc/ld.so.conf.d/opencv.conf
$ sudo ldconfig
$ sudo nano /etc/bash.bashrc
$ sudo reboot

opencv.conf


/usr/local/lib

bash.bashrc


PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

waifu2x-converter-cppをコンパイル

bash


$ cd
$ git clone git://github.com/WL-Amigo/waifu2x-converter-cpp.git --recursive
$ cd waifu2x-converter-cpp
$ g++ src/convertRoutine.cpp src/main.cpp src/modelHandler.cpp ¥
               -o waifu2x-converter -std=c++11 ¥
               -L"../opencv-3.0.0-rc1/build/lib" ¥
               -I"./include" ¥
               -I"/usr/local/include/opencv2/" ¥
               -I"../opencv-3.0.0-rc1/include" ¥
               $(pkg-config --cflags opencv) ¥
               $(pkg-config --libs opencv)

動作テスト

bash


# -i: 入力画像
# -o: 出力画像
# デフォルトはノイズ除去弱、2倍に拡大
$ ./waifu2x-converter -i ~/shared/source.jpg -o ~/shared/dest.jpg

元画像

ペイントツールで単純に拡大した画像

waifu2x-converter-cppで処理した画像

03: waifu2x-converter-gls

waifu2x-converter-glsは上手く動作しませんでしたが、参考までに掲載しておきます。

環境

  • Windows 7 Professional
  • VirtualBox 5.1.22
  • Vagrant 1.9.5
  • Vagrant: Ubuntu 16.04 LTS

bash


# Ubuntu16.04をboxに追加
$ vagrant box add Ubuntu16.04 https://cloud-images.ubuntu.com/xenial/current/xenial-server-cloudimg-amd64-vagrant.box
$ vagrant init Ubuntu16.04
$ vagrant up
ログイン方法
ユーザ名に「ubuntu」、秘密鍵に「<作業フォルダ>\.vagrant\machines\default\virtualbox\private_key」を指定する。

OpenCVをインストール

bash


# OpenCVに必要なパッケージのインストール
$ sudo apt-get update
$ sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev ¥
               libavformat-dev libswscale-dev
$ sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev ¥
               libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
$ sudo apt-get install cmake freeglut3-dev libglew-dev libglfw3-dev git unzip

# OpenCVのインストール
$ wget https://github.com/opencv/opencv/archive/3.2.0.zip
$ unzip 3.2.0.zip
$ cd opencv-3.2.0
$ cmake .
$ make
$ sudo make install

waifu2x-converter-glslをコンパイル

bash


$ git clone https://github.com/khws4v1/waifu2x-converter-glsl.git
$ nano CMakeLists.txt
$ cmake .
$ make

CMakeLists.txt


...
${GLFW_LIBRARIES} -lpthread) # -lpthreadを追加
...

waifu2x-converter-glslを実行

bash


# エラーが発生
$ ./waifu2x-converter-glsl -i <画像ファイル名> -m noise_scale -j 4 --scale_ratio 1.5 --noise_level 2
Noise reduction (Lv.2) filtering...
waifu2x-converter-glsl: /home/ubuntu/waifu2x-converter-glsl/src/filterGL.cpp:29: void filterGLInit(uint32_t, uint32_t): Assertion 'window' failed.
Aborted (core dumped)

# CUI環境では動作しなさそうだったので、GUI(X Window System)を追加
$ sudo apt-get -y install ubuntu-desktop
$ startx
$ sudo shutdown -h now

VagrantをGUIモードで起動

Vagrantfile


...
  # Provider-specific configuration so you can fine-tune various
  # backing providers for Vagrant. These expose provider-specific options.
  # Example for VirtualBox:
  #
  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
    vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
  #   vb.memory = "1024"
  # end
  #
  # View the documentation for the provider you are using for more
  # information on available options.
...

bash


$ vagrant up

waifu2x-converter-glslを実行

bash


# 再びエラーが発生
$ ./waifu2x-converter-glsl -i <画像ファイル名> -m noise_scale -j 4 --scale_ratio 1.5 --noise_level 2
support

結論

下記の通りwaifu2x-converter-glslの動作環境としてOpenGL3.1が挙げられていますが、今回の環境におけるOpenGLのバージョンは3.0と足りてませんでした。ホストのOpenGLのバージョンは3.1だし、もしかしたらVirtualBoxがエミュレートできるOpenGLのバージョンは3.0までしか対応してないのかも。というわけで実機だったら多分動くはずという結果に終わりました。