feat: 新增视频分析流水线、Web界面、孤儿清理工具;修复健壮性问题

- 新增 analysis/ 模块:MOG2活动检测、YOLO人物跟踪、MediaPipe摔倒检测、Ollama活动打标、缩略图抽取
- 新增 webapp/:Flask事件浏览界面,按需HEVC→H264转码缓存
- 新增 analyze.py:7阶段状态机流水线(scan→backfill→motion→person→fall→activity→thumbnail)
- 新增 cleanup_orphans.py:清理文件已删除的数据库孤儿记录
- 修复:motion/person/activity三阶段加单视频异常兜底,避免批次中断
- 修复:ollama_client加健康检查和3次重试,num_ctx从8192降到2048
- 修复:transcode_cache加fcntl文件锁,防止并发转码同一视频
- 修复:SQLite开WAL模式+busy_timeout,支持读写并发
- 修复:sync.py ffmpeg路径改为shutil.which查找,删除automate.py死代码PYTHON
- 修复:thumbnail失败加3次重试上限,避免无限重试损坏文件
- 新增:requirements.lock锁定版本、README文档
- 更新:.gitignore排除.playwright-mcp、截图、备份文件
This commit is contained in:
yuming
2026-09-18 15:52:49 +08:00
parent 203cca42a2
commit b3608f534e
31 changed files with 2792 additions and 27 deletions
+96
View File
@@ -0,0 +1,96 @@
body {
font-family: -apple-system, "PingFang SC", sans-serif;
margin: 20px;
color: #222;
}
.filters {
margin-bottom: 16px;
display: flex;
gap: 16px;
align-items: center;
}
#stats {
color: #666;
font-size: 0.9em;
}
.cache-panel {
margin-bottom: 16px;
display: flex;
gap: 12px;
align-items: center;
color: #666;
font-size: 0.9em;
}
.cache-panel button {
cursor: pointer;
}
.main {
display: flex;
gap: 20px;
}
.player-panel {
flex: 1;
}
#player {
width: 100%;
max-width: 640px;
background: #000;
}
#player-info {
margin-top: 8px;
color: #555;
font-size: 0.9em;
}
.event-list {
flex: 1;
max-height: 80vh;
overflow-y: auto;
display: flex;
flex-direction: column;
gap: 8px;
}
.event-item {
display: flex;
gap: 10px;
cursor: pointer;
padding: 6px;
border-radius: 6px;
}
.event-item:hover {
background: #f0f0f0;
}
.event-thumb {
width: 120px;
height: 68px;
object-fit: cover;
background: #ddd;
border-radius: 4px;
flex-shrink: 0;
}
.event-info {
display: flex;
flex-direction: column;
justify-content: center;
}
.event-type {
font-weight: 600;
}
.event-time {
color: #666;
font-size: 0.9em;
}