[Experimental] Only tested on Raspberry Pi 4 and Jeton Xavier NX.
Clone the MediaPipe repo and follow the instruction to setup Bazel.
Install build dependencies.
$ sudo apt install -y python3-dev
$ sudo apt install -y cmake
Install proto compiler.
$ sudo apt install -y protobuf-compiler
If you see a missing any.proto error later, which means the protoc might be
too old, you can download the latest protoc-3.x.x-linux-aarch_64.zip from
GitHub and copy the
"bin" and "include/google" directories to the system libraries. Then, modify
mediapipe/setup.py
like the following:
diff --git a/setup.py b/setup.py
index 61848de..462d91d 100644
--- a/setup.py
+++ b/setup.py
@@ -208,7 +208,7 @@ class GeneratePyProtos(setuptools.Command):
sys.stderr.write('cannot find required file: %s\n' % source)
sys.exit(-1)
- protoc_command = [self._protoc, '-I.', '--python_out=.', source]
+ protoc_command = [self._protoc, '-I.', '-I/usr/local/include', '--python_out=.', source]
if subprocess.call(protoc_command) != 0:
sys.exit(-1)
Go to the MediaPipe directory.
~$ cd mediapipe
Remove unnecessary OpenCV modules and linker flags.
sed -i -e "/\"imgcodecs\"/d;/\"calib3d\"/d;/\"features2d\"/d;/\"highgui\"/d;/\"video\"/d;/\"videoio\"/d" third_party/BUILD
sed -i -e "/-ljpeg/d;/-lpng/d;/-ltiff/d;/-lImath/d;/-lIlmImf/d;/-lHalf/d;/-lIex/d;/-lIlmThread/d;/-lrt/d;/-ldc1394/d;/-lavcodec/d;/-lavformat/d;/-lavutil/d;/-lswscale/d;/-lavresample/d" third_party/BUILD
Disable carotene_o4t in third_party/BUILD
.
diff --git a/third_party/BUILD b/third_party/BUILD
index ef408e4..51e1104 100644
--- a/third_party/BUILD
+++ b/third_party/BUILD
@@ -110,6 +104,8 @@ cmake_external(
"WITH_ITT": "OFF",
"WITH_JASPER": "OFF",
"WITH_WEBP": "OFF",
+ "ENABLE_NEON": "OFF",
+ "WITH_TENGINE": "OFF",
Build the package.
~/mediapipe$ python3 setup.py gen_protos && python3 setup.py bdist_wheel
Install MediaPipe package.
~$ python3 -m pip install cython
~$ python3 -m pip install numpy
~$ python3 -m pip install pillow
~$ python3 -m pip install mediapipe/dist/mediapipe-0.8-cp38-cp38-linux_aarch64.whl
or
~$ python3 -m pip install mediapipe-python-aarch64/mediapipe-0.8.4-cp38-cp38-linux_aarch64.whl
Append --no-deps
flag if any dependency Python packages cannot be installed.
Run the example code.
import mediapipe as mp
import numpy as np
import PIL.Image as Image
mp_holistic = mp.solutions.holistic
holistic = mp_holistic.Holistic(static_image_mode=True)
for idx, file in enumerate(['/path/to/pic.jpg', '/path/to/pic2.jpg']):
pic = Image.open(file)
image_data = np.frombuffer(pic.tobytes(), dtype=np.uint8)
image = np.copy(image_data.reshape((image_height, image_width, 3))[:,:,::-1])
image_height, image_width, _ = image.shape
results = holistic.process(image)
if results.pose_landmarks:
print(
f'Nose coordinates: ('
f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE]\
.x * image_width}, '
f'{results.pose_landmarks.landmark[mp_holistic.PoseLandmark.NOSE]\
.y * image_height})'
)
holistic.close()