本篇我们要完成一个如下图所示的树莓派摄像头套件的安装和调试,包含以下几个步骤
- 树莓派系统安装
- 树莓派系统设置
- 树莓派摄像头调试
- 树莓派使用摄像头以及python实现拍照以及录制视频
- 错误收集及解决方案
1.树莓派系统安装
树莓派系统下载,树莓派官网
将SD卡插入读卡器,读卡器插入电脑
使用Etcher工具烧录系统
划重点,以下要连接树莓派进行设置和开发部署了,连接树莓派一般来说网上有以下几种方法
树莓派常用连接方法
连接方式 | 使用总结 |
一根网线 | 有说直接拿一个网线连接树莓派和电脑的,网上有很多文章,大家自行搜索,我的使用体验是稳定性非常差,经常莫名其妙的就连不上了,所以不推荐 |
ssh | 在SD卡根目录创建ssh文件,然后使用类似putty这种工具,远程登录。这个方法相对比较稳定,比较推荐,但是也不出现半天连不上的情况,其实是因为树莓派系统没有安装成功,他并没有开机,这个时候通过ssh连接显然是没有任何反应的,但是你又不知道哪里出错了,所以只能干等 |
树莓派和电脑同时连接路由器 | 路由器会自动给树莓派分配ip,这个时候可以通过查看这个局域网下所有设备的ip地址来找到树莓派,然后就可以通过vnc等连接树莓派进行操作,但是也存在ip列表中找不到树莓派的情况,所以相对稳定,相对推荐 |
外接显示器 | 这个墙裂推荐,直接通过外显看到整个开机过程,如果开机不成功,哪里有问题一目了然,推荐大家直接使用外显方法,上面三种方法直接略过,都是踩过无数坑被蹂躏了无数次的人的肺腑之言 |
下面我就来讲下安装好系统后如何连接外显
2.树莓派系统设置
使用Etcher工具烧录系统
烧录完成后更改config.txt配置文件
通过hdmi线连接显示器
3.树莓派系统设置
打开配置界面
sudo raspi-config
打开Camera, SSH, VNC
接下来设置网络连接,个人的工作场景对稳定性要求比较高,在使用过程个人偏向于用网线,所以首先使用网线将树莓派连接到路由器,接着树莓派端执行命令sudo nano /etc/dhcpcd.conf,添加以下内容。重启系统,查看ip是否生效,网络是否正常连接
interface eth0
static ip_address=192.168.10.221/24
static routers=192.168.10.1
static domain_name_servers=114.114.114.114
网络连接后需要更新到最新系统,在更新以前首先更新源配置文件
输入命令:sudo nano /etc/apt/sources.list,注释默认源,添加以下新源
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ bullseye main non-free contrib rpi
输入命令:sudo nano /etc/apt/sources.list.d/raspi.list,注释默认源,添加以下新源
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ bullseye main
输入命令:sudo apt-get update,更新系统
3.树莓派摄像头调试
安装摄像头模块
[图片]
使用命令拍照查看摄像头功能是否正常
raspistill -t 2000 -o image.jpg
4.树莓派使用摄像头以及python实现拍照以及录制视频
安装python
sudo apt-get install python3-opencv
输入命令查看opencv是否安装成功
python
import cv2
使用opencv拍照
import cv2
cap = cv2.VideoCapture(0)
while (cap.isOpened()):
ret, frame = cap.read()
cv2.imwrite('image_path', frame)
break
cap.release()
cv2.destroyAllWindows()
使用opencv录制视频
import cv2
cap=cv2.VideoCapture(0) #0代表树莓派上的摄像头,1代表USB摄像头
cap.set(3,1024)#摄像头采集图像的宽度320
cap.set(4,768)#摄像头采集图像的高度240
cap.set(5,30) #摄像头采集图像的帧率fps为30
while(True):
ret,color_frame=cap.read()
cv2.imshow('color_frame',color_frame)
if cv2.waitKey(1)&0xff==ord('q'): #按Q键退出
break
cap.release()
cv2.destroyAllWindows()
5.错误收集及解决方案
问题1:opencv录制视频报错
[ WARN:0] OpenCV | GStreamer warning: Cannot query video position: status=0, value=-1, duration=-1
[ WARN:0] OpenCV | GStreamer warning: GStreamer: unhandled property
[ WARN:0] OpenCV | GStreamer warning: Embedded video playback halted;module v4l2src0 reported:Internal data flow error.
[ WARN:0] OpenCV | GStreamer warning: unable to start pipeline
修改代码中的帧率
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
cap.set(cv2.CAP_PROP_FPS, 30) # 设置帧率为60,就会报错
问题2:必须加粗加红,搞了我一下午,安装opencv的时候出现的一系列问题,初步估计是树莓派系统升级了,跟着一堆依赖库你依赖我我依赖你兼容性没有做好,导致的兼容性问题,记录如下
2.1 在使用sudo apt-get install python3-opencv 安装是报以下错误信息
libc6-dev : Breaks: libgcc-8-dev (< 8.4.0-2~) but 8.3.0-6+rpi1 is to be installed
解决方案
Sudo apt install gcc-8-base
Sudo apt autoclean
Sudo reboot
2.2 在2.1解决之后,opencv可以装了,但是在import cv2的时候报以下错误,就是说这个库文件找不到
import cv2
ImportError: libmmal_core.so.0: cannot open shared object file
解决方案
sudo apt-get install libraspberrypi-dev
2.3 在2.2解决之后,import cv2没问题,cap=cv2.VideoCapture(0)找摄像头的时候报找不到
[ WARN:0] global /tmp/pip-req-build-6amqbhlx/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
解决方案
首先确认树莓派中是否有video设备
ls -l /dev/
如果没有,则在/etc/modules的最后,加上:bcm2835-v4l2
sudo nano /etc/modules
添加完之后,需要重启
Sudo reboot
这时候如果有video设备后cap=cv2.VideoCapture(0)还是报错,则把0改为-1
cap=cv2.VideoCapture(-1)
接着有可能还会出现可以用opencv拍照,但不能视频的问题,则参考问题1的解决方案,通过修改帧率解决
问题3:必须加粗加红,搞了我一上午,朋友的树莓派在安装opencv的时候又出现了新问题
Unable to locate package python3-opencv
查了一下,是树莓派系统版本的问题,树莓派不同的版本对应着不同的源,我之前用的都是bulleye,我朋友安装的是buster版本,bulleye是开发版本,buster是稳定版本,正如之前缩写是更换bulleye的源,以下附上更新buster的源
sudo nano /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
sudo apt-get update
sudo apt-get upgrade
sudo nano /etc/apt/sources.list.d/raspi.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
另外为了防止更新成错误的源,在更新源之前输入以下命令查看自己的系统版本
lsb_release -a