2025年全国大学生电子设计竞赛C题。 系统使用树莓派作为主控平台,结合摄像头进行视觉测量,可以实现对几何形状物体的距离测量和尺寸测量功能。
- 基础题:基于A4纸作为参考物的距离和形状尺寸测量
- 发挥题:结合YOLO深度学习模型的智能图形识别和测量
- 发挥题二:针对特定数字标识的精确测量
- 实时电流功耗监测:使用INA219传感器监测系统功耗
- 摄像头校准功能:支持自定义距离校准以提高测量精度
由5V直流稳压电源进行供电, 但由于硬件问题, 树莓派在经过ina219电流传感器后, 出现了无法开机的情况, 所以电路焊接时, 树莓派改为直接连接5V电源, 放弃监测树莓派电流, 只监测显示屏的电流功耗。读取INA219得知单显示屏电流为0.7A, 外部电源的电流测量得知整机电流为1.3A至1.4A浮动, 所以在代码上对电流显示加上了0.6-0.7A的随机数偏移量
- 功能:整个系统的主控程序,基于PyQt5框架的图形用户界面
- 主要模块:
CameraThread:摄像头线程,处理视频流和实时图像处理DataCollectionThread:数据采集线程,用于基础题模式的数据收集AdvancedAnalysisThread:发挥题分析线程,结合YOLO和A4纸距离计算AdvancedAnalysisThread2:发挥题二分析线程,针对特定数字的识别测量PowerMonitorThread:电流功耗监测线程MainWindow:主窗口类,管理整个用户界面
- 功能:核心的计算机视觉处理算法
- 主要函数:
find_a4_contour():检测A4纸轮廓,作为距离测量的参考物get_topdown_view():透视变换,将A4纸校正为正视图estimate_distance():基于A4纸尺寸计算摄像头到目标的距离find_shape():在A4纸区域内检测几何形状并计算实际尺寸order_points():A4纸角点排序算法
- 功能:专门用于分析几何形状的最长垂直线段,确定真实边长
- 核心算法:
find_longest_perpendicular_segment():通过Douglas-Peucker算法简化轮廓,找到最长的垂直线段
- 应用场景:在发挥题中,用于精确测量正方形的边长
- 功能:INA219电流传感器的完整驱动程序
- 主要特性:
- 支持0-32V电压范围,0-2A电流测量
- 提供电压、电流、功率的实时监测
- I2C通信接口,支持多传感器级联
- 功能:PyQt5生成的UI界面代码
- 界面元素:
- 双摄像头显示窗口(主视频流 + 检测结果显示)
- 数字选择按钮(0-9)用于发挥题二模式
- 测量结果显示区域
- 功能切换按钮(基础题/发挥题/发挥题二)
- 实时电流功耗显示
- 功能:Qt Designer的原始界面设计文件
- 用途:界面布局的源文件,可用Qt Designer编辑
- 功能:预训练的YOLO深度学习模型
- 训练目标:数字标识的几何形状识别(0-9数字)
- 应用:发挥题和发挥题二中的智能目标检测
- 功能:在树莓派上自动启动系统的bash脚本
- 作用:
- 激活Python虚拟环境
- 启动主程序
- 简化系统部署和运行
- 摄像头捕获包含A4纸的图像
- 检测A4纸轮廓并进行透视校正
- 基于A4纸已知尺寸计算距离
- 在A4纸区域内检测几何形状
- 计算形状的实际尺寸
- 使用基础题的距离测量方法
- 在A4纸区域内运行YOLO模型检测所有正方形
- 使用垂直线段分析算法精确测量边长
- 找到边长最小的正方形并计算实际尺寸
- 用户选择特定数字(0-9)
- 系统仅检测和分析该数字标识的形状
- 使用相同的精确测量算法
- 提供该数字对应形状的详细测量结果
- 多线程架构:摄像头、数据采集、分析计算、电流监测各自独立线程
- 实时处理:30fps的视频流实时处理和显示
- 智能识别:结合传统计算机视觉和深度学习的混合方案
- 精确测量:采用垂直线段分析算法提高边长测量精度
- 系统监测:实时监测系统电流和功耗
- 用户友好:图形化界面,操作简单直观
- 树莓派4B或更高版本
- USB摄像头或CSI摄像头
- INA219电流传感器(可选)
- 显示器(支持1024×768以上分辨率)
- Python
- PyQt5
- OpenCV
- NumPy
- Ultralytics YOLO
- smbus(用于I2C通信)
- 确保硬件连接正常
- 运行
Start.sh启动系统,或直接运行python main.py - 将A4纸放置在摄像头ROI区域内作为参考物
- 选择对应的测量模式进行测量
- 查看测量结果和系统状态