Yolo 模型的实时物体检测不起作用

问题描述 投票:0回答:1

我已经训练了一个自定义 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 并在单个图像上运行模型,保存输出,然后将输出图像合并到新的视频文件中。

效果很好,因此模型正在检测某些东西。

但是一旦我切换到视频,它似乎就又恢复原样了。

python deep-learning pytorch conv-neural-network yolo
1个回答
0
投票

是的,由于 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]

© www.soinside.com 2019 - 2024. All rights reserved.