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

第一步尝试通过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(加速推理用的)