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("程序结束运行")