YOLOX 做视频推理的时候 保存的文件夹为空解决方案
- 在测试yolox的demo 的时候图片可以正常推理
- 视频推理也可以执行(不报错),但是保存的文件内,是空的。
- 本人纠结好久,终于完美解决(在github上还没有解决这个问题)
其实解决这个问题很简单
就是 cv2.VideoWriter.write
函数在写入不存在的文件夹时,不会自动创建,也不会报错,这样就导致了,保存的文件夹为空。
为什么会出现保存文件夹不存在
- 可能是路径生成的时候不对
- 输入的控制台不同,导致出现文件夹路径创建错误
修复这个bug
找到tools\demo.py这个文件的(imageflow_demo函数)
def imageflow_demo(predictor, vis_folder, current_time, args):
cap = cv2.VideoCapture(args.path if args.demo == "video" else args.camid)
width = cap.get(cv2.CAP_PROP_FRAME_WIDTH) # float
height = cap.get(cv2.CAP_PROP_FRAME_HEIGHT) # float
fps = cap.get(cv2.CAP_PROP_FPS)
save_folder = os.path.join(
vis_folder, time.strftime("%Y_%m_%d_%H_%M_%S", current_time)
)
os.makedirs(save_folder, exist_ok=True)
if args.demo == "video":
save_path = os.path.join(save_folder, args.path.split("\\")[-1])
else:
save_path = os.path.join(save_folder, "camera.mp4")
logger.info(f"video save_path is {save_path}")
vid_writer = cv2.VideoWriter(
save_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (int(width), int(height))
)
将其中的
save_path = os.path.join(save_folder, args.path.split("/")[-1])
修改为
save_path = os.path.join(save_folder, args.path.split("\\")[-1])
再到 这个函数最后加入一句 (如下所示)
while True:
ret_val, frame = cap.read()
if ret_val:
outputs, img_info = predictor.inference(frame)
result_frame = predictor.visual(outputs[0], img_info, predictor.confthre)
if args.save_result:
vid_writer.write(result_frame)
# cv2.imshow('frame', result_frame)
ch = cv2.waitKey(1)
if ch == 27 or ch == ord("q") or ch == ord("Q"):
break
else:
break
logger.info(f"video save_path is {save_path}")
logger.info(f"video save_path is {save_path}")
方便运行完成提示
取消这句注释 可以实时查看哦
cv2.imshow('frame', result_frame)
有问题大家再一起讨论(byteTrack出现类似问题,原因是一样的,解决方案自己弄一下)