docs: add project readme

This commit is contained in:
gqc
2026-07-08 19:21:07 +08:00
parent d3d60ad042
commit aa60ca1cad
+90
View File
@@ -0,0 +1,90 @@
# FireLeave_tool
## 当前代码情况
本仓库是动火离人/火焰检测边缘端工具,主程序使用 Go 编写,模块名为 `FireLeave_tool`,当前 `go.mod` 指定 Go 1.19。
主要能力:
- 启动并管理 `fire_leave``fire_check` 两路推理进程。
- 接收推理进程通过 HTTP 上报的检测结果和心跳。
- 维护设备运行状态、告警冷却、禁报时间窗口和本地缓存。
- 通过 WebSocket 与平台通信,支持告警、禁报时间等主题。
- 检测到告警后合成事件前后视频,并上传到 Nginx/平台。
- 支持 GPIO 按键触发本地告警暂停。
主要目录:
- `main.go`:主流程入口,负责设备初始化、推理进程启动、状态监控和告警判断。
- `connect/`:WebSocket 通信、设备配置存储、推理进程心跳与重启。
- `httpreader/`:本地 HTTP 服务,接收推理结果、视频片段和心跳。
- `reporter/`:告警视频上传、事件上报、禁报时间持久化。
- `video_server/`:视频合成与上传逻辑。
- `gpio_monitor/`GPIO 按键监控。
- `logger/`:日志封装。
- `docs/``usr_doc/`:变更记录和客户操作说明。
- `bin/fireleave_tool`:当前构建产物。
## 视频合成逻辑
视频合成入口在 `video_server/video_merge.go`
- 根据告警时间对齐到 10 秒边界。
- 优先查找告警前 10 秒、告警时刻、告警后 10 秒对应的视频片段。
- 支持 `.mp4``.h264` 输入。
- 如果精确时间片段不足,会在目录中查找最接近目标时间的候选片段。
- 至少找到 2 个片段才会执行合成。
- 合成完成后复制到 `/data/upload`,文件名格式为:
```text
{device_uuid}-{year}-{month}-{day}-{aligned_alarm_timestamp}.MP4
```
当前代码通过系统命令调用 FFmpeg:
```text
ffmpeg -hide_banner -loglevel error -y ...
```
`.h264` 片段会先按时间顺序拼接为临时 `.h264` 文件,再使用 FFmpeg 封装为 MP4;`.mp4` 或混合输入则使用 FFmpeg concat list 方式合成,并使用 `-c copy``-movflags +faststart`
## 本次视频合成使用的 FFmpeg 版本
当前仓库代码没有内置 FFmpeg 二进制,也没有在代码中锁定 FFmpeg 版本;运行时依赖部署环境 PATH 中可执行的 `ffmpeg` 命令。
本仓库可确认的相关信息:
- `Dockerfile` 中安装的视频合成相关包为 `mp4-merge_0.1.11-1_arm64.deb`
- `video_server/video_merge.go` 实际调用的是 `ffmpeg` 命令。
- 当前 Windows 工作区未检测到可执行的 `ffmpeg`,因此无法从本机直接读取 `ffmpeg -version` 输出。
部署设备或容器中可用下面命令确认本次实际使用的 FFmpeg 版本:
```sh
ffmpeg -version
```
建议将输出第一行记录到本节,例如:
```text
ffmpeg version <实际版本号>
```
## 构建与验证记录
最近一次文档记录中的构建信息:
```text
go version: go1.26.4
GOOS: linux
GOARCH: arm64
CGO_ENABLED: 0
binary: bin/fireleave_tool
```
常用验证命令:
```sh
go test ./...
go build -o bin/fireleave_tool.new .
```