嵌入式人工智能(48-树莓派4B使用CSI接口的摄像头)

u010152658 2024-09-17 14:31:05 阅读 61

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的使用,我们下文继续。

<code>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远程调试

<code>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。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。