【亲测有效】树莓派4B安装realsense(Intel深度摄像头)

2023-05-16

第一步尝试通过pip下载,发现不能下载

pip install pyrealsense2

pip中的pyrealsense2只能下载给X86结构的计算机,并不能下载给arm结构的树莓派,故我们需要获得源码手动进行编译安装

这个是官网的安装教程:

https://github.com/acrobotic/Ai_Demos_RPi/wiki/Raspberry-Pi-4-and-Intel-RealSense-D435

不过安装后在启动python后,import pyrealsense2,还是发现报错,于是找到其他方法,进行安装,下面分享我的安装过程和遇到的一些问题解决方案。
本树莓派环境

Linux raspberrypi 5.10.63-v7l+ 
# 是raspberry pi官方的32位系统,下载包为2021-05-07-raspios-buster-armhf
python版本 3.7.3
cmake版本 3.16.3
摄像头型号:Intel D415 #型号影响不大

第一步:安装依赖包

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade
sudo apt-get install git cmake libssl-dev libusb-1.0-0-dev pkg-config libgtk-3-dev
sudo apt-get install libglfw3-dev libgl1-mesa-dev libglu1-mesa-dev

前两步必装,第三条用于realsense-viewer,可不装

第二步:下载realsense SDK

git clone https://github.com/IntelRealSense/librealsense.git

输入上面命令,如果显示fatal:不能连接到这个网址之类的,我们直接到他的网址下(https://github.com/IntelRealSense/librealsense)下载zip包(librealsense-master.zip),如果树莓派有显示器则我们可以到那个网址下直接下载,没有显示器,我们也可以通过下载到PC机,再通过scp命令传输到树莓派上。下载慢的话可以使用IDM或者迅雷获取安装包的网址进行下载。

第三步:编译准备

在编译之前,我们应该了解一下swap空间这个东西,在编译或者运行其他较大的程序时,有时总卡在99%不能运行下去,有可能就是运行内存不够用,这里建议树莓派4B以下的都扩展一下swap空间,如果4B也有这个问题同样扩展。还有分配太多swap空间,会浪费SD卡的磁盘空间,一般内存小于2G的情况下,交换分区应为内存的2倍。
①方法一

sudo apt-get install dphys-swapfile  # 安装dphys-swapfile,该软件自动设置为内存的两倍大小
sudo nano /etc/dphys-swapfile  # 将 CONF_SWAPSIZE 和 CONF_MAXSWAP 这俩值修改成想要的大小,一般内存小于2G的情况下,交换分区应为内存的2倍
sudo /etc/init.d/dphys-swapfile restart  # 重启
free -h  # 查看结果

②方法二

sudo swapoff /var/swap  # 停止服务
sudo vi /etc/dphys-swapfile  # 将 CONF_SWAPSIZE 和 CONF_MAXSWAP 这俩值修改成想要的大小,一般内存小于2G的情况下,交换分区应为内存的2倍
sudo /etc/init.d/dphys-swapfile restart  # 重启
free -h  # 查看结果

下面开始准备正式编译

mv librealsense-master librealsense #给解压后的包改名
cd librealsense
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release -DBUILD_EXAMPLES=true -DFORCE_RSUSB_BACKEND=ON -DBUILD_WITH_TM2=false -DIMPORT_DEPTH_CAM_FW=false

编译

sudo make uninstall && make clean && make && sudo make install

如果还是遇到clone一些包时发现抱错连接不上github,这是我们可以尝试让树莓派连接手机热点,再执行上面的命令。(在编译时要clone下什么pybindll什么包时,无法从github上下载,我就是这么解决的),编译的过程比较久,差不多要1~2小时

第四步:设置udev规则

首先我们先将深度摄像头D415

cd .. # 回到build文件夹之前的文件夹,可以看到scripts文件夹
sudo ./scripts/setup_udev_rules.sh

测试
在命令行中输入如下指令能看到界面就证明成功了

realsense-viewer

—————————————————————————————————

安装pyrealsense2

cd ~/librealsense/build

# for python2
cmake .. -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=$(which python)

# for python3
cmake .. -DBUILD_PYTHON_BINDINGS=bool:true -DPYTHON_EXECUTABLE=$(which python3)

make -j1
sudo make install

# add python path(添加python路径,该条不是指令)
vim ~/.zshrc # 复制下面语句到~/.zshrc中
export PYTHONPATH=$PYTHONPATH:/usr/local/lib

source ~/.zshrc

在这里编译安装的时候我们还是会遇到一些无法从github上clone下来,我们同样在编译的时候将树莓派连接手机热点的方式进行下载。

重要!!!

上面做完后,我们可以到librealsense/build/wrappers/python目录下看发现有了一些so、so.2、so.2.50、so.2.50.0结尾的文件,我们将这些文件全部拷贝至 /usr/lib/python3/dist-packages/ 文件夹下,不是 /usr/lib/python3.7 文件夹下。

测试

我们新建一个测试程序进行验证(看下面程序我们知道一定还要有numpy和opencv-python这两个包才行,我的cv2版本是4.1.2-openvino)

import pyrealsense2 as rs
import numpy as np
import cv2

if __name__ == "__main__":
    # Configure depth and color streams
    pipeline = rs.pipeline()
    config = rs.config()
    config.enable_stream(rs.stream.depth, 640, 480, rs.format.z16, 30)
    config.enable_stream(rs.stream.color, 640, 480, rs.format.bgr8, 30)
    # Start streaming
    pipeline.start(config)
    try:
        while True:
            # Wait for a coherent pair of frames: depth and color
            frames = pipeline.wait_for_frames()
            depth_frame = frames.get_depth_frame()
            color_frame = frames.get_color_frame()
            if not depth_frame or not color_frame:
                continue
            # Convert images to numpy arrays

            depth_image = np.asanyarray(depth_frame.get_data())

            color_image = np.asanyarray(color_frame.get_data())

            # Apply colormap on depth image (image must be converted to 8-bit per pixel first)
            depth_colormap = cv2.applyColorMap(cv2.convertScaleAbs(depth_image, alpha=0.03), cv2.COLORMAP_JET)
            # Stack both images horizontally
            images = np.hstack((color_image, depth_colormap))
            # Show images
            cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE)
            cv2.imshow('RealSense', images)
            key = cv2.waitKey(1)
            # Press esc or 'q' to close the image window
            if key & 0xFF == ord('q') or key == 27:
                cv2.destroyAllWindows()
                break
    finally:
        # Stop streaming
        pipeline.stop()

当能够出现画面即说明安装成功

后面的感悟:如果要用树莓派进行有关图像视觉深度学习模型的推理,不建议用树莓派(不过可以试试插上intel神经计算棒),建议使用推理计算性能更好的边缘设备如Nvidia的JetsonNano(usb接口多,能多插摄像头,特注:①intel的深度摄像头要独占一个USB3,不能插一个拓展坞到usb3接口,再把深度摄像头查到拓展坞上;②还需要传输性能较好的USB线一般的手机充电线都不行)或者更强的JetsonTX2(没记错的话接口没nano多)。目标检测可以试试yolov4-tiny(darknet)+TensorRT(加速推理用的)

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

【亲测有效】树莓派4B安装realsense(Intel深度摄像头) 的相关文章

  • 为什么我的超便携笔记本电脑 CPU 无法在 HPC 中保持最佳性能

    我开发了一个高性能Cholesky 分解例程 在单个 CPU 上应具有约 10 5 GFLOP 的峰值性能 无超线程 但是当我测试它的性能时 有一些我不明白的现象 在我的实验中 我测量了矩阵维度 N 从 250 增加到 10000 时的性能
  • 'instCount' Pin 工具计数什么指令?

    我在主函数内使用空主体的基本 C 程序上运行 pintool instCount int main 当我在这个可执行程序上运行 instCount 时 它显示大约 86000 条指令 即使程序很小 为什么会生成这么多指令 有什么想法吗 谢谢
  • Intel 在哪里记录了 ModR/M 字节中扩展寄存器 (R8-R15) 的编码?

    我用的是官方最新的 英特尔 64 和 IA 32 架构软件开发人员手册合并卷 1 2A 2B 2C 2D 3A 3B 3C 3D 和 4 作为了解x86 64 ISA的机器级编码的参考 第 2 卷第 2 1 3 节中提供的 ModR M 和
  • Windows 10 下多核处理器上的 QueryPerformanceCounter 行为不稳定

    在 Windows 下 我的应用程序使用QueryPerformanceCounter and QueryPerformanceFrequency 来执行 高分辨率 时间戳 自 Windows 10 以来 到目前为止仅在 Intel i7
  • AVX/SSE 轮向下浮动并返回整数向量?

    有没有办法使用 AVX SSE 获取浮点数向量 向下舍入并生成整数向量 所有底层内在方法似乎都会产生一个最终的浮点向量 这很奇怪 因为四舍五入会产生一个整数 SSE 可以根据您选择的截断 向零 或当前舍入模式 通常是 IEEE 默认模式 最
  • 加载操作在调度、完成或其他时间时是否从 RS 中释放?

    On modern Intel1 x86 are load uops freed from the RS Reservation Station at the point they dispatch2 or when they comple
  • 从 C 调用 Intel 8086 汇编程序

    我需要为汇编语言开发一个过程 并从 C 语言调用该过程 传递一个字符串并返回一个整数值 我的组装程序 独立 运行良好 我需要帮助将它们连接在一起 程序应该在 Intel 8086 上运行 我需要使用 MASM 或 emu8086 作为汇编器
  • Windows:Numpy mkl_intel_thread.dll

    经过几个小时的尝试和调查 我已经成功解决了这个问题Numpys mkl intel thread dll文件错误 以下内容可能无法解决所有情况 但我会尝试解释我的特定案例的详细信息 以帮助其他遇到相同问题的人 我的问题 当尝试启动 Anac
  • Intel x86 - 中断服务例程责任

    我没有真正意义上的问题 但我会尽力澄清内容问题 假设我们有一个微内核 PC Intel x86 32 位保护模式 中断描述符表 IDT and 中断服务程序 ISR 对于每个CPU异常 ISR 被成功调用 例如Division by Zer
  • 如何将两个 SSE 寄存器加在一起

    我有两个 SSE 寄存器 128 位是一个寄存器 我想将它们相加 我知道如何在其中添加相应的单词 例如我可以这样做 mm add epi16如果我在寄存器中使用 16 位字 但我想要的是类似的东西 mm add epi128 不存在 它将使
  • 在 Skylake 上展开 1 周期循环会使性能降低 25%。 uops调度问题?

    TL DR我有一个循环需要 1 个周期才能在 Skylake 上执行 它执行 3 次加法 1 次增量 跳转 当我将其展开超过 2 次 无论多少次 时 我的程序运行速度会慢 25 左右 这可能与对齐有关 但我不清楚是什么 编辑 这个问题曾经询
  • 如何完全关闭 TBB 代码中的线程

    注意 这不是重复的这个问题 https stackoverflow com questions 3786408 number of threads used by intel tbb 给定一个与 TBB 并行的复杂软件 我如何完全关闭线程
  • 高清处理器显卡 (HD4000) 无法作为英特尔 OpenCL SDK 中的设备加载

    我使用 i7 3770K Ivy Bridge 和 HD 4000 并且我已经安装了最新的驱动程序和最新的OpenCL SDK http software intel com en us articles vcsource tools op
  • intel core i7 处理器使用哪种缓存映射技术?

    我了解了不同的缓存映射技术 例如直接映射和完全关联或集关联映射 以及这些技术之间的权衡 维基百科 https en wikipedia org wiki Cache placement policies 但我很好奇现在Intel core
  • Linux 上的 OpenCL,集成英特尔图形芯片

    我想用OpenCL在 Debian 8 上 我读到在本页 http streamcomputing eu blog 2011 12 29 opencl hardware support Linux 上不支持 Intel 的 GPU 这篇文章
  • 现在 x86 上有多少指令? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • Haswell 微架构在性能中没有停滞周期后端

    我在 Haswell CPU Intel Core i7 4790 上安装了 perf 但 性能列表 不包括 stalled cycles frontend 或 stalled cycles backend 我检查了http www int
  • 混洗两个 __m128i 的 64 位部分的最佳方法

    我有两个 m128is a and b 我想进行洗牌 以便高 64 位a落在低 64 位dst和低 64 位b落在上64dst i e dst 0 63 a 64 127 dst 64 127 b 0 63 相当于 m128i dst mm
  • 英特尔 SGX 开发者许可和开源软件

    是否可以获得许可的开发人员证书 用于在生产模式下签署经过安全审查 社区开发的开源 SGX 软件二进制文件 并将其发布到 apt 或 rpm 等开源存储库上 我刚刚询问了Intel SGX团队 他们说只有经过验证的供应商才能获得证书并在生产模
  • 在 Core i7 Mac 上禁用睿频加速?

    有没有什么方法可以在运行 Mac OS X 的 Core i7 mac 上以编程方式禁用 Turbo Boost 我需要能够在代码优化等过程中出于基准测试目的执行此操作 如果做不到这一点 任何可以禁用 启用 Turbo Boost 的实用程

随机推荐