diff --git a/app.py b/app.py new file mode 100644 index 0000000..c8df3d1 --- /dev/null +++ b/app.py @@ -0,0 +1,47 @@ +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() \ No newline at end of file