使用python写一段代码,使用yolo训练好的.pt模型对文件夹里的图像进行推理,按不同类别推理结果将图像复制到不同类别命名的文件夹中
时间: 2024-12-06 08:27:34 浏览: 12
在Python中,我们可以使用`torch`, `cv2`以及`YOLOv5`库来实现这样的功能。首先需要安装必要的库,如果你还没安装,可以使用pip安装:
```bash
pip install torch torchvision opencv-python yolov5
```
接下来,这里是一个简单的示例,假设我们已经有了一个预训练的`.pt`模型(通常来自于YOLOv5),并且有一个包含图片的文件夹,我们要按照标签将图片分类并复制到对应文件夹下:
```python
import os
import cv2
from PIL import Image
from yolov5.models.common import Detect
from yolov5.utils.general import non_max_suppression
# 加载模型
model = Detect.load_from_path('path_to_your_yolov5_model.pt')
# 图片目录和目标类别文件夹路径
image_dir = 'path_to_images_folder'
output_dirs = {'class_1': 'path_to_class_1_output', 'class_2': 'path_to_class_2_output', ...} # 类别名对应的输出目录
# 遍历图片文件夹
for img_name in os.listdir(image_dir):
if img_name.endswith(".jpg") or img_name.endswith(".png"):
# 读取图片
img_path = os.path.join(image_dir, img_name)
img = cv2.imread(img_path)
# 检测和筛选出物体
results = model(img)[0]
boxes, labels, scores = non_max_suppression(results, conf_thres=0.5, iou_thres=0.4) # 设置阈值调整检测结果
for box, label in zip(boxes, labels):
x1, y1, x2, y2 = box.tolist()
class_label = output_dirs[str(label.item())]
# 创建类别文件夹如果不存在
if not os.path.exists(class_label):
os.makedirs(class_label)
# 将图片复制到对应类别文件夹
new_img_path = os.path.join(class_label, f"{img_name}_{label.item()}.jpg")
cv2.imwrite(new_img_path, img[y1:y2, x1:x2])
print(f"Processed {img_name}")
阅读全文