1、CSI摄像头
CSI即相机串行接口,中文称Cmos传感摄像头接口,与DSI接口同属一类,都是MIPI(移动产业处理器接口联盟)制定的一种接口规范。
CSI接口摄像头具有以下特点:
高速传输:CSI接口摄像头采用差分信号传输方式,能够提供高速的图像数据传输速率,适用于实时图像采集和处理。
低功耗:CSI接口摄像头在传输过程中能够提供较低的功耗,有利于节约设备电源并延长电池寿命。
易于集成:CSI接口摄像头可以通过标准化接口与支持CSI协议的处理器或芯片进行连接,便于系统集成和开发。
高质量图像:CSI接口摄像头能够提供高质量的图像捕获和传输能力,并支持不同的图像格式和分辨率。
安装摄像头时,拉起CSI接口处的挡板,拿起摄像头模块,撕掉贴在镜头上的保护膜,将摄像头下面的贴纸拿掉,粘在电路板固定,然后将有蓝色胶带一面的排线朝向USB2.0的接口方向,将排线插入CSI接口,依稀可以看见排线的金属引脚和接口的金属片接触,再将挡板拉回固定。
2、CSI摄像头配置
(1)vcgencmd get_camera
#supported是系统的问题,为1正常
#detected是物理连接的问题,为1正常,说明检测到摄像头,已挂载
#libcamera interfaces=1是新增的,以前的系统没有,但是如果我们调用camera3这个也要是1才行
(2)sudo nano /etc/modules
命令显示supported=0 detected=0或者是找不到video 0,在树莓派系统里面,camera module是放在boot目录以固件形式加载的,不是一个标准的V4L2(Video for Linux 2)的摄像头驱动,所以加载后找不到/dev/video0的设备节点,因此要将CSI摄像头作为一个视频设备文件使用,则要开启V4L2模块。
(3)sudo nano /boot/firmware/config.txt
我的树莓派系统使用的Linux较新,在raspi_config并没有carema使能这个选项。网上很多老的版本几乎不能用。先设置下固件启动配置。
重启后,vcgencmd get_camera可以发现系统支持,物理连接正常。只是libcamera 库的驱动没有加载。我们先不管这个,看看OpenCV能不能调用。
提示:CSI摄像头和电路板有个卡槽连接的部分是接口,,这个地方非常容易脱落,我昨天搞了半小时都没有发现这个脱落,如果物理连接不上,那么这个detected=0。
(4)ls -ltrh /dev/video*
如果有这个video0那么在OpenCV就可以调用
(5)libcamera
要使libcamera interfaces=1,,需要在/boot/firmware/config.txt 中添加dtoverlay=ov5647,我添加后重启发现
3、CSI摄像头的使用
(1)libcamera-jpeg -t 100 -o test.jpeg 拍一张图片存放到当前路径
(2)加载dtoverlay=ov5647后使用opencv出现问题
经过查询确实两者不能兼容,所以把这个dtoverlay=ov5647注释掉。我们还是使用OpenCV把。
(3)使用OpenCV调用CSI摄像头
附上代码看效果,OpenCV的使用,我们下文继续。
import cv2
cap = cv2.VideoCapture(0)
print(cap.isOpened())
cap.set(cv2.CAP_PROP_FRAME_WIDTH,480)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT,320)
while cap.isOpened() :
ret, frame = cap.read()
# 显示图像窗口在树莓派的屏幕上
cv2.imshow('Capture', frame)
# 按下q键退出
key = cv2.waitKey(1)
if key & 0x00FF == ord('q'):
break
# 释放资源和关闭窗口
cap.release()
cv2.destroyAllWindows()
运行这个程序实在VNC远程桌面上运行的。
(4)使用Pycharm远程调试
qt.qpa.xcb: could not connect to display
表示Qt应用程序通过XCB(X11的C语言版本库)尝试连接到X server(显示服务器),但没有成功。在没有图形界面的环境下,比如在没有GUI的SSH会话或者树莓派的远程调试场景中,这个错误会经常出现。
为什么会出现这个问题?
Linux会将数据发送给Windows机器上的一个X Server,然后X Server将窗口渲染出来,从而实现通过console显示窗口的效果。XShell未集成X Server,X Server集成在Xmanager中,因此只有安装了X Manger才能不出现上述的错误。MobaXterm默认集成了X Server,启动一个窗口时,会启动一个X Server,因此可以直接显示图片窗口。
因此要让Pycharm在远程调试的时候显示imshow的视频,不能用xShell软件,要使用带X Server的MobaXterm。
a-下载MobaXterm,配置SSH,设置DISPLAY
DISPLAY=localhost:10.0 source ~/.bashrc
b-设置Pycharm运行配置环境
设置完毕,可以远程运行了。
如果同学们手头有USB的摄像头也是可以用的,注意设置cap = cv2.VideoCapture(0),如果只有一个摄像头,VideoCapture里面是0;如果有2个摄像头注意对应关系,VideoCapture里面USB摄像头对应的就是1。