背景
EC2(Amazon Linux 2 t2.medium)で動画像処理を行うために、Python3とOpenCV3とffmpegをインストールしようとしたが、あまりに時間がかかってしまったのでまとめる。
ffmpegはOpenCVで動画を扱うために必要なモジュール。これがなくてもOpenCVはインストールできてしまうが、動画を処理したい時には一切使えなくなってしまう。
今回はPython3.6.5をインストールしたが、他のバージョンを使うときは、いくつか修正が必要になってしまうので注意。
主に以下の記事を参考にした。(※この記事がなければ動画像処理をすることはできませんでした。本当にありがとうございました。)
各ライブラリをインストールする
前準備
sudo yum -y upgrade
必要なパッケージをyumでインストール
sudo yum install -y git gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel
pyenvのインストール
cd /usr/local/src
sudo git clone --depth 1 git://github.com/yyuu/pyenv.git ./pyenv
echo 'export PYENV_ROOT="/usr/local/src/pyenv"' | sudo tee -a /etc/profile.d/pyenv.sh
echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' | sudo tee -a /etc/profile.d/pyenv.sh
source /etc/profile.d/pyenv.sh
インストールできたか確認
pyenv --version
PATHの設定変更
vimの使用方法はこちら --- https://qiita.com/hide/items/5bfe5b322872c61a6896
sudo visudo
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
を探して、secure_pathをコメントアウトし、env_keepを追加(見つけにくいけどどこかにあるはず!)
# Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
Defaults env_keep += "PATH"
Defaults env_keep += "PYENV_ROOT"
Python3.6.5をインストール
他のバージョンが良ければそれに合わせて変更する。(後のcmakeのオプションも変える必要が出てくる)
sudo env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 3.6.5
sudo pyenv global 3.6.5
インストールできたか確認
python --version
ffmpegをインストール
ffmpegをインストールするには前もって入れておかなければいけないものがいくつかあるため、頑張ってインストールしていく
yumで入るライブラリを入れる
sudo yum install -y autoconf automake gcc-c++ libtool wget nasm libtheora-devel
sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo yum install -y yasm openal-devel
nasmのアップデート
これをしなければ次のX264をインストールできなかった
sudo curl -LO https://www.nasm.us/pub/nasm/releasebuilds/2.13.01/nasm-2.13.01.tar.gz
sudo tar xzvf nasm-2.13.01.tar.gz
cd nasm-2.13.01
sudo ./configure --prefix=/opt/nasm
sudo make
sudo make install
export PATH=/opt/nasm/bin/:$PATH
X264をインストール
cd /usr/local/src
sudo git clone --depth 1 https://code.videolan.org/videolan/x264.git
cd x264
sudo ./configure --enable-shared
sudo make
sudo make install
fdk-aacをインストール
cd /usr/local/src
sudo git clone --depth 1 git://github.com/mstorsjo/fdk-aac.git
cd fdk-aac
sudo autoreconf -fiv
sudo ./configure
sudo make
sudo make install
export LD_LIBRARY_PATH=/usr/local/lib
export LD_RUN_PATH=$LD_LIBRARY_PATH
lameをインストール
cd /usr/local/src
sudo wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
sudo tar zxvf lame-3.99.5.tar.gz
sudo mv lame-3.99.5 lame
cd lame
sudo ./configure --enable-nasm
sudo make
sudo make install
xvidをインストール
cd /usr/local/src
sudo wget http://downloads.xvid.org/downloads/xvidcore-1.3.2.tar.gz
sudo tar xzvf xvidcore-1.3.2.tar.gz
sudo chown -R root:root xvidcore
cd xvidcore/build/generic/
sudo ./configure
sudo make
sudo make install
ffmpegをインストール
sudo make -j2
の最後の数字は、処理に当てるCPUのコア数を表しているため、自分のマシンの性能に合わせて変更する
cd /usr/local/src
sudo git clone --depth 1 git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
sudo ./configure --arch=x86_64 --enable-gpl --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-nonfree --disable-static --enable-shared --enable-version3 --enable-zlib --enable-pthreads
sudo make -j2
sudo make install
下記のパスを追加しておく。
echo 'export LD_LIBRARY_PATH=/usr/local/lib' | sudo tee -a /etc/profile.d/ffmpeg.sh
echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig' | sudo tee -a /etc/profile.d/ffmpeg.sh
source /etc/profile.d/ffmpeg.sh
sudo sh -c "echo /usr/local/lib >> /etc/ld.so.conf.d/ffmpeg.conf"
sudo ldconfig
OpenCV3をインストール
yumで必要なライブラリをインストールする
sudo sh -c "yum install -y opencv && yum remove -y opencv"
sudo yum install -y cmake libjpeg-devel libtiff-devel libpng-devel jasper-devel
pipでnumpyをインストールする
sudo pip install --upgrade pip
sudo pip install numpy
OpenCV3のインストール
cd /usr/local/src
sudo wget https://github.com/Itseez/opencv/archive/3.1.0.zip
sudo wget https://github.com/Itseez/opencv_contrib/archive/3.1.0.zip
sudo unzip 3.1.0.zip\*
cd opencv-3.1.0
sudo mkdir build
cd build
cmakeのオプションを各自の環境に合わせて変更しなければならない。make中にエラーが多発するが、主にここを変更すれば直る。
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D BUILD_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D PYTHON_EXECUTABLE=$(which python) \
-D PYTHON3_EXECUTABLE=$(which python) \
-D PYTHON3_INCLUDE_DIR=/usr/local/src/pyenv/versions/3.6.5/include/python3.6m \
-D PYTHON3_PACKAGES_PATH=/usr/local/src/pyenv/versions/3.6.5/lib/python3.6/site-packages \
-D PYTHON3_INCLUDE_PATH=/usr/local/src/pyenv/versions/3.6.5/include/python3.6m \
-D PYTHON3_INCLUDE_DIR=/usr/local/src/pyenv/versions/3.6.5/include/python3.6m \
-D PYTHON3_INCLUDE_DIRS2=/usr/local/src/pyenv/versions/3.6.5/include/python3.6m \
-D PYTHON3_LIBRARY=/usr/local/src/pyenv/versions/3.6.5/lib/libpython3.6m.so \
-D OPENCV_EXTRA_MODULES_PATH=/usr/local/src/opencv_contrib-3.1.0/modules \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DCMAKE_POSITION_INDEPENDENT_CODE=ON ..
ffmpegのエラー対応
build中にffmpegに関するエラーが出るので、以下の記事を参考にして修正する
https://stackoverflow.com/questions/46884682/error-in-building-opencv-with-ffmpeg
sudo vim /usr/local/src/opencv-3.1.0/modules/videoio/src/cap_ffmpeg_impl.hpp
上の方のいい感じのところに#も含めてコピペする
#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020
makeする。ここもCPUのコア数に合わせて-jに続く数字を変更する。かなり時間がかかる。
sudo make -j2
make中のエラー対応
エラーがよく出るが、rootユーザーで実行すると基本的に上手くいく。
sudo su
cd /usr/local/src/opencv-3.1.0/build
cmake ..
make -j2
make install
その他のエラー
Pythonのパスが間違っている
fatal error: Python.h: No such file or directory
もし上のようなエラーが出ると、cmakeの時に設定したパスが間違っているため、 https://eigo.rumisunheart.com/2018/06/06/post-9479/ を参考に、cmakeのオプションを変更する
make中に色々変更しすぎて訳がわからなくなった
以下のコマンドを実行して、cmakeのキャッシュを削除すれば一からやり直せる。
sudo rm CMakeCache.txt