cdf228fe56
- 在app.py中引入loguru并配置日志轮转、异步输出等功能 - 添加全局日志初始化函数和程序启动/退出日志记录 - 将所有print语句替换为logger.info/error/debug/warning方法 - 在data_source.py中添加模型加载和视频打开的日志记录 - 在各个处理器中集成日志记录器实例并记录处理状态 - 修改处理器模块导入路径以符合相对导入规范 - 在requirements.txt中添加loguru依赖包 - 统一异常处理的日志记录方式,便于调试和监控
66 lines
2.8 KiB
Python
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("程序结束运行")
|