一、使用yolov10模型检测视频中出现的行人,并保存为图片,detect_person.py代码如下:
from ultralytics import YOLOv10import globimport osimport cv2import argparsedef 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