動作確認環境
macOS Monterey (12.2)
MacBook Air(M1、2020)
チップ: Apple M1
Python: 3.9.13
conda version: 4.14.0
protobuf: 3.19.4
mediapipe-silicon: 0.8.11
はじめに
M1macbookでmediapipeを入れて動かそうとしたところ、以下のエラー。
import mediapipe as mp
File "~/miniforge3/envs/grad/lib/python3.9/site-packages/mediapipe/__init__.py", line 17, in <module>
import mediapipe.python.solutions as solutions
File "~/miniforge3/envs/grad/lib/python3.9/site-packages/mediapipe/python/solutions/__init__.py", line 17, in <module>
import mediapipe.python.solutions.drawing_styles
File "~/miniforge3/envs/grad/lib/python3.9/site-packages/mediapipe/python/solutions/drawing_styles.py", line 20, in <module>
from mediapipe.python.solutions.drawing_utils import DrawingSpec
File "~/miniforge3/envs/grad/lib/python3.9/site-packages/mediapipe/python/solutions/drawing_utils.py", line 25, in <module>
from mediapipe.framework.formats import detection_pb2
File "~/miniforge3/envs/grad/lib/python3.9/site-packages/mediapipe/framework/formats/detection_pb2.py", line 5, in <module>
from google.protobuf.internal import builder as _builder
ImportError: cannot import name 'builder' from 'google.protobuf.internal' (~/miniforge3/envs/grad/lib/python3.9/site-packages/google/protobuf/internal/__init__.py)
protobuf.internal内にbuilder.pyが無いらしい。
対処
最新のバージョンのprotobufから、mediapipeが要求するバージョンのprotobufにbuilder.pyをコピーした。
- https://pypi.org/project/protobuf/#historyより最新のprotobufのバージョンを確認
$python3 -m pip install protobuf==3.20.3
$python3 -m pip show protobuf | grep Location
$cp [3で出てきたパス]/google/protobuf/internal/builder.py ./builder.py
$python3 -m pip install protobuf==3.19.4
$python3 -m pip show protobuf | grep Location
$mv ./builder.py [6で出てきたパス]/google/protobuf/internal/builder.py
(2022年10月時点では最新の4.xxがあるが、3系と4系で記述が変わってしまう可能性を考慮して3.xxでの最新にした)
おわりに
protobufはtensorboardやらtensorflow-macosの依存ライブラリとして指定されているのに、importするファイルが無いエラーが出ちゃうんだと驚いた。
こういう対処法はゴリ押し感が否めないけど動いてよかった。