を、作った。
- 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を動かす環境も作れる、はず。ちょっと調べた感じでは
- GoのモジュールはOpenCV 1.xのAPI bindingsで、2.x対応がWIPとのこと
- RubyのモジュールはOpenCV 2.4.10がサポートされている模様
- NodeもOpenCV 2.3.1以上でサポートされている
とか。でもまぁLLで使うならPythonが一番無難そうかな、と…