概要
mediapipeのpythonモジュールをDocker環境でビルドし、別環境にpipを使ってインストールする手順を残しておく。
環境
Pythonのバージョンは3.8
インストール先はUbuntu22.04
手順
-
mediapipe(https://github.com/google/mediapipe )をCloneする
git clone https://github.com/google/mediapipe.git
-
Cloneしてきたmediapipe内のDockerfileを使ってDockerイメージを作成する
docker build --tag=mediapipe .
-
作成したDockerイメージを使って、mediapipeのサンプルプログラムが動くことを確認する
docker run -it mediapipe:latest
サンプルプログラム実行して、"Hello World!"が10回出力されたらOK
GLOG_logtostderr=1 bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world
(ここまでは、mediapipeのInstallationと同じ内容)
(参考:https://developers.google.com/mediapipe/framework/getting_started/install#installing_using_docker) -
コンテナを抜けて、作成したモジュールを格納する用のディレクトリをマウントしつつ、再度起動する。
docker run -it -v ./dist:/dist mediapipe:latest
-
protbufをインストールする
wget https://github.com/protocolbuffers/protobuf/releases/download/v23.1/protoc-23.1-linux-x86_64.zip unzip protoc-23.1-linux-x86_64.zip -d protoc3 mv protoc3/bin/* /usr/local/bin/ mv protoc3/include/* /usr/local/include/
-
vimをインストールする
apt update && apt install -y vim
-
third_party/BUILDの中身を以下のように変更する
とりあえず動くものができた設定なので、PyPIにあるものとは多分違うものができるcmake_external( name = "opencv_cmake", # Values to be passed as -Dkey=value on the CMake command line; # here are serving to provide some CMake script configuration options cache_entries = { "CMAKE_BUILD_TYPE": "Release", "BUILD_LIST": ",".join(sorted(OPENCV_MODULES)), "BUILD_TESTS": "OFF", "BUILD_PERF_TESTS": "OFF", "BUILD_EXAMPLES": "OFF", "BUILD_SHARED_LIBS": "ON" if OPENCV_SHARED_LIBS else "OFF", "WITH_ITT": "OFF", "WITH_JASPER": "OFF", "WITH_JPEG": "ON", "WITH_PNG": "ON", "WITH_TIFF": "OFF", "WITH_OPENCL": "OFF", "WITH_WEBP": "OFF", "WITH_IPP": "OFF", "WITH_FFMPEG": "OFF", "WITH_OPENEXR": "ON", # Optimization flags "CV_ENABLE_INTRINSICS": "ON", "WITH_EIGEN": "ON", "WITH_PTHREADS": "OFF", "WITH_PTHREADS_PF": "OFF", "OPENCV_SKIP_VISIBILITY_HIDDEN": "ON" if not OPENCV_SHARED_LIBS else "OFF", "OPENCV_SKIP_PYTHON_LOADER": "ON", "BUILD_opencv_python": "OFF", "ENABLE_CCACHE": "OFF", }, lib_source = "@opencv//:all", linkopts = [] if OPENCV_SHARED_LIBS else [ "-lm", "-lpthread", ], shared_libraries = select({ "@bazel_tools//src/conditions:darwin": ["libopencv_%s.%s.dylib" % (module, OPENCV_SO_VERSION) for module in OPENCV_MODULES], "//conditions:default": ["libopencv_%s.so.%s" % (module, OPENCV_SO_VERSION) for module in OPENCV_MODULES], }) if OPENCV_SHARED_LIBS else None, static_libraries = [ "libopencv_%s.a" % module for module in OPENCV_MODULES ] if not OPENCV_SHARED_LIBS else None, )
-
setup.pyの内の__version__を適当に書き換える
__version__ = '1.11.1'
-
ビルド実施。結構時間がかかる
python3 setup.py bdist_wheel
-
完了したら、/mediapiepe/distにwheel ファイルがあるので、マウントしている/distにコピーし、
cp /mediapipe/dist/*.whl /dist
使用したい環境でインストールする。
pip3 install mediapipe-xxx.whl
(参考)OpenCVのビルドオプション
手順7の設定に行き着くまでの流れとか、気が向いたら書く