【完整源码+数据集】车牌数据集,yolov8车牌检测数据集 7811 张,汽车车牌识别数据集,智慧交通汽车车牌识别系统实战教程

文章前瞻:优质数据集与检测系统

数据集与检测系统 数据集与检测系统
基于深度学习的道路积水检测系统 道路积水识别数据集(分割)
基于深度学习的道路裂缝检测系统 基于深度学习的道路结冰检测系统
道路油污识别数据集 基于深度学习的道路垃圾检测系统
基于深度学习的交通事故检测系统 基于深度学习的水面垃圾检测系统
基于深度学习的电动车头盔佩戴检测系统 基于深度学习的安全帽检测系统
基于深度学习的人员吸烟检测系统 基于深度学习的口罩佩戴检测系统
基于深度学习的烟雾和火灾检测系统 基于深度学习的树木倒塌检测系统
基于深度学习的人员摔倒检测系统 基于深度学习的水面船只检测系统
基于深度学习的遥感船舶检测系统 基于深度学习的行人车辆检测系统
基于深度学习的车辆分类检测系统 基于深度学习的多分类车辆检测系统
基于深度学习的交通信号灯检测系统 基于深度学习的人员密集聚众检测系统
基于深度学习的人员游泳溺水检测系统 基于深度学习的井盖丢失破损检测系统
基于深度学习的动物分类检测系统 基于深度学习的人员睡岗玩手机检测系统
基于深度学习的航拍行人检测系统 基于深度学习的航拍行人检测系统2
基于深度学习的牛只计数与检测系统 基于深度学习的道路积雪结冰检测系统
基于深度学习的羊只计数与检测系统 基于深度学习的光伏板检测系统
基于深度学习的光伏板缺陷检测系统 基于深度学习的农业病虫害检测系统
基于深度学习的害虫检测系统 基于深度学习的消防灭火器检测系统
基于深度学习的垃圾分类检测系统 基于深度学习的反光衣穿戴检测系统
基于深度学习的水面水藻检测系统 基于深度学习的工地安全穿戴检测系统(安全帽反光衣安全鞋)
基于深度学习的猫狗分类检测系统 基于深度学习的食品分类检测系统
基于深度学习的海洋垃圾检测系统 基于深度学习的水面船舶分类检测系统
基于深度学习的工地挖掘机检测系统 基于深度学习的工地工程车检测系统
基于深度学习的救生衣穿戴检测系统 基于深度学习的人员姿势检测系统(站坐躺摔倒)
基于深度学习的家具分类检测系统 水果分类识别数据集(分割)
基于深度学习的水果分类检测系统 基于深度学习的航拍水面漂浮物检测系统
基于深度学习的无人机设备检测系统 基于深度学习的水面垂钓检测系统
基于深度学习的人体手势检测系统 基于深度学习的可回收/不可回收垃圾检测系统
基于深度学习的吸烟玩手机行为检测系统 基于深度学习的明厨亮灶鼠患检测系统
基于深度学习的航拍车辆分类检测系统 基于深度学习的航拍树木检测系统
基于深度学习的氧气瓶检测系统 基于深度学习的电线杆杂物检测系统
基于深度学习的电动车进电梯检测系统 基于深度学习的车道自行车检测系统
基于深度学习的航拍光伏板检测系统 基于深度学习的航拍船舶检测系统
基于深度学习的服饰分类检测系统 基于深度学习的玉米作物检测系统
基于深度学习的摆摊占道经营检测系统 基于深度学习的建筑垃圾废料检测系统
基于深度学习的猪计数与检测系统 基于深度学习的猪只行为动作检测系统
基于深度学习的农作物病害检测系统(最全植物种类) 基于深度学习的电力塔检测系统
基于深度学习的纸箱检测系统 基于深度学习的共享单车检测系统
基于深度学习的马行为状态检测系统 基于深度学习的水稻病害检测系统
基于深度学习的蓝莓成熟度检测系统 基于深度学习的草莓成熟度检测系统
基于深度学习的人员高空作业检测系统 基于深度学习的学生课堂行为检测系统

一、车牌数据集介绍

【数据集】yolov8车牌检测数据集 7811 张 ,目标检测,包含YOLO/VOC格式标注,训练、验证、测试集已划分

数据集中标签包含70种分类names: ['plate', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '澳', '川', '鄂', '甘', '赣', '港', '贵', '桂', '黑', '沪', '吉', '冀', '津', '晋', '京', '警', '辽', '鲁', '蒙', '闽', '宁', '青', '琼', '陕', '苏', '皖', '湘', '新', '学', '渝', '豫', '粤', '云', '浙', '藏'],代表车牌上的中文、英文和数字

检测场景为城市道路、工业园区、高速服务区、停车场等场景 ,可用于交通违法精准执法、车辆溯源与安全防控、停车场智能管理、物流与货运监管、城市车流调度辅助 等。

文章底部名片或主页私信获取数据集和系统~

1、数据概述

车牌识别的重要性

车牌是汽车的唯一法定标识,贯穿车辆行驶、停放、执法等全场景,其精准识别是交通管理、车辆溯源、安全防控的关键基础。但传统车牌检测存在明显短板:人工识别依赖人员肉眼观察,在路口排查、监控录像检索等场景中,不仅耗时耗力,还易受光线(夜间、逆光)、天气(雨雪、雾霾)、遮挡(污渍、树枝遮挡)影响,导致识别错漏;且人工处理难以应对大规模车流,如高峰时段路口车流密集时,无法实时完成每辆车的车牌记录,滞后性显著。​

YOLO 算法凭借 "实时检测 + 高鲁棒性" 的优势,精准破解上述难题:其一,可实现高帧率实时识别,无需人工干预就能快速捕捉画面中的车牌,即使车流密集也能稳定输出结果;其二,对复杂场景的适应性强,能有效克服光线变化、轻微遮挡带来的干扰,精准提取车牌字符信息,避免错识漏识;其三,检测过程端到端完成,可直接将车牌信息与车辆特征关联,为后续数据应用(如违法关联、出入登记)提供便捷,推动车辆管理从 "人工主导" 向 "智能自动化" 转型,是交通领域智能化升级的核心技术支撑。

基于YOLO的汽车车牌检测系统

  1. 交通违法精准执法:在路口、高速路段部署 YOLO 检测设备,可实时识别过往车辆车牌,同步关联闯红灯、超速、逆行等违法行为。一旦发现违法,系统自动记录车牌、时间、地点,生成完整违法证据链,无需人工蹲守取证,既提升执法效率,又避免执法人员现场执勤的安全风险,维护交通秩序。​

  2. 车辆溯源与安全防控:面对车辆失窃、肇事逃逸等案件,YOLO 可辅助快速检索海量监控录像中的目标车牌,大幅缩短溯源时间。同时,在机场、车站等重点区域,通过车牌检测可排查可疑车辆,提前预警安全风险,为公共安全防控提供技术支持。​

  3. 停车场智能管理:停车场入口无需人工登记,YOLO 自动识别入场车辆车牌,同步记录入场时间;出场时自动匹配车牌与停车时长,完成费用核算与放行,减少人工收费排队时间,提升车主通行体验,同时降低停车场人力成本,避免人工收费漏洞。​

  4. 物流与货运监管:货运场景中,YOLO 可结合物流园区、高速服务区的监控设备,实时识别货运车辆车牌,追踪车辆进出时间、行驶路线,辅助企业掌握货物运输进度,确保运输过程可追溯,避免货物错运、丢失,提升物流管理精度。​

  5. 城市车流调度辅助:通过多路口 YOLO 检测数据,可统计不同时段、路段的车流量(按车牌识别实现单车道车流计数),分析车流高峰区域与时段,为交通管理部门优化信号灯时长、规划限行路线提供数据依据,缓解城市交通拥堵。

该数据集含有 7811 张图片,包含Pascal VOC XML 格式和YOLO TXT 格式,用于训练和测试城市道路、工业园区、高速服务区、停车场等场景进行汽车车牌识别

图片格式为jpg格式,标注格式分别为:

YOLO:txt

VOC:xml

数据集均为手工标注,保证标注精确度。

2、数据集文件结构

car-plate/

------test/

------------Annotations/

------------images/

------------labels/

------train/

------------Annotations/

------------images/

------------labels/

------valid/

------------Annotations/

------------images/

------------labels/

------classes.txt

------data.yaml

  • 该数据集已划分训练集样本,分别是:test 目录(测试集)、train 目录(训练集)、valid目录(验证集);
  • Annotations文件夹为Pascal VOC格式的XML文件
  • images文件夹为jpg格式的数据样本;
  • labels文件夹是YOLO格式的TXT文件;
  • classes.txt是yolo格式的标签名称
  • data.yaml是数据集配置文件,包含汽车车牌检测的目标分类和加载路径。

​​

Annotations目录下的xml文件内容如下:

XML 复制代码
<?xml version="1.0" encoding="utf-8"?>
	<annotation>
		<folder>driving_annotation_dataset</folder>
		<filename>101149.jpg</filename>
		<size>
			<width>720</width>
			<height>1160</height>
			<depth>3</depth>
		</size>
		<object>
			<name>G</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>304</xmin>
				<ymin>503</ymin>
				<xmax>332</xmax>
				<ymax>547</ymax>
			</bndbox>
		</object>
		<object>
			<name>9</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>332</xmin>
				<ymin>504</ymin>
				<xmax>356</xmax>
				<ymax>549</ymax>
			</bndbox>
		</object>
		<object>
			<name>2</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>385</xmin>
				<ymin>506</ymin>
				<xmax>411</xmax>
				<ymax>553</ymax>
			</bndbox>
		</object>
		<object>
			<name>3</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>357</xmin>
				<ymin>504</ymin>
				<xmax>385</xmax>
				<ymax>550</ymax>
			</bndbox>
		</object>
		<object>
			<name>0</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>412</xmin>
				<ymin>507</ymin>
				<xmax>439</xmax>
				<ymax>554</ymax>
			</bndbox>
		</object>
		<object>
			<name>plate</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>211</xmin>
				<ymin>467</ymin>
				<xmax>480</xmax>
				<ymax>590</ymax>
			</bndbox>
		</object>
		<object>
			<name>皖</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>245</xmin>
				<ymin>501</ymin>
				<xmax>270</xmax>
				<ymax>545</ymax>
			</bndbox>
		</object>
		<object>
			<name>Q</name>
			<pose>Unspecified</pose>
			<truncated>0</truncated>
			<difficult>0</difficult>
			<bndbox>
				<xmin>270</xmin>
				<ymin>502</ymin>
				<xmax>295</xmax>
				<ymax>545</ymax>
			</bndbox>
		</object>
	</annotation>

labels目录下的txt文件内容如下:

bash 复制代码
34 0.45 0.4293103448275862 0.030555555555555558 0.034482758620689655
27 0.48125 0.43103448275862066 0.03194444444444445 0.03620689655172414
7 0.5444444444444445 0.43448275862068964 0.030555555555555558 0.034482758620689655
11 0.4076388888888889 0.4267241379310345 0.029166666666666667 0.034482758620689655
3 0.5125000000000001 0.4331896551724138 0.030555555555555558 0.0353448275862069
3 0.5756944444444445 0.43663793103448273 0.03194444444444445 0.03706896551724138
0 0.49375 0.43275862068965515 0.32083333333333336 0.08448275862068966
69 0.3770833333333333 0.425 0.034722222222222224 0.03620689655172414

3、数据集适用范围

  • 目标检测 场景,监控识别
  • yolo训练模型或其他模型
  • 城市道路、工业园区、高速服务区、停车场
  • 可用于交通违法精准执法、车辆溯源与安全防控、停车场智能管理、物流与货运监管、城市车流调度辅助等。

4、数据集标注结果

4.1、数据集内容

  1. 场景视角:监控视角数据样本
  2. 标注内容:names: ['plate', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '澳', '川', '鄂', '甘', '赣', '港', '贵', '桂', '黑', '沪', '吉', '冀', '津', '晋', '京', '警', '辽', '鲁', '蒙', '闽', '宁', '青', '琼', '陕', '苏', '皖', '湘', '新', '学', '渝', '豫', '粤', '云', '浙', '藏']​​​​​​​ ,总计70个分类;
  3. 图片总量:7811张图片数据;
  4. 标注类型:含有Pascal VOC XML 格式和yol o TXT格式;

5、训练过程

5.1、导入训练数据

下载YOLOv8项目压缩包,解压在任意本地workspace文件夹中。

下载YOLOv8预训练模型,导入到ultralytics-main项目根目录下。

​​​​​​

ultralytics-main 项目根目录下,创建data文件夹,并在data文件夹下创建子文件夹:Annotations、images、imageSets、labels, 其中,将pascal VOC格式的XML文件 手动导入到Annotations文件夹中,将JPG格式的图像数据导入到images文件夹中,imageSets和labels两个文件夹不导入数据。

data目录结构如下:

data/

------Annotations/ //存放xml文件

------images/ //存放jpg图像

------imageSets/

------labels/

整体项目结构如下所示:

​​​

5.2、数据分割

首先在ultralytics-main目录下创建一个split_train_val.py文件,运行文件之后会在imageSets文件夹下将数据集划分为训练集train.txt、验证集val.txt、测试集test.txt,里面存放的就是用于训练、验证、测试的图片名称。

python 复制代码
import os
import random

trainval_percent = 0.9
train_percent = 0.9
xmlfilepath = 'data/Annotations'
txtsavepath = 'data/ImageSets'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('data/ImageSets/trainval.txt', 'w')
ftest = open('data/ImageSets/test.txt', 'w')
ftrain = open('data/ImageSets/train.txt', 'w')
fval = open('data/ImageSets/val.txt', 'w')

for i in list:
    name = total_xml[i][:-4] + '\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()

5.3、数据集格式化处理

在ultralytics-main目录下创建一个voc_label.py文件,用于处理图像标注数据,将其从XML格式(通常用于Pascal VOC数据集)转换为YOLO格式。

convert_annotation函数

  • 这个函数读取一个图像的XML标注文件,将其转换为YOLO格式的文本文件。

  • 它打开XML文件,解析树结构,提取图像的宽度和高度。

  • 然后,它遍历每个目标对象(object),检查其类别是否在classes列表中,并忽略标注为困难(difficult)的对象。

  • 对于每个有效的对象,它提取边界框坐标,进行必要的越界修正,然后调用convert函数将坐标转换为YOLO格式。

  • 最后,它将类别ID和归一化后的边界框坐标写入一个新的文本文件

python 复制代码
import xml.etree.ElementTree as ET
import os
from os import getcwd

sets = ['train', 'val', 'test']
classes = ['plate', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '澳', '川', '鄂', '甘', '赣', '港', '贵', '桂', '黑', '沪', '吉', '冀', '津', '晋', '京', '警', '辽', '鲁', '蒙', '闽', '宁', '青', '琼', '陕', '苏', '皖', '湘', '新', '学', '渝', '豫', '粤', '云', '浙', '藏']​​​​​​​​​​​​​​ # 根据标签名称填写类别
abs_path = os.getcwd()
print(abs_path)


def convert(size, box):
    dw = 1. / (size[0])
    dh = 1. / (size[1])
    x = (box[0] + box[1]) / 2.0 - 1
    y = (box[2] + box[3]) / 2.0 - 1
    w = box[1] - box[0]
    h = box[3] - box[2]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return x, y, w, h


def convert_annotation(image_id):
    in_file = open('data/Annotations/%s.xml' % (image_id), encoding='UTF-8')
    out_file = open('data/labels/%s.txt' % (image_id), 'w')
    tree = ET.parse(in_file)
    root = tree.getroot()
    size = root.find('size')
    w = int(size.find('width').text)
    h = int(size.find('height').text)
    for obj in root.iter('object'):
        difficult = obj.find('difficult').text
        cls = obj.find('name').text
        if cls not in classes or int(difficult) == 1:
            continue
        cls_id = classes.index(cls)
        xmlbox = obj.find('bndbox')
        b = (float(xmlbox.find('xmin').text),
             float(xmlbox.find('xmax').text),
             float(xmlbox.find('ymin').text),
             float(xmlbox.find('ymax').text))
        b1, b2, b3, b4 = b
        # 标注越界修正
        if b2 > w:
            b2 = w
        if b4 > h:
            b4 = h
        b = (b1, b2, b3, b4)
        bb = convert((w, h), b)
        out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')


wd = getcwd()
for image_set in sets:
    if not os.path.exists('data/labels/'):
        os.makedirs('data/labels/')
    image_ids = open('data/ImageSets/%s.txt' % (image_set)).read().strip().split()
    list_file = open('data/%s.txt' % (image_set), 'w')
    for image_id in image_ids:
        list_file.write(abs_path + '/data/images/%s.jpg\n' % (image_id))
        convert_annotation(image_id)
    list_file.close()

5.4、修改数据集配置文件

在ultralytics-main目录下创建一个data.yaml文件

python 复制代码
train: data/train.txt
val: data/val.txt
test: data/test.txt

nc: 70
names: ['plate', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '澳', '川', '鄂', '甘', '赣', '港', '贵', '桂', '黑', '沪', '吉', '冀', '津', '晋', '京', '警', '辽', '鲁', '蒙', '闽', '宁', '青', '琼', '陕', '苏', '皖', '湘', '新', '学', '渝', '豫', '粤', '云', '浙', '藏']​​​​​​​

5.5、执行命令

执行train.py

python 复制代码
model = YOLO('yolov8s.pt')
results = model.train(data='data.yaml', epochs=200, imgsz=640, batch=16, workers=0)

也可以在终端执行下述命令:

bash 复制代码
yolo train data=data.yaml model=yolov8s.pt epochs=200 imgsz=640 batch=16 workers=0 device=0

5.6、模型预测

你可以选择新建predict.py预测脚本文件,输入视频流或者图像进行预测。

代码如下:

python 复制代码
import cv2
from ultralytics import YOLO

# Load the YOLOv8 model
model = YOLO("./best.pt") # 自定义预测模型加载路径

# Open the video file
video_path = "./demo.mp4" # 自定义预测视频路径
cap = cv2.VideoCapture(video_path) 

# Get the video properties
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # Be sure to use lower case
out = cv2.VideoWriter('./outputs.mp4', fourcc, fps, (frame_width, frame_height)) # 自定义输出视频路径

# Loop through the video frames
while cap.isOpened():
    # Read a frame from the video
    success, frame = cap.read()

    if success:
        # Run YOLOv8 inference on the frame
        # results = model(frame)
        results = model.predict(source=frame, save=True, imgsz=640, conf=0.5)

        results[0].names[0] = "道路积水"
        # Visualize the results on the frame
        annotated_frame = results[0].plot()

        # Write the annotated frame to the output file
        out.write(annotated_frame)

        # Display the annotated frame (optional)
        cv2.imshow("YOLOv8 Inference", annotated_frame)

        # Break the loop if 'q' is pressed
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break
    else:
        # Break the loop if the end of the video is reached
        break

# Release the video capture and writer objects
cap.release()
out.release()
cv2.destroyAllWindows()

图片推理,代码如下:

python 复制代码
import warnings

warnings.filterwarnings('ignore')
from ultralytics import YOLO

if __name__ == '__main__':
    model = YOLO('models/best.pt')
    model.predict(source='test_pic',
                  imgsz=640,
                  save=True,
                  conf=0.25
                  )

也可以直接在命令行窗口或者Annoconda终端输入以下命令进行模型预测:

python 复制代码
yolo predict model="best.pt" source='demo.jpg'

6、获取数据集

文章底部名片或主页私信获取数据集~

二、YOLO汽车车牌检测系统

1、功能介绍

1. 模型管理

支持自定义上传模型文件,一键加载所选模型,基于 YOLO 框架进行推理。

2. 图片检测

  • 支持上传本地图片文件,自动完成格式校验。

  • 对上传图片进行目标检测,检测结果以带有边框和标签的图片形式返回并展示。

  • 检测结果可下载保存。

3. 视频检测与实时流

  • 支持上传本地视频文件,自动完成格式校验。

  • 对视频逐帧检测,检测结果通过 MJPEG 流实时推送到前端页面,用户可边看边等。

  • 支持摄像头实时检测(如有接入摄像头)。

4. 置信度阈值调节

  • 前端可实时调整检测置信度阈值,动态影响检测结果。

  • 阈值调整后,后端推理自动应用新阈值,无需重启。

5. 日志与状态反馈

  • 前端集成日志区,实时显示模型加载、推理、文件上传等操作的进度与结果。

  • 检测异常、错误信息及时反馈,便于排查。

  • 一键清空日志,笔面长期占用内存。

​​​​

2、创建环境并安装依赖:

bash 复制代码
conda create -n ultralytics-env python=3.10
conda activate ultralytics-env
pip install -r requirements.txt

3、启动项目

bash 复制代码
python app.py

**打开浏览器访问:**http://localhost:5000

4、效果展示

4.1、推理效果

​​​​​​​ ​​​​​​​

4.2、日志文本框

4.3、摄像头检测

以红绿灯检测为例:

5、前端核心页面代码

html 复制代码
<!doctype html>
<html lang="zh-CN">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1">
    <title>视觉检测系统 - Web UI</title>
    <link rel="stylesheet" href="/static/style.css">
    <link rel="icon" href="/favicon.ico">
</head>

<body>
    <div class="container main-flex">
        <!-- 左侧内容区 -->
        <div class="left-content">
            <header>
                <h1>YOLO汽车车牌检测系统</h1>
                <div id="currentModelDisplay" class="modelDisplay" title="当前模型">当前模型:未上传模型</div>
            </header>
            <main>
                <div class="videoPanel">
                    <div class="pane">
                        <h3>原图 / 视频</h3>
                        <div class="preview" id="srcPreview">预览区</div>
                    </div>
                    <div class="pane">
                        <h3>检测结果</h3>
                        <div class="preview" id="detPreview">检测结果</div>
                    </div>
                </div>
                <section class="logArea">
                    <div class="logHeader">
                        <h3>日志</h3>
                    </div>
                    <div class="logInner">
                        <div id="logs" class="logs"></div>
                    </div>
                </section>
            </main>
        </div>
        <!-- 右侧按钮栏 -->
        <aside class="right-bar">
            <!-- 1. 模型上传/加载区 -->
            <section class="model-section">
                <button id="uploadModelBtn" class="ghost">上传模型
                    <input id="modelFileInput" type="file" accept=".pt" title="选择 .pt 模型文件">
                </button>
                <button id="loadModel">加载模型</button>
            </section>

            <!-- 2. 检测方式选择区 -->
            <section class="detect-mode-section">
                <div class="detect-mode-title">请选择检测方式</div>
                <div class="detect-mode-radio-group">
                    <label><input type="radio" name="detectMode" value="upload" checked> 图片/视频</label>
                    <label><input type="radio" name="detectMode" value="camera"> 摄像头</label>
                </div>
                <div id="detectModeUpload" class="detect-mode-panel">
                    <div class="uploaded-file-name">
                        <span id="uploadedFileName" class="placeholder">未选择文件</span>
                    </div>
                    <div style="height: 22px;"></div>
                    <button id="uploadBtn">上传文件
                        <input id="fileInput" type="file" accept="image/*,video/*" title="上传图片或视频" aria-label="上传图片或视频">
                    </button>
                </div>
                <div id="detectModeCamera" class="detect-mode-panel" style="display:none;">
                    <button id="cameraDetectBtn" class="ghost">开启摄像头</button>
                    <div id="cameraPreview" class="camera-preview">
                        <video id="localCameraVideo" autoplay muted playsinline></video>
                        <div class="camera-controls">
                            <button id="stopCameraBtn" class="ghost">关闭摄像头</button>
                        </div>
                    </div>
                </div>
                <div class="confWrap">
                    <label class="conf">置信度
                        <input id="confRange" type="range" min="0.01" max="0.99" step="0.01" value="0.5">
                        <input id="confValue" type="number" min="0.01" max="0.99" step="0.01" value="0.5">
                    </label>
                </div>
            </section>

            <!-- 3. 操作按钮区 -->
            <section class="action-btn-section">
                <button id="startBtn" disabled class="start">开始检测</button>
                <button id="stopBtn" disabled class="stop">停止</button>
                <button id="clearLogs" class="ghost">清空日志</button>
            </section>
        </aside>
    </div>
    <script src="/static/app.js"></script>
</body>

</html>

6、代码获取

文章底部名片或私信获取系统源码和数据集~

更多数据集请查看

以上内容均为原创。

相关推荐
IT_陈寒2 小时前
JavaScript 性能优化实战:我从 V8 源码中学到的 7 个关键技巧
前端·人工智能·后端
大千AI助手2 小时前
决策树悲观错误剪枝(PEP)详解:原理、实现与应用
人工智能·算法·决策树·机器学习·剪枝·大千ai助手·悲观错误剪枝
慕云紫英2 小时前
面向AI的课堂改革(南京大学 陈道蓄教授)
人工智能·aigc·教育
汗流浃背了吧,老弟!2 小时前
基于OpenAI与DashScope的AI知识面试模拟系统实现
人工智能·语言模型
长桥夜波2 小时前
机器学习日报13
人工智能·机器学习
sensen_kiss2 小时前
INT305 Machine Learning 机器学习 Pt.8 Bagging 和 Boosting
人工智能·机器学习·boosting
艾莉丝努力练剑2 小时前
【Linux基础开发工具 (二)】详解Linux文本编辑器:Vim从入门到精通——完整教程与实战指南(上)
linux·运维·服务器·人工智能·ubuntu·centos·vim
我的世界伊若4 小时前
AI重塑IT职场:挑战与机遇并存
人工智能
lapiii3584 小时前
[智能体设计模式] 第4章:反思(Reflection)
人工智能·python·设计模式