请务必确保自己烧录的树莓派镜像是最新的Raspberry Pi OS,不然会出很多问题,如果你不怕麻烦使用的是19年之前的Raspberry系统,你可以看最后的opencv配置十分繁琐,而且可能存在一些解决不了的问题,十分建议使用最新Raspberry Pi OS镜像。


关于编辑器,用自带的Thonny就ok,不要自己去下其他的ide会出很多问题,或者用自带的Text Editor也可以,写完记得ctrl+s保存再在命令行python xxx.py运行就ok


关于pycharm,我不建议用,太卡了!!!如果你真的想试试

  1. 确保自己的default-jdk版本>11
  2. pycharm-community下载2021年或者之前版本(不然全是报错)
  3. 根据自己的操作系统下载32bit / 64bitArm 的Linux版本
  4. tar -zxvf pycharm-community-2021.1.3.tar.gz 直接解压
  5. cd ~/pycharm-community-2021.1.3.tar.gz/bin 进入目录
  6. ./pycharm.sh 运行pycharm

关于Anaconda,我不建议用

miniconda可以下载但是适配的Python版本过低,还有不少的环境问题需要解决。

完全版的Anaconda只适配arm64架构,但是3B+的主板配64arm系统使用会出现不适配的情况因此不能正确编译,如果你是4B及以上的版本可以试试,不过我估计很卡。


在进行环境配置之前,请确定自己已经连上wifi

开机后在右上角wifi找到自己的网,输入密码连接即可(wifi名会出现中文乱码,中文会转化成Unicode后转化成ASCII,随缘找或者把wifi名字改成英文+数字的组合更好找)

一、环境搭建

打开终端

首先需要升级和更新系统,以确保系统版本最新:

1
2
sudo apt-get update
sudo apt-get upgrade

接下来安装必要的库和工具:

1
2
3
4
sudo apt-get install python3-opencv   
sudo pip3 install numpy
sudo pip3 install pyqt5
sudo apt-get install vim
  • python3-opencv:OpenCV库是进行图像处理和计算机视觉的重要工具。
  • numpy:Numpy库提供了对大型多维数组的支持以及许多数学函数。一般系统都会配备好。
  • pyqt5:PyQt5库是用于创建GUI的Python库。一般系统都会配备好。
  • vim:Vim编辑器是一种高效的文本编辑器。

二、测试相机

在树莓派上测试相机之前,需要启用相机模块。打开终端并输入以下命令:

1
sudo raspi-config 

然后按照以下步骤进行设置:

  • 选择 Interface Options后回车。
  • 选择 Legacy Camera后回车。
  • 选择 yes。(提示Legacy camera support is enabled,代表启动成功)
  • 点击 OK,然后按两次 键选择 Finish
  • 这里会提示reboot,点击yes重启才会生效

在根目录下创建一个testCamera.py文件

1
2
cd ~
vim testCamera.py

vim使用提示,输入i后ctrl+shift+v可以粘贴代码进去编辑器,按esc后输入:wq可以保存退出

(会用ssh的话用finalshell很方便,ssh需要在sudo raspi-config的interface options里面打开。不会用的话用微信传输网页版、邮箱都可以。)

现在可以使用以下Python代码测试相机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import cv2

# 打开摄像头
cap = cv2.VideoCapture(0)

# 检查摄像头是否已经打开
if not cap.isOpened():
print("无法打开摄像头")
exit()

# 设置摄像头参数
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)

# 循环读取摄像头图像
while True:
# 读取当前帧
ret, frame = cap.read()

# 检查是否成功读取帧
if not ret:
print("无法读取摄像头图像")
break

# 显示当前帧
cv2.imshow("Video", frame)

# 等待按键
if cv2.waitKey(1) == ord('q'):
break

# 释放摄像头
cap.release()

# 关闭所有窗口
cv2.destroyAllWindows()

完成保存后使用以下命令运行程序:

1
python testCamera.py

这样就可以检查摄像头是否可用并测试树莓派的相机模块。正常的话图像如下:

之后返回命令行ctrl+c即可退出窗口。

到这里相机测试就结束了

附:旧版本Raspberry配置OpenCV3

如果你是用的是2019年之前的raspberry进行,可以按照下面配置opencv3,真的不建议,我自己做了两天都才修完bug,之后换了最新的Raspberry Pi OS 2023.5.4直接下载opencv3就ok了,完全不用这么麻烦,里面做了一些内存上的优化,想试试可以看下面。

一、展开文件系统

1
2
3
4
sudo raspi-config   //进入后先回车,然后键盘右键两下back,键盘右键再两下finsh
sudo reboot //重启
df -h //看下内存
sudo apt-get purge wolfram-engine //内存小的话可以清理,不然可以不管

二、安装依赖项

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//0、更新软件包、升级软件包
sudo apt-get update
sudo apt-get upgrade

//1、安装一些开发人员工具,包括CMake,这有助于我们配置OpenCV
sudo apt-get install build-essential cmake pkg-config

//2、安装一些映像I/O包,这些包允许我们从磁盘加载各种映像文件格式。此类文件格式的例子包括JPEG、PNG、TIFF等:
sudo apt-get install libjpeg-dev libtiff5-dev libpng-dev

//3、就像我们需要图像I/O包一样,我们也需要视频I/O包。这些库允许我们从磁盘上读取各种视频文件格式,以及直接处理视频流
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev

//4、OpenCV库附带一个名为highgui用于在我们的屏幕上显示图像并构建基本的GUI。为了编译highgui模块,我们需要安装GTK开发库:
sudo apt-get install libgtk2.0-dev

//5、通过安装一些额外的依赖项,可以进一步优化OpenCV内部的许多操作(矩阵操作)
sudo apt-get install libatlas-base-dev gfortran

//6、我们同时安装Python 2.7和Python 3头文件,这样我们就可以使用Python绑定编译OpenCV
sudo apt-get install python2.7-dev python3-dev

三、下载opencv源代码

1
2
3
4
5
6
7
8
//1、从官网上下载opencv3
cd ~
wget -O opencv.zip https://github.com/Itseez/opencv/archive/3.3.0.zip
unzip opencv.zip

//2、完全安装OpenCV 3(例如,可以访问SIFT和SURF等功能),因此我们还需要抓取opencv_contrib存储库:
wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip
unzip opencv_contrib.zip

四、python2.7 or python3(我用的Python3)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
1、我们首先需要安装pip内核
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

2、下载虚拟环境
sudo pip3 install virtualenv virtualenvwrapper -i https://mirrors.aliyun.com/pypi/simple/
sudo rm -rf ~/.cache/pip

3、配置~/.profile(使用下面二者之一,推荐用下面那部分比较方便)
echo -e "\n# virtualenv and virtualenvwrapper" >> ~/.profile
echo "export WORKON_HOME=$HOME/.virtualenvs" >> ~/.profile
echo "export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3" >> ~/.profile
echo "source /usr/local/bin/virtualenvwrapper.sh" >> ~/.profile

//或者把下面的内容写到~/.profile文件内
//# virtualenv and virtualenvwrapper
//export WORKON_HOME=$HOME/.virtualenvs
//export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
//source /usr/local/bin/virtualenvwrapper.sh

4、配置完之后应用配置
source ~/.profile

5、创建虚拟环境
mkvirtualenv cv -p python3

6、怎么进入虚拟环境
source ~/.profile
workon cv

7、安装Numpy(注意要在cv3环境内)
pip3 install numpy

五、编译和安装OpenCV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
1、进入虚拟环境
workon cv

2、使用CMake设置我们的构建
cd ~/opencv-3.3.0/
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D BUILD_opencv_python3=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D PYTHON3_LIBRARY=/usr/lib/aarch64-linux-gnu/libpython3.9.so \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/home/huaxi/.virtualenvs/cv/lib/python3.9/site-packages/numpy/core/include \
-D PYTHON3_PACKAGES_PATH=/usr/lib/python3/dist-packages \
-D WITH_OPENEXR=OFF \
-DCMAKE_CXX_FLAGS="-Wa,-mbig-obj"\
-D BUILD_EXAMPLES=ON ..


3、配置交换空间,使用四个核心进行编译
# 打开你的/etc/dphys-swapfile然后编辑CONF_SWAPSIZE变量:

# set size to absolute value, leaving empty (default) then uses computed value

# you most likely don't want this, unless you have an special disk situation

# CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024

4、激活新的交换空间,重新启动交换服务:
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start

5、编译OpenCV
make -j4

6、在Raspberry Pi 3上安装OpenCV 3
sudo make install
sudo ldconfig

六、完成OpenCV的安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
对于python2.7
$ ls -l /usr/local/lib/python2.7/site-packages/
总计1852
-rw-r--r-- 1根词根1895772 3月20日20:00 cv2.so

$ cd ~/.virtualenvs/cv/lib/python2.7/site-packages/
$ ln -s /usr/local/lib/python2.7/site-packages/cv2.so cv2.so

对于python3
$ ls -l /usr/local/lib/python3.9/dist-packages/
总计1852
-rw-r--r-- 1根词根1895932 3月20日 21:51 cv2.cpython-34m.so
$ cd /usr/local/lib/python3.5/site-packages/
$ sudo mv cv2.cpython-35m-arm-linux-gnueabihf.so cv2.so

七、测试opencv3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ source ~/.profile 
$ workon cv3
$ python

import cv2
cv2.\__version__
'3.3.0'

2、!!!确保前面正确安装执行下面可以清理内存,可以不执行,但一定不要乱执行!!!
rm -rf opencv-3.3.0 opencv_contrib-3.3.0

3、取消所有所有编译,配置交换空间,使用四个核心进行编译
#打开你的/etc/dphys-swapfile然后编辑CONF_SWAPSIZE变量:

set size to absolute value, leaving empty (default) then uses computed value

#you most likely don't want this, unless you have an special disk situation
CONF_SWAPSIZE=100

CONF_SWAPSIZE=1024 #注释掉1024MB的线路,不然以后会很卡

4、激活新的交换空间,重新启动交换服务:
sudo /etc/init.d/dphys-swapfile stop
sudo /etc/init.d/dphys-swapfile start