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 的相关文章

  • 如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

    There are a great many existing Q A on Stack Overflow on this general theme but they are all either poor quality typical
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com
  • 从 scikit-learn 导入 make_blobs [重复]

    这个问题在这里已经有答案了 我收到下一个警告 D Programming Python ML venv lib site packages sklearn utils deprecation py 77 DeprecationWarning
  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 在循环中每次迭代开始时将变量重新分配给原始值(在循环之前定义)

    在Python中 你使用 在每次迭代开始时将变量重新分配给原始值 在循环之前定义 时 也就是说 original 1D o o o for i in range 0 3 new original 1D revert back to orig
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • SSH,运行进程然后忽略输出

    我有一个命令可以使用 SSH 并在 SSH 后运行脚本 该脚本运行一个二进制文件 脚本完成后 我可以输入任意键 本地终端将恢复到正常状态 但是 由于该进程仍在我通过 SSH 连接的计算机中运行 因此任何时候它都会登录到stdout我在本地终
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 用于运行可执行文件的python多线程进程

    我正在尝试将一个在 Windows 上运行可执行文件并管理文本输出文件的 python 脚本升级到使用多线程进程的版本 以便我可以利用多个核心 我有四个独立版本的可执行文件 每个线程都知道要访问它们 这部分工作正常 我遇到问题的地方是当它们
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 如何使用google colab在jupyter笔记本中显示GIF?

    我正在使用 google colab 想嵌入一个 gif 有谁知道如何做到这一点 我正在使用下面的代码 它并没有在笔记本中为 gif 制作动画 我希望笔记本是交互式的 这样人们就可以看到代码的动画效果 而无需运行它 我发现很多方法在 Goo
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • Python - 字典和列表相交

    给定以下数据结构 找出这两种数据结构共有的交集键的最有效方法是什么 dict1 2A 3A 4B list1 2A 4B Expected output 2A 4B 如果这也能产生更快的输出 我可以将列表 不是 dict1 组织到任何其他数
  • Python:元类属性有时会覆盖类属性?

    下面代码的结果让我感到困惑 class MyClass type property def a self return 1 class MyObject object metaclass MyClass a 2 print MyObject

随机推荐

  • 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下的安装方法