yolov3、yolov4等批量预测图片并保存(python)

说明

本批量预测图片代码很适用于深度学习目标检测当中,将代码主干添加到预测脚本当中,修改部分调用参数、读入文件夹、保存文件夹等都可适用,方法如下:

方法

一、按图片的文件夹获取图片路径

代码展示:predict.py

#-----------------------------------------------------------------------#
#   predict.py将单张图片预测、摄像头检测、FPS测试和目录遍历检测等功能
#   整合到了一个py文件中,通过指定mode进行模式的修改。
#-----------------------------------------------------------------------#
import time
import os
import cv2
import numpy as np
from PIL import Image
from io import BytesIO
from yolo import YOLO
import shutil
#from six.moves import urllib

if __name__ == "__main__":
    yolo = YOLO()
    #----------------------------------------------------------------------------------------------------------#
    #   mode用于指定测试的模式:
    #   'predict'表示单张图片预测,如果想对预测过程进行修改,如保存图片,截取对象等,可以先看下方详细的注释
    #   'video'表示视频检测,可调用摄像头或者视频进行检测,详情查看下方注释。
    #   'fps'表示测试fps,使用的图片是img里面的street.jpg,详情查看下方注释。
    #   'dir_predict'表示遍历文件夹进行检测并保存。默认遍历img文件夹,保存img_out文件夹,详情查看下方注释。
    #----------------------------------------------------------------------------------------------------------#
    mode = "dir_predict"
    #----------------------------------------------------------------------------------------------------------#
    #   video_path用于指定视频的路径,当video_path=0时表示检测摄像头
    #   想要检测视频,则设置如video_path = "xxx.mp4"即可,代表读取出根目录下的xxx.mp4文件。
    #   video_save_path表示视频保存的路径,当video_save_path=""时表示不保存
    #   想要保存视频,则设置如video_save_path = "yyy.mp4"即可,代表保存为根目录下的yyy.mp4文件。
    #   video_fps用于保存的视频的fps
    #   video_path、video_save_path和video_fps仅在mode='video'时有效
    #   保存视频时需要ctrl+c退出或者运行到最后一帧才会完成完整的保存步骤。
    #----------------------------------------------------------------------------------------------------------#
    video_path      = 0
    video_save_path = ""
    video_fps       = 25.0
    #-------------------------------------------------------------------------#
    #   test_interval用于指定测量fps的时候,图片检测的次数
    #   理论上test_interval越大,fps越准确。
    #-------------------------------------------------------------------------#
    test_interval   = 100
    #-------------------------------------------------------------------------#
    #   dir_origin_path指定了用于检测的图片的文件夹路径
    #   dir_save_path指定了检测完图片的保存路径
    #   dir_origin_path和dir_save_path仅在mode='dir_predict'时有效
    #-------------------------------------------------------------------------#
    #dir_origin_path = "img/"
    dir_txt_path ="G:/Deep Code/yolov4-pytorch-master/map_out/detection-results/"
    dir_origin_path = "C:/Users/lenovo/Desktop/VOCdevkit/VOC2012/JPEGImages/"
    dir_save_path   = "img_out/"
    if not os.path.exists(dir_save_path):
                    os.makedirs(dir_save_path)
    s=os.listdir(dir_origin_path)
    #----------------------------------------------------#
    #----------------批量预测-----------------------------#
    #----------------------------------------------------#
    if mode == "dir_predict":
        
        #----------------------------------------------------#
        #----------------先清空文件夹中的内容------------------#
        #----------------------------------------------------#
        #shutil.rmtree(dir_crop_save_path)
        #os.mkdir(dir_crop_save_path)
        shutil.rmtree(dir_save_path)
        os.mkdir(dir_save_path)
        while True:
            #img = input('Input image filename:')
        #with open(dir_txt_path)as f:
            for filename in os.listdir(r"C:/Users/lenovo/Desktop/VOCdevkit/VOC2012/JPEGImages/"): 
               print ( filename)
               filename=filename.strip('\n')
               image_path  = os.path.join('C:/Users/lenovo/Desktop/VOCdevkit/VOC2012/JPEGImages/',filename)
               image= Image.open(image_path)
               r_image = yolo.detect_image(image)
               
               #r_image.save(dir_save_path+os.sep+'%s.jpg')
               r_image.save(dir_save_path+filename)
            """
            for i in s:
                count=1
                document = os.path.join(dir_origin_path,i)
                #f = urllib.request.urlopen( dir_origin_path)
                #img = Image.open(document)
                image = Image.open(document)
                img=image.read()
                r_image = yolo.detect_image(img)
                #r_image.show()
   
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
YOLOv4 中检测到的目标可以通过以下步骤进行批量裁剪并保存到本地: 1. 从你的数据集中加载一张待检测图片,并将其输入 YOLOv4 模型中进行目标检测,得到检测结果。可以使用 OpenCV 库来加载图片,并使用 PyTorch 的 `torchvision` 库中的 `transforms` 函数来对图片进行预处理,以便输入模型。 ```python import cv2 import torch import torchvision.transforms as T # 加载图片 img = cv2.imread("path/to/image.jpg") # 对图片进行预处理 transform = T.Compose([ T.ToTensor(), T.Resize((608, 608)), T.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) img = transform(img) img = img.unsqueeze(0) # 将图片输入模型进行目标检测 with torch.no_grad(): outputs = model(img.cuda()) ``` 2. 遍历检测结果,找到所有置信度大于设定阈值的目标,并对这些目标进行裁剪。可以使用 OpenCV 库中的 `cv2.rectangle()` 和 `cv2.imwrite()` 函数来对图片进行裁剪和保存。 ```python # 设定置信度阈值和类别名称 confidence_threshold = 0.5 class_names = ["person", "car", "truck", ...] # 遍历检测结果 for output in outputs: # 处理输出结果 ... # 找到所有置信度大于阈值的目标 for detection in detections: if detection[4] > confidence_threshold: # 获取目标的左上角和右下角坐标 x1, y1, x2, y2 = detection[:4] # 裁剪目标 target = img[int(y1):int(y2), int(x1):int(x2)] # 保存目标到本地 class_name = class_names[detection[6]] cv2.imwrite(f"{class_name}.jpg", target) ``` 需要注意的是,以上代码只是一个简单的示例,实际使用时需要根据你的数据集和需求进行相应的调整。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的渔WZH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值