# tcb_yolo **Repository Path**: endless-edge/tcb_yolo ## Basic Information - **Project Name**: tcb_yolo - **Description**: 使用yolo进行火焰或者刀具的实时检测 - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-16 - **Last Updated**: 2026-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 目标检测服务 这是一个基于 YOLO 和 RabbitMQ 构建的工业级实时视频流目标检测系统。 针对传统脚本化检测程序中的“网络阻塞导致 MQ 崩溃”、“多路视频流相互干扰”以及“检测频率不固定”等痛点进行了深度重构与架构优化。 ## ✨ 核心特性 * **⚡️ 极速异步拉流 (Zero-Latency)**:抛弃 OpenCV 传统阻塞式读取,采用独立守护线程维护流状态,确保推理引擎拿到的永远是“绝对最新帧”,杜绝历史帧堆积延迟。 * **🛡️ 队列防爆防崩溃 (Backpressure)**:针对 RabbitMQ 大负荷推送容易断连的痛点,引入了极限图像压缩(动态 Resize + 质量压降)与带背压机制的异步发送队列,告警消息体积骤降 90%,心跳稳如泰山。 * **⏱️ 严格节拍控制 (Strict FPS)**:解耦推理耗时与检测间隔。通过智能补偿休眠算法,确保系统严格按照设定的频率(如 10 FPS)进行周期性检测。 * **📈 弹性流并发 (Dynamic Batching)**:彻底废除“死板凑数”的并发逻辑。系统自动根据配置的视频源数量动态调整 GPU 的 Batch Size(配2路跑2路,配5路跑5路),杜绝任何算力浪费。 ## 📂 目录结构 ```text yolo_video_service/ ├── config/ │ └── settings.py # 全局配置中心 (流地址、告警阈值、MQ账号等) ├── core/ │ ├── stream_manager.py # 视频流生命周期与异步帧缓存管理 │ ├── detector.py # YOLO 模型加载与 Batch 推理黑盒封装 │ └── mq_publisher.py # RabbitMQ 异步高可用发送引擎 ├── utils/ │ ├── logger.py # 双向日志记录器 (Console + File) │ └── image_utils.py # 极限图像压缩与 Base64 编码工具 ├── requirements.txt # 依赖清单 ├── main.py # 系统入口与节拍调度中枢 └── README.md # 项目文档 ``` ## ⚙️ 环境依赖与安装 1. **基础环境要求** * Python 3.8+ * 具备可用 GPU 且已正确安装 CUDA 驱动(如果是 Jetson 设备请确保 TensorRT 环境正常)。 * 可用的 RabbitMQ 服务。 2. **克隆/创建项目并安装依赖** 建议使用虚拟环境 (`venv` 或 `conda`) 隔离依赖: ```bash python -m venv venv source venv/bin/activate # Linux/Mac # venv\Scripts\activate # Windows pip install -r requirements.txt ``` *注:如果你使用的是 `best.engine` (TensorRT 模型),请确保你的 `ultralytics` 运行环境已经配置了正确的 TensorRT 运行时。* ## 🚀 配置与运行 ### 1. 修改配置文件 打开 `config/settings.py`,根据实际情况修改以下核心参数: * `MODEL_PATH`: 模型路径(建议使用 `.engine` 或 `.pt`)。 * `RTMP_SOURCES`: 填入你的视频流地址。**列表里填几个,系统就会自动并发处理几个**,无需强行补齐。 * `MQ_HOST`, `MQ_PORT` 等: 你的 RabbitMQ 服务器连接信息。 * `TARGET_FPS`: 期望的系统循环帧率(决定了多久取一次帧送入模型)。 * `MESSAGE_COOLDOWN`: 同一个摄像头检测到同一个目标后,多少秒内不再重复发送包含图片的告警。 ### 2. 启动服务 在项目根目录下直接运行: ```bash python main.py ``` ### 3. 查看日志与运行状态 系统启动后,你将在控制台看到类似如下的输出: ```text [2024-05-20 10:00:00] {logger.py:30} INFO - Starting YOLO Video Inference Service... [2024-05-20 10:00:01] {mq_publisher.py:45} INFO - Successfully connected to RabbitMQ. [2024-05-20 10:00:02] {detector.py:25} INFO - YOLO model loaded successfully. [2024-05-20 10:00:02] {stream_manager.py:32} INFO - [101] Stream reader started for source: rtmp://... [2024-05-20 10:00:03] {main.py:60} INFO - Entering main inference loop. Target FPS: 10 ``` 完整的运行日志也会同步追加保存至 `app.log` 文件中。 ## 🛑 停止服务 程序内置了优雅停机(Graceful Shutdown)机制。 直接在终端按下 `Ctrl + C`,系统会: 1. 安全停止所有拉流子线程,释放 OpenCV 底层连接。 2. 清空并关闭 RabbitMQ 发送队列。 3. 安全退出主程序。 ```