随着有宠物的家庭越来越多,为了方便宠物进出,会设置一个小门供宠物进出,为了安全,本方案使用树莓派 5 和 OpenCV 来实现宠物门禁,只让自家宠物进出。
1. 硬件准备,树莓派5套件,包括树莓派5主板、电源、存储卡等。 摄像头:连接到树莓派,用于拍摄宠物图像。3. 电子门:选择舵机来实现开闭门,可以通过 GPIO 接口控制其开关状态。4. 杜邦线若干:用于连接树莓派与舵机等设备。
树莓派GPIO口
2、软件安装与环境配置在树莓派 5 上安装 Raspbian 操作系统。官网下载就可以。
然后安装 OpenCV 库:通过终端命令行执行以下步骤:
更新软件包列表: sudo apt-get update
安装 OpenCV 依赖项:
sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
获取 OpenCV 源码: git clone https://github.com/opencv/opencv.git
进入 OpenCV 目录并创建编译目录: cd opencv && mkdir build && cd build
配置编译选项: cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local..
编译和安装: make -j4 && sudo make install
3、宠物图像数据采集与训练模型,采集宠物的图像数据:使用摄像头拍摄宠物的照片,建立宠物图像数据集。
数据预处理:对采集到的图像进行裁剪、缩放、归一化等处理,以适应模型训练要求。
门禁控制程序开发1. 使用 Python 语言结合 OpenCV 和树莓派的 GPIO 控制库开发门禁控制程序。
程序流程:初始化摄像头和电子门锁的 GPIO 引脚。循环读取摄像头图像:使用 OpenCV 捕获摄像头的实时图像帧。对图像帧进行预处理,如调整大小、灰度化等操作, 将图像输入到训练好的宠物识别模型中进行预测。根据预测结果判断是否为自家宠物:如果识别为自家宠物,控制电子门锁打开一定时间(如 5 - 10 秒),同时可以记录宠物进出的时间信息到日志文件中。 如果不是自家宠物,则保持门锁关闭状态。
开发工具使用的是 Python3 作为开发语言,OpenCV 作为图像处理库,使用树莓派自带的 Thonny编辑器。
软件部分采用Python语言开发,代码参考了OpenCV例程。Python编辑器采用Thonny。它简单易用,可以在树莓派上轻松使用。它的用户界面直观,具有代码自动缩进、语法高亮等功能。
在工程目录下创建dataset文件夹储存宠物图像样本,和trainer文件夹储存训练数据。并将OpenCV提供的haarcascade 分类器(haarcascade_frontalface_default.xml)拷贝到工程目录下。目录结构和文件见下图。
dataset:放宠物图片的文件,里面有诸如ABC文件夹,每个文件夹里是诸如ABC的数据图片。
faces:数据文件,存放id和name.
face_dataset_01.py: 宠物狗图像数据采集
face_training_02.py:训练已有数据并生成模型
face_recognition_03.py:宠物狗识别比对和开门工作
首先是宠物图像数据的采集,在Thonny编辑器中运行程序1。录入过程是用USB摄像头对准屏幕采集预先下载好的宠物图像,能够将视频图像显示到界面中,并对宠物狗图像进行检测,将图像中所有的宠物狗检测出来,并用矩形框框出。
采集30张灰度图做图像特征识别。程序会收集30个样本数据,存储样本数据在dataset中,可在用户界面直接打查看。
运行程序2进行训练宠物特征数据,会读取捕获的宠物图像进行识别训练,并将训练数据保存在程序目录下的文件中。
运行程序3进行宠物识别比对和开锁工作,用摄像头对准事先下载的图片,依次进行识别。
如宠物图像比对正确,显示OPEN DOOR,并驱动舵机打开小门,放宠物进出。
4、系统测试与优化 ,对整个宠物门禁系统进行全面测试,检查识别准确率、门禁控制的可靠性、系统响应速度等方面。根据测试结果进行优化: 如果识别准确率不够高,可以增加训练数据量、调整模型结构或超参数进一步训练模型。如果门禁控制有延迟或不稳定,检查 GPIO 连接和控制代码逻辑,进行相应的优化。
通过以上方案,可以实现基于树莓派5和 OpenCV 的宠物门禁系统,让宠物能够自由进出特定区域,同时防止其他物体或动物误触发门禁。