智慧停车场的车辆识别系统:在树莓派上部署和运行
智慧停车场的车辆识别系统:在树莓派上部署和运行
智慧停车场系统是现代城市中重要的一环,其中车辆识别技术起到了关键作用。本文将介绍如何在树莓派环境下搭建一个车辆识别系统,包括硬件配置、软件安装和系统部署。
参考的项目
这里我参考我很多项目,其中有PYQT 做的也有纯 web 的但是都达不到我的要求,这里我想的是两者结合起来,
当前这里我并没有过多的创新
硬件要求
- 树莓派4B:本项目使用树莓派4B作为主控设备。
- 摄像头模块:与树莓派兼容的摄像头模块,用于捕捉车辆图像。
软件和库
- 操作系统:推荐使用Raspberry Pi OS,这是为树莓派优化的Debian-based Linux系统。
- Python环境:Python是执行识别脚本的必备环境。
- PyQt5:用于创建图形用户界面(GUI)。
步骤
步骤1:部署代码到树莓派
确保你的代码可以在树莓派的Raspberry Pi OS上运行。可以通过SSH或直接在树莓派上操作进行部署。
步骤2:连接摄像头模块
连接摄像头到树莓派,并确保系统能够识别。可以使用raspistill命令来测试摄像头是否正常工作。
步骤3:部署车辆识别系统
可以选择多种方式进行车辆识别:
- API调用:使用如百度云的车牌识别API进行车辆识别。
- OpenCV:虽然有些复杂,但可以直接在树莓派上使用OpenCV进行图像处理和识别。参考OpenCV on Raspberry Pi。
- 自主研发:使用HyperLPR等开源方案,参考HyperLPR。
步骤4:PyQt5 UI界面
使用PyQt5创建一个GUI,用于展示识别结果或进行交互。确保PyQt5在树莓派上的兼容性。
步骤5:使用VNC进行远程连接
安装和配置VNC服务器在树莓派上,从而可以远程访问桌面。参考VNC Setup on Raspberry Pi。
安全性和稳定性
在部署过程中,确保考虑到系统的安全性和稳定性。定期更新系统和软件,监控系统运行状态,确保数据传输安全。
在虚拟机VM上搭建树莓派的开发环境(硬件也是一样的)
下载对应的镜像, 下面这个地址是一个 debian10 的
https://downloads.raspberrypi.com/rpd_x86/images/rpd_x86-2021-01-12/
树莓派官方的镜像和地址
- 烧录的地址: https://etcher.balena.io/#download-etcher
- 镜像下载地址, 这里我们不需要桌面下载一个最小的进行烧录:https://downloads.raspberrypi.com/raspios_lite_arm64/images/raspios_lite_arm64-2022-01-28/
PS: 我说明一下这里为什么要用这个 raspios_lite_arm64-2022-01-28 因为这里没有显示器然后最新版的 debian 12 貌似是移除了
pi 用户所以这里我无论怎么样都登录不上去,所以后面我就选择了一个最稳定的版本这个版本是 debian11
VM 安装
然后安装注意,可以参考下面的文章一步一步的走
让主机和树莓派通信使用桥接模式,不勾选完全复制网络物理
物理机安装
- 烧录后装上 SD

- 插到背面去, 这里注意不要差错方向了自己看红色的部分对应

- 注意在启动前这里把 WIFI 连接上, 分别有两个文件一个是 ssh 一个是 wifi 配置,这里使用无头安装

- 把这个粘贴到 SD 卡的根目录然后进行一个启动, 当然网络这里我们用网线也行
- 需要注意连接的网络问题名称不能是特殊字符,简单最好
- 网络秘钥不要太复杂,默认就行了, 配置按照下面的填就行了如果要配置优先级和秘钥自己查询
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="xb"
psk="aB19982421011!"
}
- 启动电源后这里注意,如果没有新的网络进来那么就表示有问题,如果 SD 卡中的 SSH 文件被调用走了那么表示系统载入成功了
- 注意 SSH 文件什么都不要写! 注意后缀是没有的 win 系统自己注意
-
启动后看看网络,例如我这里局域网是 192.168.3.123 我本机是 192.168.3.6 在一个局域网打开 CMD ping 肯定是能通的如果不通看看返回的错误
-
使用 SSH 工具连接, 这里我推荐两个一个是 PuttY 一个是 xshell 都是免费的 putty 记得升级到最新版本
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
- 如果是 xshell 使用命令行的方式进行一个登录
ssh pi@192.168.3.123
- 默认的密码
用户名:pi
密码:raspberry
换源
首先你需要换源选择你对应的系统 debian 版本注意在使用前请先备份:
注意如果是已经 update 后就不要乱去换源和删除源因为会有可能会删除掉很重要的包导致系统出现异常
一键换源地址:(本项目是 debian11 没用) https://tech.biko.pub/tool#/rpi-apt-sources
sudo apt-get update
sudo apt upgrade
硬件如何换源,其实这里我是不推荐使用国内的源例如清华的, 想要的可以自己使用。这里我使用自己的代理
- 首先我们用最慢的方式进行一个 sudo apt-get update 等待拉取官方纯净的包
注意如果出现公钥没有的情况
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys [提示的公钥]
- 安装 rz 这个命令主要是是上传本地文件到树莓派上面我本人使用这个方法很大,也可以使用 FPT 的方式这里最好使用 XSHELL 来打命令
sudo apt install lrzsz
- 配置科学上网(因人而异,国内安装太慢了而很多问题都是网络问题导致我们一劳永逸直接解决这个大的问题)
下载 https://github.com/v2fly/v2ray-core/releases/tag/v4.31.0 注意选择自己对应的版本。这里 v2ray-linux-arm64-v8a.zip 我们下周这个,根据自己版本来定
rz # 上传文件到自己的目录
unzip xxx.zip -d xxx ## 解压
mv /usr/local/bin/xxx ##移动到自己的目录下面这里我移动到用户目录下
- 配置守护进程
sudo nano /etc/systemd/system/v2ray.service
[Unit]
Description=V2Ray Service
After=network.target
[Service]
Type=simple
# 如果v2ray不需要以root用户运行,建议使用其他用户,例如nobody
User=nobody
ExecStart=/usr/local/bin/v2ray/v2ray -config /usr/local/bin/v2ray/config.json
Restart=on-failure
[Install]
WantedBy=multi-user.target
- 使得配置生效。开机自己启动然后查看运行状态,注意这里的配置文件自己找我拿目前的话是收费的关注公众号联系我
sudo systemctl enable v2ray
sudo systemctl start v2ray
sudo systemctl status v2ray
注意如果是 树莓派硬件那么这里需要下载 你对应的版本, 解释下什么叫做 aarch64, 什么是 armv71
-
aarch64 是一种 64 位 ARM 架构的标识。它支持 64 位的指令集和寄存器,通常用于更新的 ARM 处理器和操作系统。这种架构提供更大的内存寻址空间和更多的寄存器,因此在某些情况下可以提供更好的性能和功能。
树莓派 3 和 4 中的一些型号(如树莓派 3 Model A+ 和树莓派 4)支持 aarch64 架构,可以运行专为 64 位系统设计的操作系统。
armv7l(ARMv7): -
armv7l 是一种 32 位 ARM 架构的标识。它支持 32 位的指令集和寄存器。较早的树莓派型号,如树莓派 1 和树莓派 2,通常使用这种架构。
armv7l 架构适用于许多嵌入式系统和移动设备,但在某些方面受到 32 位架构的限制,例如内存寻址能力。
uname -m # 我这里是 aarch64 这是
cat /etc/os-release # 查看镜像版本我这里是 debian11
vim ~/.bashrc # 在末尾加入
export http_proxy="http://127.0.0.1:10809"
export https_proxy="http://127.0.0.1:10809"
source ~/.bashrc
- 执行 curl www.google.com 看看如果有输出证明是没问题了
配置 git, 这里的 git 根据自己的情况的地址来
ssh-keygen -t rsa -b 4096 -C "xxx@.com" # 邮箱地址
ssh user@xxx.coom # 这里自己测试是否通路
配置开发环境
配置 GIT
sudo apt-get install git
git clone py项目
测试摄像头模块是否正常
如果是 debian10 那么按照原来的方式即可但是如果是 debian 11 那么就用 libcamera-still 而不是 raspistill
- 其次我们这里需要改个文件,关于 debian11 树莓派官方镜像这里废除了以前的用法
- 我们在使用 libcamera-still 的时候得关闭 disable raspi-config 而不是开启
- 如果使用 openCV 模块这里就得开启有点反直觉但是确实经过我的实践是这样的, 具体可以参考 https://blog.csdn.net/weixin_51245887/article/details/124692953
更详细的
树莓派4B与OpenCV人脸识别项目问题记录
概述
使用树莓派4B进行基于OpenCV的人脸识别项目时,遇到摄像头驱动的改动。本文记录了问题及解决方案。
问题1:libcamera-hello无法检测到摄像头
- 问题:使用libcamera-hello时,出现“no cameras available”报错。
- 解决:修改
/boot/config.txt,将start_x=1改为注释,并添加camera_auto_detect=1。 - 结果:摄像头正常工作。
问题2:libcamera-jpeg分配内存失败
- 问题:执行libcamera-jpeg命令时,出现内存分配失败报错。
- 解决:通过raspi-config将GPU内存从512MB减少到256MB。
- 结果:命令执行成功,无报错。
问题3:OpenCV调用摄像头出错
- 问题:在OpenCV中使用.read imshow等指令时返回None。
- 解决:在
/boot/config.txt中重新启用legacy摄像头,即恢复start_x=1。 - 结果:成功解决问题,但需放弃使用libcamera。
sudo apt install libcamera-apps # 安装软件包
sudo rpi-update # 升级固件
sudo reboot # 重启生效
sudo raspi-config # 注意这里配置我们选择
sudo reboot
libcamera-still -o test.jpg
ls test.jpg
sudo vcgencmd get_camera # 查看摄像头状态
设置时区
默认时间是格林威治
sudo timedatectl set-timezone Asia/Shanghai
查看拍照后的图形 使用 SCP
这里再 win 系统下面的使用
scp pi@192.168.3.124:/home/pi/image4.jpg ./
下面是摄像头安装的一个方向注意摄像头和,蓝色的条子对着光纤口的方向, 打开卡扣然后把前面的部分放进去小心点

配置 python 环境, 这里想了很多种情况, 例如环境配置之类的,最终我想的是做一个单系统就行了这里选 py3 向上的
wget https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tgz
tar xvf Python-3.11.7.tgz
具体如何编译最新版本的可以查看
https://blog.csdn.net/weixin_44322778/article/details/124730755
总结下面
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev libffi-dev libncurses5-dev libncursesw5-dev libdb5.3-dev libgdbm-dev libexpat1-dev liblzma-dev wget
cd Python-3.11.7
./configure --enable-optimizations --enable-shared --prefix=/usr/local LDFLAGS="-Wl,-rpath /usr/local/lib" # 这里使用了 PGO 的一个优化提升性能, 注意这里的编译时间可能会很久请耐心等待
sudo make -j4 # 树莓派通常有4个核心
sudo make altinstall # 这个命令不会覆盖原来的 python 版本非常的管用
sudo apt install python3-pip
安装 python 项目所需要的包(节约你的空间)
一般我们项目中会出现很多多余的包,这个时候我们就用到 pipreqs 来整理多个包的情况
pip install pipreqs
pipreqs ./ --encoding=utf8 # 注意这里在 win 环境下会错问题就把字符集转一下具体参考了 https://www.cnblogs.com/bigtreei/p/14260969.html
编译错误重新编译
需要注意的点如果重新编译请使用 make clean 清除之前的编译结果
make clean
编译大型项目如Python源代码可能需要相当的磁盘空间和内存。请确保您的树莓派有足够的磁盘空间和内存空间。您可以使用df -h来检查磁盘空间,使用free -m来查看内存使用情况。
安装 pip 包管理器, 这里替换为现在的
下面使用别名 永久生效
alias pip='python3.11 -m pip'
source ~/.bashrc
python3.11 -m pip --version
拉去项目启动虚拟 环境
cd /www/flask
python3.11 -m venv venv
source venv/bin/activate
pip install -r requirements.txt # 安装如果前面都没问题按理说不会报错
VM 虚拟环境下的问题(因为是跟源有关这里自己去尝试了均有问题我们主要是测试,具体还是看硬件上面的一个情况)
安装 rust 报错我索性直接绕开了, 主要原因是 cryptography==41.0.2 这个包需要 rust 来编译结果呢虚拟环境有问题一直安装不上 rust 应该是跟树莓派这个镜像的版本有关
sudo apt-get install libffi-dev libssl-dev
pip install --upgrade pip
pip install cryptography --only-binary=:all:
开发环境搭建
上面我们编译好后进入虚拟环境看看具体的一个情况
运行环境 gunicorn or uWSGI (目前版本的问题是在多进程下有问题,摄像头的资源管理)
, 在生成环境下面我们使用两个东西一个是 gunicorn 另外一个是 uWSGI 他们都需要配合 nginx 来做一个代理转发下面我们就来配置这两个东西
其次是 nginx , 这里我们就下载纯净的 nginx 来代理进行了
备份树莓派
在网上我尝试了各种办法,其实最稳的就是直接拷贝一份, 使用下面的这个开源地址
https://github.com/billw2/rpi-clone
- 具体的一些步骤和软件,首先我们需要一个界面和一个 U 盘
sudo apt install --no-install-recommends raspberrypi-ui-mods # 安装图形界面
sudo rpi-clone sda #插入U盘进行备份
sudo apt install realvnc-vnc-server realvnc-vnc-viewer # 按照 VNC
- 完整后可以用电脑查看是否写完整, 接着我们参考 https://post.smzdm.com/p/apzkgne7/ 有完整的介绍
- 将SD卡插入树莓派并启动。
- 打开一个终端窗口。
- 运行sudo raspi-config命令。
- 选择“Advanced Options”。
- 选择“Expand Filesystem”。
- 按照屏幕上的指示操作,完成后重启树莓派。
配置一键启动 (这里使用到了面板配置)
- 配置文件如下
sudo vim /etc/systemd/system/py_panel.service
sudo systemctl daemon-reload
sudo systemctl restart py_panel.service
sudo systemctl enable py_panel.service
[Unit]
Description=Python Panel App
After=network.target
[Service]
User=root
WorkingDirectory=/home/pi/www/py-panel
ExecStart=/home/pi/www/py-panel/venv/bin/python3.11 app.py
Restart=always
[Install]
WantedBy=multi-user.target
总结
搭建一个智慧停车场的车辆识别系统在树莓派上是完全可行的。通过正确配置硬件,选择合适的软件和库,您可以构建一个高效且稳定的车辆识别系统。
参考文献:
2. 若遇到资源下载链接失效,请及时通过联系站长QQ以获取补发。
3. 所有本站资源仅供学习和研究目的使用。用户必须在24小时内删除所下载的资源,并严禁将其用于任何商业活动。对于因违反此规定引发的任何法律问题及连带责任,本站及发布者不承担任何责任。除非特别注明为原创,本站资源大多来源于网络,版权归原作者所有。若有侵权,请联系我们以便进行删除处理。
4. 本站提供的所有下载资源(包括软件等),我们保证未进行任何负面修改(不包括为改善功能或修复bug等正向优化或二次开发)。然而,我们无法保证资源的准确性、安全性和完整性。用户下载后应自行判断。本站旨在促进学习交流,并不保证所有源码完全无误或无bug。用户应明白,除非特别注明,【雾码资源】对提供下载的软件等不持有任何权利,其版权属于相应合法拥有者。
5. 请您仔细阅读以上内容,购买即表示您同意以上所有条款。
雾码资源 » 智慧停车场的车辆识别系统:在树莓派上部署和运行