Win10和Jetson Nano环境下安装Mediapipe-python

2023-11-14

最近因学习需要用到google的mediapipe包进行手部识别,效果不错便想将其移植到jetson nano的ubuntu系统上。坑不少,在这里记录一下过程。

一、Windows10的安装方法

windows10安装很简单,直接打开cmd用pip安装就行:

pip3 install mediapipe -i https://pypi.tuna.tsinghua.edu.cn/simple

二、Jetson Nano下的安装方法

mediapipe 没有提供aarch64的wheel文件,因此需要源码编译。官方用的系统是ubuntu20,我用的是ubuntu18,步骤一致。

先贴出官方的安装方法:
MediaPipe Python on aarch64 Ubuntu 20.04
顺利的话照着顺序和解决方案做就可以安装完成了。
下面是我按照官方安装的步骤进行安装以及每一步遇到的错误和解决方法:

1、首先下载Mediapipe文件并安装bazel (官方的编译器)

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

这里我们安装 bazel 4.0.0版本的,其他版本可能会出现警告,安装方法参考这篇文章:在jetson nano上安装bazel
安装完然后检查一下版本就行了:

$bazel version

2、安装依赖

$sudo apt install -y python3-dev
$sudo apt install -y cmake

3、安装编译器

$sudo apt install -y protobuf-compiler

后面编译的时候如果出现缺少any.proto错误,这意味着protoc可能太旧,您可以从GitHub下载最新的protoc-3.x.x-linux-aarch_64.zip(这里贴出3.18.0的下载链接),然后解压文件:

$unzip protoc-3.x.x-linux-aarch_64.zip

然后将“bin”和include下的“google”复制到/mediapipe中。修改mediapipe/setup.py,将

protoc_command = [self._protoc, ‘-I.’, ‘–python_out=.’, source]

修改为

protoc_command = [self._protoc, ‘-I.’, ‘-I/usr/local/include’, ‘–python_out=.’, source]

4、进mediapipe目录删除不必要的OpenCV模块和链接器标志。

$cd mediapipe
$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

5、修改文件

打开third_party/BUILD,定位到

“WITH_ITT”: “OFF”,
“WITH_JASPER”: “OFF”,
“WITH_WEBP”: “OFF”,

在后面添加两句,然后保存退出:

“ENABLE_NEON”: “OFF”,
“WITH_TENGINE”: “OFF”,

6、编译

这一步问题最多并且耗时最久,一次编译要将近一个小时,每一次出错都要重新编译(摊手.jpg)

$python3 setup.py gen_protos && python3 setup.py bdist_wheel

出现的各种错误

首先是最重要的一个错误!不要使用python3.7!不要使用python3.7!!!
不然最后编译会报错,提示bazel找不到规则,而且找不到问题所在,这个问题卡了我三天(再次摊手)。
编译失败,最后降级到3.6才成功

1、缺少any.proto错误,解决方法看上面第3步。
2、return tensor错误
在这里插入图片描述
这里的错误是因为gcc的版本太低,不能自动执行类型转换,有两个办法解决,第一个升级gcc7到gcc8,第二个是修改文件,将报错文件中的

return tensor

修改成

return absl::StatusOr< mediapipe::Tensor > ( mediapipe::Tensor(std::move(tensor)));

但是后面还会有另一个return报错,所以这里我用的是第一个方法一劳永逸:

升级gcc8:
Ubuntu18.04 更新gcc和g++的版本号

3、this rule is missing dependency declarations for the following fles错误
清理bazel的缓存然后重新编译即可

$rm -rf ~/.cache/bazel/

编译成功

编译成功之后会在文件目录下生成一个dist文件夹,里面存放了mediapipe的.whl文件。
编译成功
生成的dist文件

8、运行Mediapipe

先安装mediapipe功能包:

$python3 -m pip install cython
$python3 -m pip install numpy
$python3 -m pip install pillow
$python3 -m pip install mediapipe/dist/mediapipe-0.8-cp36-cp36m-linux_aarch64.whl

成功结果
终于好了
安装过程出现了matplotlib一直安装失败的问题
在这里插入图片描述
解决方法:
用apt-get下载

$sudo apt-get install python3-matplotlib
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win10和Jetson Nano环境下安装Mediapipe-python 的相关文章

  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • 非常大的数据集的余弦相似度

    我在计算大量 100 维向量之间的余弦相似度时遇到问题 当我使用from sklearn metrics pairwise import cosine similarity I get MemoryError在我的 16 GB 机器上 每个
  • 计算具有不同 x 值的 y 值的平均值

    我试图计算平均值y来自不同的数组 例如np mean axis 1 但与不同的x values 生产x and y数组 我使用的代码如下 x1 np arange 10 x2 np arange 10 1 x3 np arange 10 2
  • 如何提取图像中的表格

    我想从图像中提取表格 这个 python 模块https pypi org project ExtractTable https pypi org project ExtractTable 与他们的网站https www extractta
  • 字典损坏了键的名称 [Python]

    我的问题是 当我输入带重音的输入时 字典会存储不同的键名 它会用字符代码替换重音字符 我是新来的 我接受一切帮助 感谢您的帮助 usr bin python coding utf 8 products try prodNum int raw
  • Matplotlib 行高表属性

    我已经尝试了我能找到的所有命令和文档 如何在这里设置行的高度 from pylab import Create a figure fig1 figure 1 ax1 1 fig1 add subplot 111 Add a table wi
  • 配置错误:无法链接到 boost_system

    我正在尝试在 Debian 上安装一个软件包 足球模拟器 2d 当我进入目录并运行时 configure 我得到以下信息 reza debian soccer rcssserver 15 0 1 configure checking for
  • 验证 BASH 脚本时出现问题 [已关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在尝试验证 bash 脚本时出现代码 lint 错误 bin bash if eq 0 then printf No argum
  • Python 字典组并对多个值求和[重复]

    这个问题在这里已经有答案了 我在字典格式列表中有一组数据 如下所示 data name A tea 5 coffee 6 name A tea 2 coffee 3 name B tea 7 coffee 1 name B tea 9 co
  • 使用 perf 查找线程瓶颈并优化挂机时间

    对 cpu 周期进行采样perf record如果核心利用率大致恒定 则对于寻找优化候选非常有用 但对于具有并行性不同的多个阶段的代码 计算 cpu 周期将重点强调并行阶段 而低估影响挂机时间的顺序或有限并行阶段 简而言之 天真的 perf
  • 在Python中将一个方法(带参数)传递给另一个方法的最佳方法是什么

    将方法和方法参数传递给另一个方法的最佳方法是什么 有更好的方法来执行以下操作吗 def method1 name return Hello name def method2 methodToCall methodToCallParams q
  • 无法使用Linux服务启动Archiva 2.1.0

    我正在尝试在 Linux 上启动最近发布的 Apache Archiva v2 1 0 独立版 出于测试目的 该 zip 已解压缩在 opt archiva 2 0 文档说 http archiva apache org docs 2 1
  • 从 XML 文档生成嵌套列表

    在 python 中工作 我的目标是解析我制作的 XML 文档并创建一个嵌套的列表列表 以便稍后访问它们并解析提要 XML 文档类似于以下代码片段
  • 使用Python有没有一种方法可以在mongodb中进行插入或更新时监听更改

    我正在构建一个小型系统 它从 mongodb 集合中抛出数据 它已经工作正常 但每次进行更改时我都必须重新启动它 我已经有一个监视器可以检测更改并自动重新启动服务器 但我想对 mongodb 更改执行类似的操作 我当前使用 CentOs 5
  • 如何在 Pandas 中叠加“一天”内的数据进行绘图

    我有一个数据框 里面有一些 更有意义 数据格式如下 In 67 df Out 67 latency timestamp 2016 09 15 00 00 00 000000 0 042731 2016 09 15 00 16 24 3769
  • Python 视图与复制错误希望我仅在脚本中使用 .loc

    我正在运行一个很长的脚本 其中有一个数据框df 随着脚本运行 构建和修改df我在命令行中一列又一列地收到此错误 尝试在 DataFrame 的切片副本上设置一个值 尝试 使用 loc row indexer col indexer valu
  • 使用 NumPy 查找元组列表第二个元素的中位数

    假设我有一个元组列表 如下所示 list a 1 b 3 c 5 我的目标是使用元组的第二个元素来获取元组列表中位数的第一个元素 在上面的情况下 我想要 b 的输出 因为中位数是 3 我尝试使用 NumPy 和以下代码 但无济于事 impo
  • 如何在matplotlib_venn中将维恩图保存为PNG图

    使用以下代码我尝试创建维恩图 然后另存为文件 import matplotlib from matplotlib venn import venn2 set1 set A B C D set2 set B C D E plt venn2 s
  • 构建一个电子邮件客户端有多难? - Python

    我正在这里未知的领域冒险 我正在尝试计算使用 Python 实现电子邮件客户端有多困难 邮件检索 邮件发送 电子邮件格式 电子邮件渲染 我也想知道是否所有协议都容易 难以支持 例如SMTP IMAP POP3 希望有人能指出我正确的方向 P
  • Python 正则表达式 findall

    我正在尝试使用 Python 2 7 2 中的正则表达式从字符串中提取所有出现的标记单词 或者简单地说 我想提取其中的每一段文本 p p 标签 这是我的尝试 regex ur u005B1P u005D u005B u002FP u005D

随机推荐

  • Apollo配置中心之配置获取方式

    apollo是携程开源的一款配置管理服务 开源地址https github com ctripcorp apollo apollo配置获取说明文档 https github com ctripcorp apollo wiki Java E5
  • Linux-VMware常用设置(时间+网络)及网络连接激活失败解决方法-基础篇②

    目录 一 设置时间 二 网络设置 1 激活网卡 方法一 直接启动网卡 仅限当此 方法二 修改配置文件 永久 2 将NAT模式改为桥接模式 什么是是NAT模式 如何改为桥接模式 三 虚拟机网络连接激活失败解决方法 第零步 确保Windows本
  • 同步串口和异步串口的区别及使用情况

    同步串口和异步串口的区别及使用情况 所谓同步就是等读写操作完了才返回 异步就是一调用马上返回 会有专门的线程进行读写操作 读写完了会通知的 一个会等待完成 一个不会 前者是同步 后者是异步 在计算机系统中 CPU和外部通信有两种通信方式 并
  • WebRTC 学习笔记(5)--线程模型

    1 基本线程 webrtc中主要有两个线程 signaling thread gt 处理小工作量方法 要求此线程内的方法都必须快速返回 worker thread gt 处理大工作量的方法 此线程内的方法可能会处理很长时间 如网络消息等 2
  • 加壳的app分析dex(可以正常抓包的话)

    简介 使用的是 https github com hluwa frida dexdump 安装 pip3 install frida dexdump 分析 这一步可以在window上看 使用查壳工具发现该apk使用的是360加固 两种脱de
  • JAVA宝典----字符串与数组(理解记忆)

    目录 一 字符串创建与存储的机制是什么 二 对于String类型的变量s 赋值语句s null与s 是否相同 三 equals和hashCode有什么区别 五 Java中数组是不是对象 六 数组的初始化方式有哪几种 一 字符串创建与存储的机
  • 微信小程序3,数据绑定,列表渲染,条件渲染

    目录 数据绑定 简单绑定 内容 组件属性 需要在双引号之内 控制属性 需要在双引号之内 关键字 需要在双引号之内 运算 三元运算 算数运算 逻辑判断 字符串运算 数据路径运算 组合 数组 对象 列表渲染 条件渲染 wx if block w
  • word2vec+textcnn

    word2vec textcnn 参考自 https www jianshu com p f69e8a306862
  • C++读取硬盘物理序列号-非管理员权限

    include stdafx h include
  • 如何判断一个对象中是否拥有某个属性?

    对象 var testDemo new TestDemo 判断对象testDemo是否拥有指定的name属性 1 使用in关键字 console log name in testDemo 使用这个方法不仅检查到自有属性 并且同时检查当前对象
  • 流程挖掘技术在内审与风控领域的应用实践

    内部审计作为企业监督体系的重要组成部分 在信息技术高速发展的大背景下 由于内部审计对象的信息化 数字化 也使得内部审计理念和方法 技术的信息化和数字化创新成为当务之急 而流程挖掘可以从根本上改变企业分析流程和执行风险控制的方式 通过前沿的风
  • 计算机网络---非归零码、曼彻斯特编码和差分曼彻斯特编码

    题目 在数据通信技术中 将利用模拟信道通过调制解调器传输模拟信号的方法称为频带传输 将利用数字信道直接传输数字信号的方法称为基带传输 基带传输中 数字信号的编码方式主要有三种 非归零码 曼彻斯特编码 差分曼彻斯特编码 非归零码 低电平 负电
  • UE4 解决当角色走到一个物体上时会被弹开的问题

    检查被踩物体的碰撞组件Collision那一栏的CanCharacterStepOn是否是Yes 如果不是请更改之 如果没效那就是其他的碰撞问题
  • leetcode 1035. 不相交的线

    2023 8 25 本题可以转化为 求两数组的最长公共子序列 进而可以用dp算法解决 方法类似于这题最长公共子序列 代码如下 class Solution public int maxUncrossedLines vector
  • 关于nltk安装出现的问题!渣渣版

    1 直接在cmd端输入 gt gt gt pip install nltk gt gt gt nltk download 2 在查阅了csdn各种博客后 我到 https github com nltk nltk data 官网上点击Clo
  • stm32 keil实现在线调试ram程序方法

    一 配置步骤 1 在main函数前面添加中断向量表偏移 如keil魔术棒中IROM1设置的是0x24001000 这在主函数前面需偏移到这个地址 可以使用图中函数 也可以直接操作 SCB gt VTOR 0x24001000 后面的值是你存
  • wsl2 拒绝访问(windows10 升级 windows 11 后) 问题解决

    1 临时解决方案 windows 防火墙关闭后重启电脑可访问 2 解决方案 控制面板 程序 启动或关闭windows功能 开启 Hyper v 重启 关闭 适用于Linux的windows子系统 重启 开启 适用于Linux的windows
  • Linux查看用户登陆历史记录(last命令的使用)

    查看某用户的操作历史 cat home username bash history 使用root登陆使用last x可查看用户登陆历史 last 命令 功能说明 列出目前与过去登入系统的用户相关信息 语 法 last adRx f n 帐号
  • python基础知识—集合

    集合 集合与列表 元组类似 可以存储多个数据 但是这些数据是不重复的 具有自动去重功能 集合的格式 变量名 元素1 元素2 元素3 变量 set 可迭代的内容 可迭代内容 gt list str 元组 字典 一 创建集合 1 set1 Tr
  • Win10和Jetson Nano环境下安装Mediapipe-python

    最近因学习需要用到google的mediapipe包进行手部识别 效果不错便想将其移植到jetson nano的ubuntu系统上 坑不少 在这里记录一下过程 步骤 一 Windows10的安装方法 二 Jetson Nano下的安装方法