以下是一个代码,可以在mp4视频中“实时”了解YOLO模型的推断:
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
while cap.isOpened():
success, frame = cap.read()
if success:
results = model(frame)
annotated_frame = results[0].plot()
cv2.imshow("YOLOv8 Inference", annotated_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
cv2.destroyAllWindows()
当我运行上面的代码时,它会打开VLC并显示带有框等的视频。由于模型需要时间来进行预测,所以它相当滞后。
我想要这个结果(滞后的视频),但是
已记录
。
问题是,如果我这样做:
import cv2
from ultralytics import YOLO
model = YOLO('yolov8n.pt')
video_path = "path/to/your/video/file.mp4"
cap = cv2.VideoCapture(video_path)
frame_num = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter('video_opencv.mp4',fourcc,30,(frame_width,frame_height))
while cap.isOpened():
success, frame = cap.read()
if success:
results = model(frame)
annotated_frame = results[0].plot()
#cv2.imshow("YOLOv8 Inference", annotated_frame)
video_writer.write(annotated_frame)
if cv2.waitKey(1) & 0xFF == ord("q"):
break
else:
break
cap.release()
cv2.destroyAllWindows()
这基本上是一样的,但我录制视频而不是简单地显示它,然后当我阅读视频时,它的速度和原始视频一样快(没有预测)
我希望我是清白的。
有什么解决办法吗?