エックスサーバーにopencv-pythonをインストール!サーバで画像処理しよう
こんにちは!しずかなかずしです。
突然ですが、このブログは、レンタルサーバーのエックスサーバを使っています。
エックスサーバーは、WordPressの導入は大変かんたんで重宝します。
一方、週末プログラマーの筆者は、このレンタルサーバーにて、pythonを使って色々作業をしております。
本日のネタは、OpenCVを使った、画像処理です。
解決したいこと
大抵、どこのお宅でも監視カメラを設置したいですよね?
「いえ、そんなもの設置しません!」
という方、幸せです、平和です。
そういう私は、とある場所に、訳あって監視カメラを設置しています。アマゾンで格安のWebカメラを購入。設置の方法は以下の記事に詳細にまとめています。是非ご覧ください。
使用している監視カメラは、SV3Cというメーカーの720P解像度のSV-B06W-720P-HXというWebカメラ。撮影した画像は、カメラ内部に搭載されているFTP転送機能を使って、エックスサーバーに転送しております。
SV-B06W-720P-HXは、動き検出機能がついているので、カメラの画像の中に変化を検出したときのみ、”1秒1枚・合計3枚”の写真を取ってサーバーに送ってくれるので非常に便利なのです。
ただし、頻繁に動きが検出されてその結果何枚もサーバー送られてくると、確認しなければならない画像の枚数が多くなります。一枚一枚チェックするのは結構大変。
そこで、一連のJpegの静止画を1本のmp4の動画にまとめてしまいましょう!
ということを考えました。
これを実現するpythonのライブラリが、OpenCVなのです。
エックスサーバーでPython仮想環境を構築
pythonでプログラムを書きたかったので、まずは、エックスサーバーにpythonの仮想環境を構築します。
以下の内容は、pythonの仮想環境がどういうもので、使い方がわかっている方向けの説明になっておりますので、ご注意下さい。
また、エックスサーバーへはSSHでログインして、ログイン後のターミナルで作業することを想定しています。
pyvenvを使う
私が利用しているエックスサーバーのサーバーは、pyvenvというコマンドが予め用意されています(2019年7月15日現在)。
これを使うと、仮想環境を構築できます。
しかも、ありがたいことに、Pythonのバージョンが2.7のものと、3.4のものが両方用意されています。
私は、Python使いとしては古い人間ではないので、3.4の方を使います。その場合は、pyvenvコマンドは、pyvenv-3.4というコマンドを使つかいます。これで、python3.4の仮想環境ができます。
それでは、早速やってみましょう!
$ pyvenv-3.4 cv2-venv
$ . cv2-venv/bin/activate
(cv2-venv)$ python --version
Python 3.4.9
こんな感じで、python 3.4の仮想環境ができあがりました。
pipをインストールする
仮想環境ができたら、その仮想環境に必要なライブラリをインストールする必要があります。
Pythonのライブラリの管理は、pipという有名なコマンドがあります。
このコマンドをネットから引っ張ってきてインストールするのが次の作業です。
以下のように実行すれば、pipがインストール可能です。
(cv2-venv) $ curl -kL https://bootstrap.pypa.io/get-pip.py | python
(省略...)
Successfully installed pip-19.1.1 setuptools-41.0.1 wheel-0.33.4
OpenCVのインストール方法
仮想環境ができて、pipがインストールできてしまえば、こっちのものです。
仮想環境に少なライブラリを何でもインストールする事ができます。その、魔法のコマンドが、「pip install」です。
私が使いたい、OpenCVも、pipでインストールが可能です。パッケージ名は、opencv-pythonです。
(cv2-venv) $ pip install opencv-python
pip installでハマる
これで万事オッケーと思っていたのですが、失敗しました。
以下のようなエラーメッセージが表示されます。
numpyという依存ライブラリのバージョン1.16.4のインストールで止まってしまいます。
Collecting numpy>=1.11.1 (from opencv-python)
Using cached https://files.pythonhosted.org/packages/d3/4b/f9f4b96c0b1ba43d28a5bdc4b64f0b9d3fbcf31313a51bc766942866a7c7/numpy-1.16.4.zip
Building wheels for collected packages: numpy
Building wheel for numpy (setup.py) ... error
(実際にはもっと派手に色々なメッセージが続きます)
numpyは数値演算でよく使われるpythonの有名なライブラリです。OpenCVも内部でこのライブラリを使っているようなのです。
そして、エックスサーバーで、このライブラリのインストールの最中に、コンパイルが走り、コンパイルのための諸々のファイルが足りなくてビルドができない、という結果になっているもようです。
実は、以前に、numpyはエックスサーバーで使った実績があります。そちらの関連記事がこちら。
やれやれ、またもや、numpyさまに悩まされる結果に。
でも、大丈夫です。上の記事で解決しているように、numpyはエックスサーバーにインストールできた実績があります。
解決方法:numpyのバージョン指定のインストール
実は、エックスサーバーには、少し古いバージョンのnumpyならインストールできるようなのです。
先程のエラーメッセージに"Collecting numpy>=1.11.1 (from opencv-python)"というキーワードがあります。
つまり、バージョン1.11.1以上のnumpyならOpenCVには十分ですよー、ということです。
私が以前エックスサーバーにインストールしたnumpyのバージョンは1.13.1でした。
それをイントールするには、pip installのコマンドでライブラリの名前の後に==でバージョン指定します。
やってみると。。。
(cv2-venv) $ pip install numpy==1.13.1
Collecting numpy==1.13.1
Using cached https://files.pythonhosted.org/packages/1b/ee/f65826b2880f67652c21326565b4c166c7cdb1019f84b82af65e625475cd/numpy-1.13.1-cp34-cp34m-manylinux1_x86_64.whl
Installing collected packages: numpy
Successfully installed numpy-1.13.1
大成功!
その後は、
(cv2-venv) $ pip install opencv-python
Collecting opencv-python
Using cached https://files.pythonhosted.org/packages/1d/da/bd3271e461e24bed632286ebd55fc9d1b36f300f1aca214f57cad2b0b8ce/opencv_python-4.1.0.25-cp34-cp34m-manylinux1_x86_64.whl
Requirement already satisfied: numpy>=1.11.1 in ./cv2-venv/lib/python3.4/site-packages (from opencv-python) (1.13.1)
Installing collected packages: opencv-python
Successfully installed opencv-python-4.1.0.25
うまいことopencv-pythonがインストールできました!
OpenCVを使ってみる
では、ライブラリを試しにロードしてみます。
(cv2-venv) $ python
Python 3.4.9 (default, Feb 5 2019, 14:36:09)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import cv2
>>>
>>>
ロードできました。オッケーです。
まとめ
WordPressのホスティングでおなじみのレンタルサーバー、エックスサーバーを使ってpythonでプログラミング。
私が使いたかった、OpenCVはちょっとハマったけど、以下のようにインストールすると使えます。
- pyvenv-3.4で仮想環境構築
- pipをネットからインストール
- pip install numpy==1.13.1でnumpyをバージョン指定でインストール
- pip install opencv-pythonでインストール
次回は、実際にOpenCVを使ったカメラ画像の動画化のお話をしたいと思います。
(本記事のコマンドラインの実行結果等は、実際の出力を一部加工していますので、ご注意を)