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