2025-03-18 08:46:36 +08:00

209 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 啥时候吃饭
createTime: 2025/03/08 06:52:55
permalink: /project-docs/when2eat/
icon: line-md:loading-alt-loop
tags:
- PGuide OAuth
- 计算机视觉
- YOLO
- ECharts
---
哈哈,这个项目是一个科学决策什么时候去食堂吃饭的项目,让你合理避开重医吃饭高峰期。
::: echarts 重医食堂实时人数示例动态折线图
```js
const oneDay = 86400000
const data = []
let now = new Date(1997, 9, 3)
let value = Math.random() * 1000
function randomData() {
now = new Date(+now + oneDay)
value = value + Math.random() * 21 - 10
return {
name: now.toString(),
value: [
[now.getFullYear(), now.getMonth() + 1, now.getDate()].join('/'),
Math.round(value),
],
}
}
for (let i = 0; i < 1000; i++) data.push(randomData())
const option = {
tooltip: {
trigger: 'axis',
formatter(params) {
params = params[0]
const date = new Date(params.name)
return (
`${date.getDate()
}/${
date.getMonth() + 1
}/${
date.getFullYear()
} : ${
params.value[1]}`
)
},
axisPointer: {
animation: false,
},
},
xAxis: {
type: 'time',
splitLine: {
show: false,
},
},
yAxis: {
type: 'value',
boundaryGap: [0, '100%'],
splitLine: {
show: false,
},
},
toolbox: {
show: true,
feature: {
mark: {
show: true,
},
dataView: {
show: true,
readOnly: false,
},
restore: {
show: true,
},
saveAsImage: {
show: true,
},
},
},
series: [
{
name: 'Fake Data',
type: 'line',
showSymbol: false,
data,
},
],
}
const timeId = setInterval(() => {
if (myChart._disposed)
return clearInterval(timeId)
for (let i = 0; i < 5; i++) {
data.shift()
data.push(randomData())
}
myChart.setOption({
series: [
{
data,
},
],
})
}, 1000)
```
:::
## 项目简介
使用YOLO、OpenCV等计算机视觉识别框架检测画面中人数在网页端、APP端显示实时人流量通过机器学习算法推测最合理的吃饭时间区间。
## 项目重点
- 高精度识别实时人数
- 30FPS以上的识别帧
- 网络传输json数据
- 后端跨域访问
- 身份验证
- 前端设计
- 组件、UI设计
- 机器学习推测
- 数据采集
- 算法选型
- 通知配置
- SMTP邮件通知
- QQ机器人
## 项目进度
- [ ] 完成基础的人类识别
- [ ] 前端UI设计
- [ ] 前端页面开发
- [ ] 完成一周的数据采集
- [ ] 机器学习推测
## 项目结构
:::file-tree
- when2eat/
- backend/ # Flask后端核心
- app/
- api/ # API路由
- v1/ # API版本控制
- common/ # 通用工具
- models/ # 数据库模型
- services/ # 业务逻辑层
- __init__.py
- ml_models/ # 训练好的模型文件
- yolo_v5s/ # 不同版本模型
- scripts/ # 数据库迁移及其他脚本
- tests/ # 后端测试
- unit/ # 单元测试
- integration/ # 集成测试
- requirements/
- dev.txt # 开发依赖
- prod.txt # 生产依赖
- frontend/ # Vue 3前端
- public/ # 公开资源
- src/
- assets/ # 静态资源
- components/ # 通用组件
- views/ # 页面视图
- services/ # API服务层
- utils/ # 前端工具
- cv_processing/ # 计算机视觉模块
- detectors/ # 检测算法实现
- utils/ # OpenCV工具
- calibration/ # 摄像头校准数据
- infrastructure/ # 基础设施配置
- docker/ # Docker配置
- nginx/ # Nginx配置
- flask/ # Flask配置
- k8s/ # Kubernetes配置
- terraform/ # 基础设施即代码配置
- docs/ # 项目文档
- api-spec/ # OpenAPI规范
- architecture/ # 架构设计图
- deployment.md # 部署文档
- notebooks/ # Jupyter分析笔记
- .github/ # CI/CD配置
- workflows/ # 工作流配置
- Makefile # 构建自动化
- docker-compose.yml # Docker Compose配置
- .env.sample # 环境变量模板
:::
## 其他可能会遇到的问题
- 如何进行数据采集
- python写一个定时任务调用摄像头抓拍
- 注意数据脱敏,不要上传任何人脸数据
- 光线较暗时如何进行算法优化
- 红外可能效果并不理想
- 机器学习比较陌生
- 可以采用现有大模型调用其API即可
- 不不不,我就要学[机器学习](/learning-notes/ml/)