本篇我们要完成一个如下图所示的树莓派摄像头套件的安装和调试,包含以下几个步骤

  1. 树莓派系统安装
  2. 树莓派系统设置
  3. 树莓派摄像头调试
  4. 树莓派使用摄像头以及python实现拍照以及录制视频
  5. 错误收集及解决方案

1.树莓派系统安装

树莓派系统下载,树莓派官网

将SD卡插入读卡器,读卡器插入电脑

使用Etcher工具烧录系统

划重点,以下要连接树莓派进行设置和开发部署了,连接树莓派一般来说网上有以下几种方法

树莓派常用连接方法

连接方式       

使用总结

一根网线

有说直接拿一个网线连接树莓派和电脑的,网上有很多文章,大家自行搜索,我的使用体验是稳定性非常差,经常莫名其妙的就连不上了,所以不推荐

ssh        

在SD卡根目录创建ssh文件,然后使用类似putty这种工具,远程登录。这个方法相对比较稳定,比较推荐,但是也不出现半天连不上的情况,其实是因为树莓派系统没有安装成功,他并没有开机,这个时候通过ssh连接显然是没有任何反应的,但是你又不知道哪里出错了,所以只能干等

树莓派和电脑同时连接路由器

路由器会自动给树莓派分配ip,这个时候可以通过查看这个局域网下所有设备的ip地址来找到树莓派,然后就可以通过vnc等连接树莓派进行操作,但是也存在ip列表中找不到树莓派的情况,所以相对稳定,相对推荐

外接显示器

这个墙裂推荐,直接通过外显看到整个开机过程,如果开机不成功,哪里有问题一目了然,推荐大家直接使用外显方法,上面三种方法直接略过,都是踩过无数坑被蹂躏了无数次的人的肺腑之言

下面我就来讲下安装好系统后如何连接外显

2.树莓派系统设置

使用Etcher工具烧录系统

怎么安装Tesseract OCR_ide

烧录完成后更改config.txt配置文件

怎么安装Tesseract OCR_单片机_02

通过hdmi线连接显示器

3.树莓派系统设置

打开配置界面

sudo raspi-config

打开Camera, SSH, VNC

怎么安装Tesseract OCR_opencv_03

怎么安装Tesseract OCR_单片机_04

接下来设置网络连接,个人的工作场景对稳定性要求比较高,在使用过程个人偏向于用网线,所以首先使用网线将树莓派连接到路由器,接着树莓派端执行命令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