feat(app): 添加 YOLO 管道应用程序主入口
This commit is contained in:
@@ -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()
|
||||||
Reference in New Issue
Block a user