import asyncio 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 # ===================== 测试运行 ===================== if __name__ == "__main__": # 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: # 使用跟踪迭代器,可以获取对象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'): break except Exception as e: print(f"运行出错: {e}") finally: cv2.destroyAllWindows()