新时代

简介: 本项目实现视频处理与目标检测全流程,包括视频抽帧、图像筛选、数据集划分、模型训练及多种格式转换(ONNX/OpenVino),支持高效推理与自动标注,适用于视觉识别任务。

代码1

import cv2
import os

# 视频文件路径
video_path = '00009.MTS'
# 保存图片的文件夹路径
output_folder = 'picture'
# 每隔多少帧提取一张图片
frame_interval = 20

# 创建输出文件夹(如果不存在)
os.makedirs(output_folder, exist_ok=True)

# 打开视频文件
cap = cv2.VideoCapture(video_path)

# 初始化帧计数器
frame_count = 0

while True:
    # 读取一帧
    ret, frame = cap.read()

    # 如果无法读取到帧,则退出循环
    if not ret:
        break

    # 每隔 `frame_interval` 帧保存一次图片
    if frame_count % frame_interval == 0:
        # 构建保存路径
        output_path = os.path.join(output_folder, f'frame_{frame_count}.jpg')
        # 保存图片
        cv2.imwrite(output_path, frame)

    # 增加帧计数器
    frame_count += 1

# 释放视频对象
cap.release()

#视频切割,每XX帧抽取一张图片,保存到指定文件夹

代码2

import os
import shutil

def move_images(source_folder, target_folder):
    # 获取所有图片文件
    image_files = [f for f in os.listdir(source_folder) if f.endswith(('.jpg', '.png', '.jpeg', '.gif'))]

    # 按文件名排序,确保顺序一致
    image_files.sort()

    # 遍历图片,每4张移动一次
    for i, image_file in enumerate(image_files):
        if i % 5 == 0:  # 间隔4张后移动
            source_path = os.path.join(source_folder, image_file)
            target_path = os.path.join(target_folder, image_file)
            shutil.move(source_path, target_path)
            print(f"Moved {image_file} to {target_folder}")

# 示例调用
source_folder = "WIN_20250627_11_56_44_Pro"
target_folder = "small"

move_images(source_folder, target_folder)

#每隔XX张图片,抽取一张至目标文件夹

代码3

import os
import shutil

def distribute_images(source_folder, target_folder1, target_folder2):
    # 获取源文件夹中的所有文件
    files = [f for f in os.listdir(source_folder) if os.path.isfile(os.path.join(source_folder, f))]

    # 初始化计数器
    count = 1

    # 遍历所有文件
    for file in files:
        # 构建完整的文件路径
        src_file = os.path.join(source_folder, file)

        # 根据计数器的值决定目标文件夹
        if count % 4 < 3:
            dst_folder = target_folder1
        else:
            dst_folder = target_folder2

        # 构建目标文件路径
        dst_file = os.path.join(dst_folder, file)

        # 复制文件到目标文件夹
        shutil.copy(src_file, dst_file)

        # 更新计数器
        count += 1

# 使用示例
source_folder = 'small'
target_folder1 = r'D:\0711\dataset\images\train'
target_folder2 = r'D:\0711\dataset\images\val'

distribute_images(source_folder, target_folder1, target_folder2)

#遍历目标文件夹,每4张图片为一个循环,前3张放入文件夹1,第4张放入文件夹2

1.路径yaml文件

train: /mnt/workspace/1/datasets/train/images
val: /mnt/workspace/1/datasets/val/images
 
 
nc: 2
names: ['l21b', 'l12f']

2.训练代码

from ultralytics import YOLO
 
# 初始化模型(使用yolo11预训练权重)
model = YOLO('yolo11n.pt') # model = YOLO('best.pt')
 
# 训练配置
results = model.train(
    data='/mnt/workspace/data.yaml',  # 指定数据集配置文件
    epochs=150,             # 训练轮次
    imgsz=1280,              # 输入图像尺寸
    batch=16,               # 批次大小
    patience=400,           
)

3.转化为ONNX格式进行自动标注

from ultralytics import YOLO
if __name__ == '__main__':
    # Load a pretrained YOLOv8 model
    model = YOLO('/mnt/workspace/best.pt')
 
    # Train the model on a custom dataset
    model.export(format='ONNX')

4.自动标注的模型yaml文件

type: yolo11
name: yolo11
display_name: yolo
model_path: best.onnx
nms_threshold: 0.45
confidence_threshold: 0.7
classes:
  - l12f
  - l21b

5.转化为openvino格式推理

from ultralytics import YOLO
 
 
model = YOLO('best.pt')  # 加载训练好的模型
model.export(format='openvino')  # 自动生成openvino_dir目录包含IR文件

6.使用openvino推理

import openvino as ov
from ultralytics import YOLO
 
model = YOLO("best_openvino_model")
 
 
results = model.predict(r"测试图片\frame_000006.png", save=True, conf=0.2,iou=0.9,imgsz=1280)
 
# 处理返回的结果
for result in results:
    boxes = result.boxes       # 获取边界框信息
    result.show()              # 显示结果

7.推理视频

import cv2
from ultralytics import YOLO
 
if __name__ == "__main__":
    # Load a pretrained YOLOv8 model
    model = YOLO("best.pt")
 
    def process_video(video_path):
        # 打开视频文件
        cap = cv2.VideoCapture(video_path)
 
        while cap.isOpened():
            # 读取一帧视频
            ret, frame = cap.read()
 
            if ret:
 
                # 进行目标检测
                results = model(frame)
 
                # 获取检测结果并绘制到帧上
                result_frame = results[0].plot()
 
                # 调整窗口大小以适应显示
                
                cv2.namedWindow('Detected', cv2.WINDOW_NORMAL)
 
                # 显示原始帧和检测结果帧
                
                cv2.imshow('Detected', result_frame)
 
                # 按 'q' 键退出循环
                if cv2.waitKey(1) & 0xFF == ord('q'):
                    break
            else:
                break
 
        # 释放视频捕获对象并关闭所有窗口
        cap.release()
        cv2.destroyAllWindows()
 
    # 替换为你的视频文件路径
    video_path = r"C:\Users\Lenovo\Desktop\18\20220914_161006_MOVI0006.mov"
    while True:
        process_video(video_path)
 

7.2.推理分帧验证模型

from ultralytics import YOLO
 
if __name__ == '__main__':
    model = YOLO(r'C:\Users\HF03\Desktop\test02\datasets\best.pt')
    model.predict(
        source=r'C:\Users\HF03\Desktop\test02\datasets\nissan.mp4',
        show=True,
        save=True,
        save_frames=True,  # 启用逐帧保存
        vid_stride=5,
       #project=r'C:\Users\HF03\Desktop\test02\results',  # 指定保存文件夹路径
       #name='prediction_frames'  # 子文件夹名称
    )

7.3验证

import os
import cv2
from ultralytics import YOLO
import pandas as pd


def load_model():
    model = YOLO("best2.pt")
    return model


def inference_and_annotate(model, image_path, output_folder):
    results = model(image_path)
    img = cv2.imread(image_path)

    detections = {}

    for result in results:
        boxes = result.boxes
        if boxes is not None and len(boxes) > 0:
            for box in boxes:
                x1, y1, x2, y2 = map(int, box.xyxy[0])
                cls = int(box.cls[0])
                conf = box.conf[0].item()
                label = f"{model.names[cls]} {conf:.2f}"

                # Draw bounding box and label
                cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
                cv2.putText(img, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

                # Store detection: class -> confidence
                detections[model.names[cls]] = conf

    # Save annotated image
    output_path = os.path.join(output_folder, os.path.basename(image_path))
    cv2.imwrite(output_path, img)

    # Return a dictionary with filename and all detected classes/confidences
    return {"filename": os.path.basename(image_path), **detections}


def process_images_in_folder(folder_path, model, output_folder, excel_path):
    os.makedirs(output_folder, exist_ok=True)
    all_detections = []

    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg')):
            image_path = os.path.join(folder_path, filename)
            detection = inference_and_annotate(model, image_path, output_folder)
            all_detections.append(detection)

    # Convert list of dicts to DataFrame
    df = pd.DataFrame(all_detections)

    # Fill NaN values with 0 (or you can leave it empty)
    # df = df.fillna(0)

    df.to_excel(excel_path, index=False)
    print(f"Excel file saved at: {excel_path}")


# Main
if __name__ == "__main__":
    folder_path = r"picture"
    output_folder = r"annotated_images3"
    excel_path = r"results3.xlsx"

    model = load_model()
    process_images_in_folder(folder_path, model, output_folder, excel_path)
相关文章
|
计算机视觉
pyt魔搭训练常用代码
本文分享了在魔搭社区进行目标检测训练的经验与代码,涵盖数据解压、配置文件设置、模型训练及格式转换等关键步骤,助力快速上手YOLO模型训练。
|
5月前
|
API 开发工具 计算机视觉
YOLO11 语句整理
本内容介绍基于YOLOv11模型的开发流程,涵盖模型下载、安装依赖库、训练与推理、模型转换为OpenVINO格式及部署。通过Ultralytics工具包实现模型加载、训练和预测,并使用OpenVINO优化推理性能。此外,提供数据集划分方法,按指定比例生成训练集、验证集和测试集,确保数据准备规范化,提升模型训练效果与实用性。
|
6月前
|
API Python
利用openvino模型推理图片
本文介绍了如何使用 OpenVINO 格式模型文件对图片进行推理。通过将训练好的模型转换为 OpenVINO 格式,可实现跨设备部署。文中详细展示了利用 Python 和 OpenVINO API 完成模型加载、编译及推理的步骤。核心代码包括初始化 OpenVINO 模型、设置预测参数(如置信度和 IoU 阈值)以及对图片进行检测并显示结果。注意:OpenVINO 模型文件需完整存放于同一目录下,路径需正确配置,参数可根据模型性能调整。
|
人工智能 API 开发工具
YOLOV11 使用流程
本内容整理了YOLO V11的常用代码语句,涵盖YOLO模型下载、数据集划分、模型训练与推理优化等关键步骤,适用于目标检测任务。
|
4月前
|
计算机视觉
不慌
本项目实现视频按帧抽取图片、图片筛选复制、分类分发、模型训练与优化、文件管理及批量图像推理统计等功能,适用于目标检测任务的全流程处理。
|
人工智能 调度 开发工具
xGPU来啦!免费GPU资源开发花样AI应用!
为了降低AI应用服务和推广的门槛,解决开发者面临的实际痛点,ModelScope社区推出 xGPU 服务,让大家能够免费使用高性能 GPU 资源,托管自己的AI应用服务。
|
机器学习/深度学习 监控 算法
YOLO
YOLO “【5月更文挑战第4天】”
395 7
|
Java API Maven
一篇文章讲明白Jetty使用教程(一)——开始使用Jetty
一篇文章讲明白Jetty使用教程(一)——开始使用Jetty
742 0
|
机器学习/深度学习 自然语言处理 算法
【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标
【CV大模型SAM(Segment-Anything)】真是太强大了,分割一切的SAM大模型使用方法:可通过不同的提示得到想要的分割目标