01 · 项目概览¶
本篇是 docs/ 的"项目入口"——身份信息、技术栈、目录树、规模、时间线。 这与「结题报告.md」(仓库根目录)的区别:结题报告偏向老师视角(成果导向),本篇偏向技术视角(事实导向)。 下一篇:02 · 环境与运行
1.1 项目身份信息¶
| 项 | 内容 |
|---|---|
| 项目名称 | 摄像头检测系统(MonitorSystem / CameraMonitorSystem) |
| 立项类别 | 浙江省大学生创新训练计划项目(省创) |
| 立项时间 | 2024 年 9 月(推断,由微信对话"去年9月当时有做什么实验") |
| 验收时间 | 2026 年 5 月(材料 5/22 交,验收 5/23 前) |
| 项目编号 | <待补> |
| 项目负责人 | <待补> |
| 项目成员 | 何劭弘(23 级)、龚馨铃(24 级)、陈宣良(24 级)、钱子豪(24 级)等 |
| 指导老师 | 金老师 <完整姓名待补> |
| 所属单位 | 中国计量大学 |
| 应用程序版本 | CameraMonitorSystem2.1(见 CameraMonitorSystem.spec:155) |
1.2 项目定位与功能¶
一句话定位:基于 EfficientNet-B3 的工业视觉检测系统,含两个独立模块——膨胀检测、含水量检测,配 Tkinter GUI 与 PyInstaller 一键打包。
应用场景(推测):工厂"圆盘干燥机"工况检测——通过摄像头实时监控物料状态,识别其膨胀情况与含水量区间,为干燥工艺调控提供输入。证据来自 model4.py:113 测试代码里的路径 E:\圆盘干燥机智能化运行图片\膨胀组\膨胀结束\。
两个模块的功能边界¶
| 模块 | 输出 | 分类粒度 | 推理频率 | 模型数 |
|---|---|---|---|---|
| 膨胀检测 | "膨胀" / "不膨胀" | 二分类 | 每帧(~30 fps) | 1 |
| 含水量检测 | "30-35%" / "35-40%" / "40-45%" | 三分类(拆为 3 个二分类投票) | 每 5 秒 | 3 |
1.3 技术栈¶
| 层 | 技术 | 版本 / 备注 |
|---|---|---|
| 语言 | Python | 3.7+(实测 3.10 OK) |
| GUI | Tkinter | Python 标准库 |
| 视觉采集 | OpenCV (cv2) |
≥ 4.5 |
| 图像处理 | Pillow (PIL) |
≥ 8.0 |
| 深度学习 | PyTorch | ≥ 1.9,< 2.6 |
| Backbone | EfficientNet-B3 | 通过 efficientnet_pytorch 第三方库加载 |
| 数值计算 | NumPy | ≥ 1.20 |
| 打包 | PyInstaller | ≥ 5.0 |
| 字体 | SimHei (黑体) | 9.5 MB TTF |
为什么用 EfficientNet-B3:B3 在参数量(~12M)与精度上的折中适合小数据集微调;300×300 输入对工厂图像分辨率友好。
1.4 仓库目录结构¶
20260515-MonitorSystem/ (本仓库根目录)
│
├── 📄 main.py Tkinter GUI 主入口(849 行)
├── 📄 README.md gxl 原作 README(保留不动)
├── 📄 调研报告.md Linux 调研产物(2026-05-14 写)
├── 📄 结题报告.md ★ 给老师的正式结题材料(本仓库根目录)
├── 📄 requirements.txt 依赖清单(大部分被注释,详见 docs/02)
│
├── 📄 CameraMonitorSystem.spec PyInstaller 主配置
├── 📄 hook-tkinter.py Tkinter 钩子(被 spec hookspath 自动加载)
├── 📄 add_hidden_imports.py ⚠️ 命名错误的 hook(实际未被加载)
├── 🖼️ logo.ico exe 程序图标
│
├── 📂 fonts/
│ └── simhei.ttf 中文黑体字体(9.5 MB)
│
├── 📂 models/ AI 模型层
│ ├── __init__.py (空文件)
│ ├── model1.py 含水量 35-40 vs 30-35 二分类器
│ ├── model2.py 含水量 40-45 vs 35-40 二分类器
│ ├── model3.py 含水量 40-45 vs 30-35 二分类器
│ ├── model4.py 膨胀 vs 不膨胀 二分类器
│ ├── best_model1.pth 43 MB
│ ├── best_model2.pth 43 MB
│ ├── best_model3.pth 43 MB
│ ├── best_model4.pth 43 MB
│ ├── efficientnet_b3_pytorch.pth 48 MB(⚠️ 实际未被加载)
│ ├── tempCodeRunnerFile.py ⚠️ IDE 临时文件
│ ├── .idea/ ⚠️ PyCharm 配置
│ └── __pycache__/ ⚠️ 字节码缓存
│
├── 📂 swellcamera/ 膨胀检测子模块
│ ├── __init__.py 1 行:from .swellcamera import main
│ ├── __main__.py 8 行:python -m swellcamera 入口
│ └── swellcamera.py 208 行:核心逻辑
│
├── 📂 watercamera/ 含水量检测子模块
│ ├── __init__.py 1 行
│ ├── __main__.py 8 行
│ └── watercamera.py 221 行:核心逻辑(含投票算法)
│
├── 📂 utils/
│ ├── __pycache__/
│ └── model_loader.py importlib 动态加载器(仅 watercamera 使用)
│
└── 📂 docs/ ★ 本技术文档集
├── README.md 文档索引与导航
├── 01-项目概览.md ← 你在这里
├── 02-环境与运行.md 跑通推理的最简步骤
├── 03-系统架构.md Mermaid 架构 / 数据流 / 类关系
├── 04-主程序与GUI.md main.py 逐节解析
├── 05-检测模块.md swellcamera + watercamera
├── 06-模型与推理.md 4 个 AgeClassifier 类
├── 07-打包与部署.md PyInstaller spec / hook
├── 08-问题与改进.md P0/P1/P2 完整清单
└── 09-开发指南.md 如何调试 / 加功能 / 国创建议
1.5 代码规模统计¶
| 文件 | 行数 | 字符数 | 备注 |
|---|---|---|---|
| main.py | 849 | ~31.9 KB | GUI 主入口 |
| swellcamera/swellcamera.py | 208 | — | 膨胀检测 |
| watercamera/watercamera.py | 221 | — | 含水量检测(含投票) |
| models/model1.py | 92 | — | 含水量分类器 1 |
| models/model2.py | 110 | — | 含水量分类器 2 |
| models/model3.py | 92 | — | 含水量分类器 3 |
| models/model4.py | 117 | — | 膨胀分类器 |
| utils/model_loader.py | 19 | — | 动态加载器 |
| CameraMonitorSystem.spec | 182 | — | PyInstaller 配置 |
| hook-tkinter.py | 81 | — | Tkinter 钩子 |
| add_hidden_imports.py | 4 | — | (未生效) |
| Python 总计 | ~1975 行 | 不含注释和空行 |
模型权重总计:5 个 .pth × 43-48 MB = ~220 MB。
1.6 项目演进时间线¶
由微信记录、文件 mtime、git log 综合推断:
| 时间 | 事件 |
|---|---|
| 2024-09 | 省创立项,团队启动 |
| 2025-06~07 | gxl 训练模型(最早的 .pth 修改日期 2025-06-30) |
| 2025-07-03 | EfficientNet-B3 备份权重保存(mtime) |
| 2025-07-26 | model4 权重训练完成(mtime),分类头从 model1/2/3 风格升级到含 Dropout/ReLU 的版本 |
| 2025-07-30 | PyInstaller 打包配置 add_hidden_imports.py / hook-tkinter.py 加入 |
| 2025-07-31 | README.md 写完 |
| 2025-08-01 | CameraMonitorSystem.spec 与 main.py 最后修改(mtime) |
| 2025-08 | gxl 把最终 exe 交给金老师,项目暂时搁置 |
| 2026-05-11 | 老师 @ 何劭弘和龚馨铃准备结题材料 |
| 2026-05-12 | 何劭弘与 gxl 微信对接,得知 gxl 已无暇深度参与 |
| 2026-05-13 | 教务处发布结题验收通知 |
| 2026-05-14 | 何劭弘在 Linux LXD 容器中做代码调研,产出 调研报告.md |
| 2026-05-15 | 在 Windows 工作目录开始撰写正式技术文档体系(本文档集) |
| 2026-05-22 | 计划交结题材料 |
| 2026-05-23 | 计划完成学院验收 |
1.7 项目状态评估¶
完成度¶
| 维度 | 完成度 | 说明 |
|---|---|---|
| 应用程序 | ✅ 90% | exe 可运行,GUI 可用,推理可输出结果 |
| 模型权重 | ✅ 100% | 4 个分类器都训好并集成 |
| 文档 | 🟡 60%→90% | 原仅有 README,正在补 docs/ 与结题报告 |
| 训练复现 | ❌ 0% | 无 train.py、无数据集、无训练日志 |
| 测试 | ❌ 0% | 无单元测试、无集成测试 |
| 性能指标 | 🟡 待补 | gxl 8 月资料中可能有,需收集 |
| 跨平台 | 🟡 30% | 仅 Windows 跑过,Linux/macOS 需修字体路径等 |
工程质量评分¶
| 维度 | 评分 | 说明 |
|---|---|---|
| 功能完整性 | ⭐⭐⭐⭐ | 双模块齐全,端到端可用 |
| 代码质量 | ⭐⭐ | 命名混乱(AgeClassifier)、复制粘贴多、临时文件滥用 |
| 架构设计 | ⭐⭐ | 模块停止机制失效、接口不统一、无配置化 |
| 可维护性 | ⭐⭐ | 硬编码多、无日志、文档原仅 README |
| 可部署性 | ⭐⭐⭐ | PyInstaller 支持完整,但仅 Windows |
| 安全性 | ⭐⭐ | torch.load 无 weights_only、输入无验证 |
综合:典型「学生课程项目水平」,核心功能可用但工程粗糙。文档化与 bug 修复是接下来的主要工作。
1.8 与项目相关的"非代码"资产¶
| 资产 | 位置 | 状态 |
|---|---|---|
| 训练数据集 | gxl 本地(E:\kingtask\waterdata\、E:\圆盘干燥机智能化运行图片\) |
仅 gxl 持有,未提交 |
| 训练脚本 | gxl 本地 | 未提交 |
| 训练日志 | gxl 本地 | 未提交 |
| 八月给金老师的 exe | gxl 本地 | 仓库内有源码可重新打包 |
| 微信记录 | 何劭弘 ↔ gxl | 部分摘录见 调研报告.md 末尾 和本仓库其他文档的 context 引用 |
| 学校验收表 | 教务处 OA | 附件 1-6 已下载链接 oa.cjlu.edu.cn |
1.9 接下来读哪一篇¶
flowchart LR
HERE[你在这里<br/>01 项目概览] --> A02[02 环境与运行<br/>先把推理跑起来]
A02 --> A03[03 系统架构<br/>看 Mermaid 图]
A03 --> A04[04 主程序与 GUI]
A04 --> A05[05 检测模块]
A05 --> A06[06 模型与推理]
A06 --> A07[07 打包与部署]
A07 --> A08[08 问题与改进]
A08 --> A09[09 开发指南]
或按场景跳转:
- 「我只想跑通」 → 02 · 环境与运行
- 「我想理解系统」 → 03 · 系统架构
- 「我要改 bug」 → 08 · 问题与改进
- 「我要写结题材料」 → 结题报告.md(在仓库根目录)
- 「我要冲国创」 → 09 · 开发指南 § 9.7