Docker Image of Python with OpenCV 3.0 for Heroku

を、作った。

Docker Hub URL
https://hub.docker.com/r/sugyan/heroku-python-opencv/
Dockerfile repository
https://github.com/sugyan/docker-heroku-python-opencv
Example app
https://docker-python-opencv-example.herokuapp.com/

これを使って https://devcenter.heroku.com/articles/docker のようにheroku-docker pluginを使ってdeployすれば、cv2でOpenCVの機能を使うPython appが動くと思います。

例: https://docker-python-opencv-example.herokuapp.com/

余談

Deep Learningでアイドルの顔認識を試してみようかなーと思って、でもまずは顔の画像をたくさん集める必要があるなー 収集workerをどっかのサーバで動かせると良いのかなー、とかで ローカル環境以外のところでもOpenCVで画像から顔検出してくれるAPIみたいなのがあると便利そう…というところから

という流れになって。Dockerってまだ殆ど使ったことなかったしこの機会にちょっと勉強しておこうかな、というのもあり。
HerokuからCedar Stack用のheroku/cederイメージ、それにPython実行環境を追加したheroku/pythonというイメージが既に公開されているので、それを使ってさらに追加でOpenCVをインストールする、というDockerfileを書いた次第。

OpenCVのインストールは各Linuxディストリビューションスクリプト一発で最新のものが入るようにしてくれているのがあったので、それを拝借した。

普通の環境ならこれで簡単にインストールできて動かせるのだと思うけど、heroku/pythonでインストールされているpythonのパスを指定したり インストール先のパスを変えたり(/usr/localとかに入れてもreleaseするときにslugに含まれないらしい)、あと実際のheroku環境には入っていないライブラリなどもありOFFにしないとダメなようだったり、で 幾つかcmakeのビルドオプションを弄った。

-cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -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 ..
+cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/app/.heroku/opencv -D BUILD_opencv_python2=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D PYTHON_INCLUDE_DIR=/app/.heroku/python/include/python2.7 -D WITH_1394=OFF -D WITH_GSTREAMER=OFF -D WITH_FFMPEG=OFF ..

など。


Docker Hub の Automated Builds はGithubリポジトリにDockerfileをpushするだけで勝手にimageを作ってくれるのでとってもラクチンでありがたい。

https://docs.docker.com/docker-hub/builds/

し、コードとして記述する感じでイメージが作られるので成果物がどういうものか分かりやすいし 変更の履歴も追えるし良いですね。


今回のをちょっと変更すれば他の言語用のbindingsを動かす環境も作れる、はず。ちょっと調べた感じでは

とか。でもまぁLLで使うならPythonが一番無難そうかな、と…