Files
HighwayEventDet/app.py
T
zimoyin cdf228fe56 feat(app): 集成loguru日志系统并优化错误处理
- 在app.py中引入loguru并配置日志轮转、异步输出等功能
- 添加全局日志初始化函数和程序启动/退出日志记录
- 将所有print语句替换为logger.info/error/debug/warning方法
- 在data_source.py中添加模型加载和视频打开的日志记录
- 在各个处理器中集成日志记录器实例并记录处理状态
- 修改处理器模块导入路径以符合相对导入规范
- 在requirements.txt中添加loguru依赖包
- 统一异常处理的日志记录方式,便于调试和监控
2026-01-10 18:03:18 +08:00

66 lines
2.8 KiB
Python

import asyncio
from loguru import logger
from yolo_gs.pipeline.handler.DrawDirectionProcessor import DrawDirectionProcessor
from yolo_gs.pipeline.handler.DrawGraffitiProcessor import DrawGraffitiProcessor
from yolo_gs.pipeline.handler.DrawObjectBoxProcessor import DrawObjectBoxProcessor
from yolo_gs.pipeline.handler.GraffitiProcessor import GraffitiProcessor
from yolo_gs.pipeline.handler.ResultLogger import ResultLogger
from yolo_gs.pipeline.handler.RetrogradeProcessor import RetrogradeProcessor
from yolo_gs.pipeline.handler.graffiti_visualizer import GraffitiVisualizer
import cv2
from yolo_gs.pipeline.data_source import video_yolo_iterator
from yolo_gs.pipeline.pipeline import Pipeline
def init_logger():
logger.add(
"logs/yolo_gs.log",
rotation="100 MB", # 原有配置:日志文件达100MB轮转
level="DEBUG", # 原有配置:记录DEBUG及以上级别
enqueue=True, # 开启异步输出(关键参数)
backtrace=True, # 记录完整异常堆栈(包括第三方库)
diagnose=True, # 显示异常时的变量值(便于调试,生产环境可设为False)
)
# ===================== 测试运行 =====================
if __name__ == "__main__":
init_logger()
logger.info("开始运行YOLO涂鸦车道检测系统")
# 1. 创建管道
pipeline = Pipeline()
# 2. 添加同步处理器(按执行顺序执行,每个处理器的输出作为下一个处理器的输入)
pipeline.add_processor(GraffitiProcessor(name="涂鸦计算器"))
pipeline.add_processor(RetrogradeProcessor(name="逆行检测器"))
pipeline.add_processor(DrawDirectionProcessor())
pipeline.add_processor(DrawGraffitiProcessor())
pipeline.add_processor(DrawObjectBoxProcessor())
pipeline.add_processor(ResultLogger(name="结果日志器"))
# 4. 构建视频+YOLO跟踪迭代器(替换为你的视频路径,或0使用摄像头)
video_path = "123.mp4" # 或 0 (摄像头)
try:
logger.info(f"开始处理视频: {video_path}")
# 使用跟踪迭代器,可以获取对象ID
data_iter = video_yolo_iterator(video_path, model_path="yolo11s.pt", tracker="botsort.yaml", device="0")
# 5. 运行管道,迭代处理数据
for processed_data in pipeline.run(data_iter):
# 显示帧(按q退出)
frame = processed_data.frame
if frame is not None:
# 直接显示经过管道处理后的帧,其中已经包含了绘制处理器的效果
cv2.imshow("YOLO Tracking Pipeline", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
logger.info("用户请求退出程序")
break
except Exception as e:
logger.error(f"运行出错: {e}")
finally:
cv2.destroyAllWindows()
logger.info("程序结束运行")