LoginSignup
3
3

More than 3 years have passed since last update.

AmazonLinux2にPython3+OpenCV3+ffmpegをインストールし、動画像処理を行えるようにする。

Last updated at Posted at 2021-04-12

背景

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
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3