linux bazel构建mediapipe源码

参考网址:

https://google.github.io/mediapipe/getting_started/install.html

记录一下debia上编译mediapipe的过程:

1.准备Bazelisk

sudo wget -O /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64

sudo chmod +x /usr/local/bin/bazel

2.源码下载:

$ cd $HOME

$ git clone https://github.com/google/mediapipe.git

# Change directory into MediaPipe root directory

$ cd mediapipe

我是手动下载的mediapipe-0.8.11.zip,🏠之后直接进入即可。

3.安装opencv

bash setup_opencv.sh

中间可能遇到opencv无法下载,多尝试几次

在opencv.sh中每次重来都会删除/tmp/build_opencv然后重新开始、

如下git下载缓慢,

git clone https://github.com/opencv/opencv_contrib.git

git clone https://github.com/opencv/opencv.git

可以有如下解决方案:

3.1.注释掉如下代码,然后自己手动下载这两个git放到对应的目录之后,重新运行

注释:

#rm -rf /tmp/build_opencv

#mkdir /tmp/build_opencv

#git clone https://github.com/opencv/opencv_contrib.git

#git clone https://github.com/opencv/opencv.git

然后bash setup_opencv.sh

3.2.将git命令改为从国内镜像下载:

git clone https://github.com/opencv/opencv_contrib.git --> git clone https://gitcode.net/opencv/opencv_contrib.git

git clone https://github.com/opencv/opencv.git --> git clone https://gitcode.net/opencv/opencv.git

其中opencv_contrib.git我还是从github.com下载的,不知道gitcode.net能否找到

4.安装gpu支持

sudo apt-get install mesa-common-dev libegl1-mesa-dev libgles2-mesa-dev

export GLOG_logtostderr=1

bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world

bazel run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 mediapipe/examples/desktop/hello_world:hello_world --verbose_failures

一直报time.h的报错,最后添加--linkopt=-lr编译成功

bazel run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world -c opt --verbose_failures --linkopt=-lrt

sudo apt install libart-2.0-dev

实际最后发现是我自己的个人账户没法访问librt.so,sudo账户就没有问题,sudo会有将bazelout放到root的风险,所以还需要显示指出bazelout的存放目录:

sudo bazel --output_user_root=/自己的路径/mediapipe/mediapipe-0.8.11/out/out run --copt -DMESA_EGL_NO_X11_HEADERS --copt -DEGL_NO_X11 mediapipe/examples/desktop/hello_world:hello_world --verbose_failures --cxxopt=-fpermissive --cxxopt=-Wno-error

sudo bazel --output_user_root=/自己的路径/mediapipe/mediapipe-0.8.11/out/out run --define MEDIAPIPE_DISABLE_GPU=1 mediapipe/examples/desktop/hello_world:hello_world -c opt --verbose_failures

5.android编译环境安装:

bash setup_android_sdk_and_ndk.sh

echo $ANDROID_NDK_HOME

bash setup_android_sdk_and_ndk.sh

export ANDROID_HOME=/自己的路径/Android/Sdk

export ANDROID_NDK_HOME=/自己的路径/Android/Sdk/ndk-bundle/android-ndk-r21

echo $ANDROID_NDK_HOME

使用setup_android_sdk_and_ndk.sh后WORKSPACE中会自动加入:

android_sdk_repository(name = "androidsdk", path = "/自己的路径/Android/Sdk")

android_ndk_repository(name = "androidndk", api_level=21, path = "/自己的路径/Android/Sdk/ndk-bundle/android-ndk-r21")

6.开始编译android的samples:

bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu

会提示找不到java,添加:--java_runtime_version=remotejdk_11

bazel build -c opt --config=android_arm64 mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu:handtrackinggpu --java_runtime_version=remotejdk_11

会发现opencv-3.4.3-android-sdk.zip始终因为网络不稳定下不来,可以自己下载,然后WORKSPACE中直接使用本地下载的文件:

http_archive(

name = "android_opencv",

build_file = "@//third_party:opencv_android.BUILD",

strip_prefix = "OpenCV-android-sdk",

type = "zip",

# url = "https://github.com/opencv/opencv/releases/download/3.4.3/opencv-3.4.3-android-sdk.zip",

url = "file:///自己的路径/mediapipe/opencv-3.4.3-android-sdk.zip"

)

接着发现@maven下不来,继续修改WORKSPACE,如下,注释掉访问不了的maven,使用阿里云的maven替换

maven_install(

...

repositories = [

#"https://maven.google.com",

#"https://dl.google.com/dl/android/maven2",

"https://repo1.maven.org/maven2",

#"https://jcenter.bintray.com",

"http://maven.aliyun.com/nexus/content/repositories/google",

"http://maven.aliyun.com/nexus/content/repositories/jcenter",

"http://maven.aliyun.com/nexus/content/groups/public/",

],

)

最后发现可以编译了,但是卡在了

bazel-out/k8-opt/bin/external/com_google_absl/absl/base/_objs/base/sysinfo.o:sysinfo.cc:function absl::lts_20210324::base_internal::ReadMonotonicClockNanos(): error: undefined reference to 'clock_gettime'

添加--linkopt=-lrt也还是报错。

查看资料发现,其实glibc2.17之后是不需要添加-lrt选项的,怀疑是自己的账户权限不对,所以改成使用sudo,解决了问题,最后编译指令变成:

sudo bazel output_user_root=/自己的路径/mediapipe/mediapipe-0.8.11/out/ build -c opt --strip=ALWAYS --config=android_arm64 --fat_apk_cpu=arm64-v8a,armeabi-v7a mediapipe/examples/android/src/java/com/google/mediapipe/apps/handtrackinggpu_aar:mediapipe_hand_tracking.aar --java_runtime_version=remotejdk_11 --verbose_failures

备注:/自己的路径/mediapipe/mediapipe-0.8.11/out/这个路径是自动创建的,不要外部创建

编译solutioncore

sudo bazel --output_user_root=/自己的路径/mediapipe/mediapipe-0.8.11/out/out build --strip=always --linkopt=-Wl,--strip-all -c opt --config=android_arm64 --fat_apk_cpu=arm64-v8a,armeabi-v7a mediapipe/java/com/google/mediapipe/solutioncore:solution_core.aar --java_runtime_version=remotejdk_11 --verbose_failures

另外指令--strip=never --copt -g选项会让so变得特别大,所以建议不要使用。

总结:

遇到的问题:

1.备注使用sudo编译时提示numpy找不到,使用如下指令安装pip(pip已有可忽略)和numpy

sudo apt install python3-pip

sudo pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple/

2.java环境找不到

--java_runtime_version=remotejdk_11 会自动下载

3.maven无法下载:

改为使用阿里云的源

"http://maven.aliyun.com/nexus/content/repositories/google",

"http://maven.aliyun.com/nexus/content/repositories/jcenter",

"http://maven.aliyun.com/nexus/content/groups/public/",

4.其他git无法下载等

找到对应报错的地方,用自己下的替换或者修改git源

5.undefined reference to 'clock_gettime'

尝试用sudo编译看看

目前怎么编译不带符号表的库还没找到方法,待继续跟进。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值