不慌

简介: 本项目实现视频按帧抽取图片、图片筛选复制、分类分发、模型训练与优化、文件管理及批量图像推理统计等功能,适用于目标检测任务的全流程处理。

EXCEL: https://www.grapecity.com.cn/developer/spreadjs?utm_source=baidu&utm_medium=cpc&utm_term=SpreadJS&utm_campaign=Spread

清华源:https://pypi.tuna.tsinghua.edu.cn/simple/


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

import cv2
import os

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

# 创建输出文件夹(如果不存在)
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帧抽取一张图片,保存到指定文件夹

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

import os
import shutil

def copy_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()

    # 遍历图片,每隔10张复制一次
    for i, image_file in enumerate(image_files):
        if i % 10 == 0:  # 每隔10张复制一张
            source_path = os.path.join(source_folder, image_file)
            target_path = os.path.join(target_folder, image_file)
            shutil.copy(source_path, target_path)  # 改为 copy 以保留原文件
            print(f"Copied {image_file} to {target_folder}")

# 示例调用
source_folder = "picture"
target_folder = r"D:\0711\140"

copy_images(source_folder, target_folder)


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

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

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

拷贝字体文件

cp Arial.Unicode.ttf /root/.config/Ultralytics

data.yaml文件

# 训练集、验证集、测试集的图片路径(相对于path的路径)
train: /mnt/workspace/dataset/images/train
val: /mnt/workspace/dataset/images/val

# 类别名称与ID的映射(必须与TXT文件中的class_id对应!)
names:
  - ARIYA
  - ARIYA后视镜关
  - ARIYA后视镜开
  - ARIYA轮毂
  - 天籁
  - 天籁后视镜关
  - 天籁后视镜开
  - 天籁轮毂
  - 奇骏
  - 奇骏后视镜关
  - 奇骏后视镜开
  - 奇骏轮毂
  - 异物

训练程序

from ultralytics import YOLO

# 加载预训练模型(推荐从官方模型初始化)
model = YOLO(r'/mnt/workspace/yolo11n.pt')

# 开始训练!
results = model.train(
    data=r"/mnt/workspace/data.yaml",    # 数据集配置文件路径
    epochs=200,             # 训练轮次(建议至少100轮)
    batch=0.8,               # 批量大小(根据GPU显存调整)
    imgsz=1280,              # 输入图像尺寸
    name="my_custom_model", # 训练结果保存目录名称
    optimizer="auto",       # 优化器(推荐自动选择)
    lr0=0.01,               # 初始学习率
    patience=200,            # 早停等待轮次(检测不到改进则停止)
)

model.yaml文件

type: yolo11
name: yolo11
display_name: Day0710
model_path: best1.onnx
nms_threshold: 0.45
confidence_threshold: 0.25
classes:
  - ARIYA
  - ARIYA后视镜关
  - ARIYA后视镜开
  - ARIYA轮毂
  - 天籁
  - 天籁后视镜关
  - 天籁后视镜开
  - 天籁轮毂
  - 奇骏
  - 奇骏后视镜关
  - 奇骏后视镜开
  - 奇骏轮毂
  - 异物

#转换onnx,openvino

from ultralytics import YOLO

# Load a YOLO11n PyTorch model
model = YOLO("best.pt")

# Export the model
model.export(format="openvino")  # creates 'yolo11n_openvino_model/'
model.export(format="onnx")  # creates 'yolo11n_openvino_model/'

#转换onnx,openvino

#遍历路径文件夹下所有图片推理,输出各class置信度统计excel

import os
#import cv2
from PIL import Image, ImageDraw, ImageFont
from ultralytics import YOLO
import pandas as pd
import numpy as np


def load_model():
    model = YOLO(r"D:\7.12\12\best.pt")
    return model


def inference_and_annotate(model, image_path, output_folder):
    results = model(image_path)

    # 使用PIL打开图像
    pil_img = Image.open(image_path)
    draw = ImageDraw.Draw(pil_img)

    # 设置中文字体
    font_path = r"C:\Windows\Fonts\simhei.ttf"  # Windows系统默认黑体
    try:
        font = ImageFont.truetype(font_path, 24)
    except IOError:
        try:
            font = ImageFont.load_default()
            print("警告: 无法加载中文字体,将使用默认字体")
        except Exception as e:
            print(f"错误: 无法加载任何字体 - {e}")
            font = None

    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}"

                # 使用PIL绘制矩形框 - 修改颜色格式为RGB
                draw.rectangle([x1, y1, x2, y2], outline=(0, 255, 0), width=5)

                # 使用PIL绘制文本
                if font:
                    draw.text((x1, y1 - 30), label, font=font, fill=(0, 255, 0))
                else:
                    # 作为备用,使用简单的文本
                    draw.text((x1, y1 - 30), label, fill=(0, 255, 0))

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

    # Save annotated image
    output_path = os.path.join(output_folder, os.path.basename(image_path))
    pil_img.save(output_path)

    # 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"D:\7.12\12\picture\picture"
    output_folder = r"D:\7.12\12\detected_images1"
    excel_path = r"D:\7.12\12\detection_results1.xlsx"

    model = load_model()
    process_images_in_folder(folder_path, model, output_folder, excel_path)

#备用检测视频

from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO(r'best12_openvino_model')
    model.predict(
        source=r'WIN_20250627_11_56_44_Pro.mp4',
        show=True,
        save=True,
        save_frames=True,  # 启用逐帧保存
        vid_stride=5,
        project=r'D:\0711\results',  # 指定保存文件夹路径
        name='prediction_frames'  # 子文件夹名称
    )

#备用检测视频

推理图片并打印置信度信息

from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO(r'/mnt/workspace/runs/detect/train70/weights/best.pt')
    results = model.predict(source=r'/mnt/workspace/tuili', save=True, imgsz=1280)
    
    for i, result in enumerate(results):
        print(f"\n--- 图片 {i+1}/{len(results)}:{result.path} ---")
        boxes = result.boxes
        if len(boxes) == 0:
            print("未检测到目标")
        else:
            for j, box in enumerate(boxes):
                confidence = float(box.conf)
                cls_id = int(box.cls)
                cls_name = result.names[cls_id] if hasattr(result, 'names') else f"类别{cls_id}"
                print(f"目标 {j+1}/{len(boxes)}:{cls_name} (ID:{cls_id}),置信度:{confidence:.4f}")

https://c.wss.pet/f/hgyvacea12c

相关文章
|
XML 应用服务中间件 数据格式
windows下Tomcat8.0解压版安装并配置环境变量
windows下Tomcat8.0解压版安装并配置环境变量
1777 0
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
蘑菇识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了9种常见的蘑菇种类数据集【"香菇(Agaricus)", "毒鹅膏菌(Amanita)", "牛肝菌(Boletus)", "网状菌(Cortinarius)", "毒镰孢(Entoloma)", "湿孢菌(Hygrocybe)", "乳菇(Lactarius)", "红菇(Russula)", "松茸(Suillus)"】 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,
1528 11
基于Python深度学习的【蘑菇识别】系统~卷积神经网络+TensorFlow+图像识别+人工智能
|
存储 物联网 数据处理
什么数据中心最好?盘点全球十大数据中心!
在数字时代,数据中心作为关键基础设施,支撑着商业和社会的高效运转。从AWS、谷歌、微软到阿里云、苹果等巨头的数据中心,它们各具特色,涵盖高性能计算、液冷技术、绿色节能和高安全性等领域。这些“超级堡垒”不仅保障了在线交易、远程教育、智慧医疗等服务的稳定运行,还推动了云计算、大数据和物联网的发展,极大提升了社会效率和生活质量。每个数据中心根据自身优势,在不同应用场景中发挥着不可替代的作用,共同构建了数字化世界的基石。
1729 1
|
存储 安全 网络安全
数据库安全措施有哪些?
【8月更文挑战第15天】数据库安全措施有哪些?
1290 1
|
编解码 监控 算法
高动态范围成像:超越人眼的视觉体验
【10月更文挑战第15天】高动态范围成像(HDR)通过捕捉更广泛的亮度范围,超越传统图像和人眼的极限,提供卓越的视觉体验。本文深入解析HDR的基本原理、技术特点及其在摄影、电影、游戏、医学影像和工业检测等领域的广泛应用,展现其引领视觉技术革命的独特魅力。
1820 2
|
自然语言处理 数据处理
情感分析的终极形态:全景式细粒度多模态对话情感分析基准PanoSent
【9月更文挑战第24天】PanoSent是一种全新的多模态对话情感分析框架,旨在全景式地提取和分析情感元素,包括情感六元组提取与情感翻转分析两大任务。此框架依托大规模、高质量的多模态数据集PanoSent,涵盖文本、图像、音频等多种模态及多种语言,适应不同应用场景。为解决这些任务,研究人员提出了Chain-of-Sentiment推理框架,结合多模态大语言模型Sentica,实现细粒度的情感分析。尽管PanoSent在情感分析任务上表现优异,但仍面临多模态数据处理和跨领域适用性的挑战。
643 2
阿里云哪个活动中的云服务器支持2年或5年购买时长?优惠价格是多少?
2024年阿里云活动中的云服务器可以购买2年或5年吗?目前除了轻量应用服务器之外,其他系列的云服务器都是支持选择2年或5年购买时长的。本文为大家介绍下阿里云活动云服务器2年或5年的具体优惠价格。
阿里云哪个活动中的云服务器支持2年或5年购买时长?优惠价格是多少?
|
人工智能 中间件 API
Django集成OpenAI
Django集成OpenAI
661 0
|
程序员 数据库 微服务
分布式事务(Seata)TmTransactionException 问题
分布式事务(Seata)TmTransactionException 问题
876 1
|
Java Maven 开发工具
Windows安装IntelliJ IDEA
本篇是Windows系统安装IntelliJ IDEA的教程。
596 0