我已经训练了一个自定义 yolo 模型来检测板上的方形槽,并且图像的准确率超过 95%。
但是当我切换到视频检测时,它似乎没有检测到任何东西
我正在使用以下代码来运行实时对象检测
cap = cv2.VideoCapture('../video/1st/output.mp4')
while cap.isOpened():
ret, frame = cap.read()
results = model(frame)
final_img = np.squeeze(results.render())
cv2.imshow("YOLO", final_img)
if cv2.waitKey(10) & 0XFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
我使用此代码加载模型
model = torch.hub.load("ultralytics/yolov5", "custom", path="yolov5/runs/train/exp36/weights/best.pt",force_reload=True)
model.conf = 0.6
我什至尝试将可用视频拆分为 jpeg 并在单个图像上运行模型,保存输出,然后将输出图像合并到新的视频文件中。
效果很好,因此模型正在检测某些东西。
但是一旦我切换到视频,它似乎就又恢复原样了。
是的,由于 results.renders()/ 中没有返回任何类型的对象,因此您看不到任何内容 您可以像这样更改代码脚本
cap = cv2.VideoCapture('../video/1st/output.mp4')
while cap.isOpened():
ret, frame = cap.read()
results = model(frame)
bboxes = results.xyxy[0].cpu().tolist()
for bbox in bboxes:
conf = f'{bbox[4]:.4f}' #Confidance of that prediction
bbox = list(map(lambda x: int(x), bbox)) #To convert float to integer
class_id = bbox[5] #Class_id
bbox =bbox[:4]
cv2.rectangle(frame,(bbox[0],bbox[1]),(bbox[2],bbox[3]),color=(255,255,255),thickness=3)
cv2.imshow("YOLO", frame)
if cv2.waitKey(10) & 0XFF == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
并写下视频中的帧 完整的代码应该是这样的
input_video_path = #Enter your video path
cap = cv2.VideoCapture(input_video_path)
fps = int(cap.get(cv2.CAP_PROP_FPS))
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
output_video_path = 'output_video.mp4' # Output video path
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter(output_video_path, fourcc, fps, (frame_width, frame_height))
model = #Here load your model
while True:
ret, frame = cap.read()
if not ret:
break
results = model(frame)
bboxes = results.xyxy[0].cpu().tolist()
for bbox in bboxes:
conf = f'{bbox[4]:.4f}' #Confidance of that prediction
bbox = list(map(lambda x: int(x), bbox)) #To convert float to integer
class_id = bbox[5] #Class_id
bbox =bbox[:4]
cv2.rectangle(frame,(bbox[0],bbox[1]),(bbox[2],bbox[3]),color=(255,255,255),thickness=3)
out.write(frame)
#cv2_imshow(frame)
if cv2.waitKey(10) & 0XFF == ord("q"):
break
cap.release()
out.release()
# Close all OpenCV windows
cv2.destroyAllWindows()
参考资料:-
[https://docs.ultralytics.com/][1]
[https://docs.ultralytics.com/yolov5/][2]
[https://docs.ultralytics.com/yolov5/tutorials/pytorch_hub_model_loading/][3]