使用yolov10模型检测视频中出现的行人,并保存为图片

发布于:2025-07-25 ⋅ 阅读:(10) ⋅ 点赞:(0)

一、使用yolov10模型检测视频中出现的行人,并保存为图片,detect_person.py代码如下:

from ultralytics import YOLOv10
import glob
import os
import cv2
import argparse


def detect_person(videoPath, savePath):

    if not os.path.exists(savePath):
        os.mkdir(savePath)

    # YOLOV10模型路径
    modelpath = r'q:\yolov10-main\weights\yolov10m.pt'
    print("------------------",videoPath,savePath)
 
    model = YOLOv10(modelpath)
    timeF = 0
    image_count = 0
    # filenames = glob.glob(os.path.join(videoPath, '*.avi'))
    
    # 遍历视频文件夹
    for root, dirs, files in os.walk(videoPath):
        print("======",root)
        print("++++++",dirs)
        print("------",files,len(files))

        # 遍历视频文件
        for filename in files:
            # if(not filename.endswith(".avi")):
            #     continue
            if(filename.split('.')[-1] not in ['avi','mp4']):
                continue
            img = 1
            videofile = os.path.join(root, filename)
            video = cv2.VideoCapture(videofile)
            frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))

            # 遍历视频每一帧
            for _ in range(frames):
                ret, frame = video.read()
                timeF += 1
                if ret:
                    results = model.predict(frame)[0]
                    personcount = 0
                    for box in results.boxes:
                        if box.cls == 0 and box.conf > 0.5:
                            personcount += 1
                    
                    # 图片中出现大于2人,且间隔15帧,保存图片
                    if personcount >= 2 and timeF > 15 :
                        
                        cv2.imwrite(os.path.join(savePath, filename.split('\\')[-1][:-4] + '_' + str(img) + '.jpg'),frame)
                        if image_count % 100 == 0:
                            print("image_count : ",image_count)
                        timeF = 0
                        img += 1
            # 释放资源
            video.release()
            # 删除视频源文件,不想删除可以注释掉
            os.remove(videofile)

if __name__ == '__main__':
    parse = argparse.ArgumentParser(description='使用yolov10模型检测视频中出现的行人,并保存为图片')
    parse.add_argument('--videoDir',required=True,help='视频文件夹')
    parse.add_argument('--imageDir',required=True,help='保存图片文件夹')
    args = parse.parse_args()
    detect_person(args.videoDir, args.imageDir)

二、在终端执行以上代码的命令

python.exe detect_person.py --videoDir Q:\DATAS\adas-data\video-person\20250708 --imageDir Q:\DATAS\adas-data\video-person\images-20250718


网站公告

今日签到

点亮在社区的每一天
去签到