我如何处理模型的结果.用yolo8预测



我将我的网络摄像头设置为我的model.predict()函数的输入,并希望在函数检测到某个对象时触发一些代码。然而,当使用网络摄像头时,model.predict()函数似乎永远不会终止,因此这是不可能的。我只是想知道这个问题的解决方案。

from ultralytics import YOLO
from ultralytics.yolo.v8.detect.predict import DetectionPredictor
import cv2
print('hi')
model = YOLO("C:/Users/User/Downloads/best.pt")
outs = model.predict(source="0", show=True)
print('hey')
# hi gets printed but not hey

如果我在预测函数中包含参数verbose=true,则我需要的信息被打印到终端,但我不知道如何在变量中访问该信息以触发更多代码。也许多线程可以帮助,但肯定会有一个更简单的方法?

问题不在你的代码中,问题在Ultralytics包中使用的hydra包中。

它正在处理"0"传递给"source"作为空值,因此没有获得任何输入并对默认资产进行预测。如果您尝试使用任何本地图像或web上的图像,代码将正常工作。

你可以试着这样做:

model = YOLO("model.pt")
camera = cv2.VideoCapture(0)
img_counter = 0
while True:
ret, frame = camera.read()
if not ret:
print("failed to grab frame")
break
cv2.imshow("test", frame)
k = cv2.waitKey(1)
if k%256 == 27:
# ESC pressed
print("Escape hit, closing...")
break
elif k%256 == 32:
# SPACE pressed
img_path = "path/opencv_frame_{}.png".format(img_counter)
cv2.imwrite(img_path, frame)
outs = model.predict(img_path)
img_counter += 1
camera.release()

我们在这里做的是,我们试图将图像写入一个文件,然后对该文件进行推断。

如果你想在检测时保存,可以尝试以下操作:

inputs = [frame]  # or if you have multiple images [frame1, frame2, etc.]
results = model(inputs)  # list of Results objects -> perform inference using the model
if results:
cv2.imwrite(img_path, frame)
for result in results:
boxes = result.boxes  # Boxes object for bbox outputs 
# Do something with the bounding boxes

从YOLOv8模型获取结果并将其可视化

from ultralytics import YOLO
import torch
import cv2 
import numpy as np
import pathlib
import matplotlib.pyplot as plt
img = cv2.imread("BUS.jpg")
model = YOLO("best.pt")
results = model(img)
res_plotted = results[0].plot()

您还可以从下面的代码

中获得box, mask和prods。
for result in results:
boxes = result.boxes  # Boxes object for bbox outputs
masks = result.masks  # Masks object for segmentation masks outputs
probs = result.probs  # Class probabilities for classification outputs

相关内容

  • 没有找到相关文章

最新更新