用yolov8 训练,最后形成训练好的文件。 并且能在后续项目使用

概念

项目需求, 通过视频抓拍获取车辆信息,抓取车牌。

YOLOv8 主要负责"找到"车牌的位置(目标检测),而"读取"上面的文字(A12345)通常需要结合 OCR(光学字符识别)技术。

我们将整个流程分为四个阶段:数据准备、模型训练、模型导出、以及实际推理(结合OCR)。

第一阶段:数据准备 (从视频到数据集)

YOLOv8 不能直接"训练视频",它需要经过标注的图片

  1. 视频抽帧 你需要编写一个简单的 Python 脚本,将你的原始视频按一定间隔(例如每 10 帧)保存为图片。

    Python

    ini 复制代码
    import cv2
    import os
    
    vidcap = cv2.VideoCapture('你的视频.mp4')
    success, image = vidcap.read()
    count = 0
    save_path = "./images/train/" # 确保文件夹存在
    
    while success:
        if count % 10 == 0: # 每10帧保存一张,避免数据重复度过高
            cv2.imwrite(f"{save_path}frame_{count}.jpg", image)
        success, image = vidcap.read()
        count += 1
  2. 数据标注 (Labeling) 这是最耗时但最重要的一步。你需要使用工具框出图片中的"车牌"。

  • 工具推荐: LabelImg 或 Roboflow(网页版,更方便)。
  • 标签名称: 设为 license_plate
  • 格式: 导出时选择 YOLO格式 (会生成对应的 .txt 文件)。
  1. 整理文件结构 YOLOv8 要求严格的文件目录结构:
scss 复制代码
datasets/
└── license_plate_data/
    ├── images/
    │   ├── train/  (存放训练图片)
    │   └── val/    (存放验证图片)
    └── labels/
        ├── train/  (存放对应的.txt标注文件)
        └── val/    (存放对应的.txt标注文件)

第二阶段:训练 YOLOv8 模型

环境准备好后(安装了 ultralytics 库),就可以开始训练了。

  1. 安装环境:

    pip install ultralytics

2.开始训练 (Python 代码): 创建一个 train.py 文件并运行:

ini 复制代码
from ultralytics import YOLO

# 1. 加载预训练模型 (推荐 yolov8n 或 yolov8s,速度快)
model = YOLO('yolov8n.pt') 

# 2. 开始训练
results = model.train(
    data='license_plate.yaml', # 指向刚才创建的配置文件
    epochs=100,                # 训练轮数,建议100起
    imgsz=640,                 # 图片大小
    batch=16,                  # 根据显存调整
    project='plate_project',   # 项目名称
    name='train_run1'          # 训练任务名称
)

第三阶段:获取与导出训练好的文件

训练完成后,模型文件会自动保存在以下路径: plate_project/train_run1/weights/best.pt

这就是你要的核心资产。 只要有这个 .pt 文件,你就可以在任何安装了 YOLOv8 的电脑上检测车牌位置。

第四阶段:后续项目使用 (检测 + 识别)

在后续项目中,你不仅要框出车牌,还要读取号码。这时候通常是 YOLOv8 (定位) + PaddleOCR (读取) 的组合。

下面是一个完整的推理代码示例,展示如何在后续项目中使用你训练好的 best.pt

ini 复制代码
from ultralytics import YOLO
import cv2
# 你需要安装 paddleocr: pip install paddleocr paddlepaddle
from paddleocr import PaddleOCR 

# 1. 加载你自己训练的模型
model = YOLO('path/to/your/best.pt')

# 2. 初始化 OCR (专门用于识别中文和数字)
ocr = PaddleOCR(use_angle_cls=True, lang='ch') 

# 3. 打开视频进行处理
cap = cv2.VideoCapture('new_video.mp4')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret: break

    # A. 使用 YOLO 检测车牌位置
    results = model(frame)
    
    for result in results:
        boxes = result.boxes
        for box in boxes:
            # 获取坐标
            x1, y1, x2, y2 = map(int, box.xyxy[0])
            
            # B. 裁剪出车牌区域 (ROI)
            plate_img = frame[y1:y2, x1:x2]
            
            # C. 使用 OCR 识别文字
            # 注意:需处理裁剪区域为空的情况
            if plate_img.size > 0:
                ocr_result = ocr.ocr(plate_img, cls=True)
                if ocr_result and ocr_result[0]:
                    text = ocr_result[0][0][1][0] # 获取识别到的车牌号
                    print(f"检测到车牌: {text}")

                    # 在画面上画框并写字 (可选)
                    cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
                    cv2.putText(frame, text, (x1, y1 - 10), 
                                cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

    cv2.imshow('Plate Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()
相关推荐
Serendipity_Carl2 小时前
数据可视化实战之链家
python·数据可视化·数据清洗
小裴(碎碎念版)2 小时前
文件读写常用操作
开发语言·爬虫·python
TextIn智能文档云平台2 小时前
图片转文字后怎么输入大模型处理
前端·人工智能·python
ujainu2 小时前
Python学习第一天:保留字和标识符
python·学习·标识符·保留字
studytosky2 小时前
深度学习理论与实战:反向传播、参数初始化与优化算法全解析
人工智能·python·深度学习·算法·分类·matplotlib
清水白石0083 小时前
《Python × 数据库:用 SQLAlchemy 解锁高效 ORM 编程的艺术》
开发语言·python·json
星依网络3 小时前
使用LabelImg工具标注数据(游戏辅助脚本开发)
python·游戏引擎·图形渲染·骨骼绑定
站大爷IP3 小时前
Appium实现Android应用数据爬取:从环境搭建到实战优化
python
IT老兵20254 小时前
PyTorch DDP多GPU训练实践问题总结
人工智能·pytorch·python·分布式训练·ddp