帮我写个脚本:使用已经训练好的yolov5模型进行目标检测:未检测到目标的图片,保存至”无目标数据”,有检测结果的图片,保存至”有目标数据”,同时,检测结果保存为yolo格式的目标检测标签
时间: 2024-02-20 18:00:58 浏览: 54
好的,这是一个Python脚本的框架,你需要将其中的路径和参数替换成你自己的。
```python
import torch
import cv2
import os
import numpy as np
from models.experimental import attempt_load
from utils.general import non_max_suppression
# 加载模型
model_path = "path/to/model.pt"
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = attempt_load(model_path, map_location=device)
model.eval()
# 设置阈值和iou阈值
conf_thres = 0.5
iou_thres = 0.5
# 设置图片目录
img_dir = "path/to/images"
# 设置保存目录
output_dir = "path/to/output"
# 创建保存目录
os.makedirs(os.path.join(output_dir, "有目标数据"), exist_ok=True)
os.makedirs(os.path.join(output_dir, "无目标数据"), exist_ok=True)
# 遍历图片目录
for filename in os.listdir(img_dir):
if filename.endswith(".jpg") or filename.endswith(".png"):
# 读取图片
img_path = os.path.join(img_dir, filename)
img = cv2.imread(img_path)
# 进行目标检测
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = torch.from_numpy(img.transpose(2, 0, 1)).float().to(device) / 255.0
img = img.unsqueeze(0)
pred = model(img)[0]
pred = non_max_suppression(pred, conf_thres, iou_thres)
# 如果检测到目标
if len(pred[0]) > 0:
# 保存检测结果
output_path = os.path.join(output_dir, "有目标数据", filename)
np.savetxt(output_path[:-3] + "txt", pred[0].cpu().numpy(), fmt="%.5f")
# 保存图片
output_img_path = os.path.join(output_dir, "有目标数据", filename)
cv2.imwrite(output_img_path, img)
# 如果未检测到目标
else:
# 保存图片
output_path = os.path.join(output_dir, "无目标数据", filename)
cv2.imwrite(output_path, img)
```
这个脚本使用了YoloV5模型进行目标检测,并将检测结果保存为Yolo格式的标签。如果检测到目标,则将检测结果和图片保存到"有目标数据"目录下;如果未检测到目标,则将图片保存到"无目标数据"目录下。你需要将"model_path"、"img_dir"和"output_dir"分别替换成你的模型路径、图片目录和保存目录。
阅读全文