feat(app): 集成loguru日志系统并优化错误处理
- 在app.py中引入loguru并配置日志轮转、异步输出等功能 - 添加全局日志初始化函数和程序启动/退出日志记录 - 将所有print语句替换为logger.info/error/debug/warning方法 - 在data_source.py中添加模型加载和视频打开的日志记录 - 在各个处理器中集成日志记录器实例并记录处理状态 - 修改处理器模块导入路径以符合相对导入规范 - 在requirements.txt中添加loguru依赖包 - 统一异常处理的日志记录方式,便于调试和监控
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import asyncio
|
||||
from loguru import logger
|
||||
|
||||
from yolo_gs.pipeline.handler.DrawDirectionProcessor import DrawDirectionProcessor
|
||||
from yolo_gs.pipeline.handler.DrawGraffitiProcessor import DrawGraffitiProcessor
|
||||
@@ -12,8 +13,23 @@ 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()
|
||||
|
||||
@@ -25,12 +41,12 @@ if __name__ == "__main__":
|
||||
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")
|
||||
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):
|
||||
@@ -40,8 +56,10 @@ if __name__ == "__main__":
|
||||
# 直接显示经过管道处理后的帧,其中已经包含了绘制处理器的效果
|
||||
cv2.imshow("YOLO Tracking Pipeline", frame)
|
||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
||||
logger.info("用户请求退出程序")
|
||||
break
|
||||
except Exception as e:
|
||||
print(f"运行出错: {e}")
|
||||
logger.error(f"运行出错: {e}")
|
||||
finally:
|
||||
cv2.destroyAllWindows()
|
||||
cv2.destroyAllWindows()
|
||||
logger.info("程序结束运行")
|
||||
|
||||
Reference in New Issue
Block a user