基于PP-YOLOv2的火灾/烟雾检测

据统计,2020年全国共接报火灾74.8万起,直接财产损失高达67.5亿元。火灾已经成为危害人们生命财产安全的一种多发性灾害。基于PaddleX实现火灾、烟雾检测,并探索模型的优化历程。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

基于pp-yolov2的火灾/烟雾检测 - 创想鸟

1 项目说明

据统计,2021年全国共接报火灾74.8万起,直接财产损失高达67.5亿元。火灾已经成为危害人们生命财产安全的一种多发性灾害。

针对住宅、加油站、公路、森林等火灾高发场景,应用飞桨PaddleX的目标检测技术,可以自动检测监控区域内的烟雾和火灾,帮助相关人员及时应对,最大程度降低人员伤亡及财物损失,模型效果如图所示。

基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

希望通过梳理优化模型精度和性能的思路能帮助用户更高效地解决实际火灾和烟雾检测应用中的问题。开放烟雾和火灾数据和预训练模型,并提供服务器Serving和Jetson NX边缘侧芯片的部署指南。

方案难点:

推理速度要求高: 在烟雾和火灾检测场景,希望模型能在火情发生的第一时间即做出响应,对模型推理速度有较高的要求;干扰样本多,容易造成误检: 生活中有很多物体和烟火是非常接近的,很难区分(比如:云朵、红色的灯光等),容易造成模型误检。

注:本地、服务器运行代码下载和使用教程请参考火灾烟雾检测

2 安装说明

环境要求

PaddlePaddle >= 2.1.0Python >= 3.5PaddleX >= 2.0.0

安装的相关问题参考PaddleX安装

下载PaddleX源码

本项目中已经帮大家下载好了最新版的PaddleX,无需下载,只需安装环境~

如仍需安装or安装更新,可以执行以下步骤

In [1]

# 项目已提供PaddlePaddleX,无需执行此步骤# !git clone https://github.com/PaddlePaddle/PaddleX.git -b develop

In [ ]

!unzip -q PaddleX.zip

In [1]

# 安装环境%cd /home/aistudio/PaddleX!git checkout develop!pip install -r requirements.txt!python setup.py install

3 数据准备

本案例使用数据集包含MIT协议互联网下载图片和MIT协议公开数据集,共有6675张图片,分别检测烟雾和火灾,示例图片如下图所示:

基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

数据集图片格式是VOC数据格式,VOC数据是每个图像文件对应一个同名的xml文件,xml文件内包含对应图片的基本信息,比如文件名、来源、图像尺寸以及图像中包含的物体区域信息和类别信息等。

xml文件中包含以下字段:

filename,表示图像名称。

size,表示图像尺寸。包括:图像宽度、图像高度、图像深度。

    500    375    3

object字段,表示每个物体。包括:

标签 说明

name物体类别名称pose关于目标物体姿态描述(非必须字段)truncated如果物体的遮挡超过15-20%并且位于边界框之外,请标记为truncated(非必须字段)difficult难以识别的物体标记为difficult(非必须字段)bndbox子标签(xmin,ymin) 左上角坐标,(xmax,ymax) 右下角坐标,

将这6675张图片按9:1比例随机切分,切分后包含6008张图片的训练集和667张图片的验证集,提供处理好的数据集,下载地址。包含以下文件夹和文件:images,annotations,labels.txt, train_list.txt和 val_list.txt,分别图片、xml标注文件、存储类别信息、训练样本列表、验证样本列表。训练样本列表和验证样本列表的每一行格式为:图片路径 对应的xml路径,例如images/fire_00348.jpg annotations/fire_00348.xml。

数据处理命令如下,执行一次即可。

In [3]

# 第一次运行项目执行即可!mkdir /home/aistudio/dataset/%cd /home/aistudio/dataset/!mv /home/aistudio/data/data107770/train_list.txt ./!mv /home/aistudio/data/data107770/val_list.txt ./!mv /home/aistudio/data/data107770/labels.txt ./!unzip -q /home/aistudio/data/data107770/images.zip -d ./!unzip -q /home/aistudio/data/data107770/annotations.zip -d ./%cd ..

最终数据集文件组织结构为:

 ├── dataset├── annotations  │   ├── fire_000001.xml  │   ├── fire_000002.xml  │   ├── fire_000003.xml  │   |   ...  ├── images  │   ├── fire_000001.jpg  │   ├── fire_000003.jpg  │   ├── fire_000003.jpg  │   |   ...  ├── label_list.txt  ├── train.txt  └── valid.txt

4.模型选择

PaddleX提供了5种目标检测模型:FasterRCNN、YOLOv3、PP-YOLO、PP-YOLOv2和PP-YOLO-tiny。

Faster RCNN:Ross B. Girshick在2016年提出了新的FasterRCNN,需要先产生候选区域,再对RoI做分类和位置坐标的预测,这类算法被称为两阶段目标检测算法。在结构上,Faster RCNN已经将特征抽取(feature extraction),proposal提取,bounding box regression(rect refine),classification都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。

YOLOv3:Joseph Redmon等人在2015年提出YOLO(You Only Look Once,YOLO)算法,通常也被称为YOLOv1;2016年,他们对算法进行改进,又提出YOLOv2版本;2018年发展出YOLOv3版本。YOLOv3使用单个网络结构,在产生候选区域的同时即可预测出物体类别和位置,这类算法被称为单阶段目标检测算法。另外,YOLOv3算法产生的预测框数目比Faster R-CNN少很多。Faster R-CNN中每个真实框可能对应多个标签为正的候选区域,而YOLOv3里面每个真实框只对应一个正的候选区域。这些特性使得YOLOv3算法具有更快的速度,能到达实时响应的水平。

PP-YOLO:PP-YOLO是PaddleDetection优化和改进的YOLOv3的模型,在COCO test-dev2017数据集上精度达到45.9%,在单卡V100上FP32推理速度为72.9 FPS,V100上开启TensorRT下FP16推理速度为155.6 FPS。PP-YOLO从如下方面优化:

更优的骨干网络: ResNet50vd-DCN更大的训练batch size: 8 GPUs,每GPU batch_size=24,对应调整学习率和迭代轮数Drop BlockExponential Moving AverageIoU LossGrid SensitiveMatrix NMSCoordConvSpatial Pyramid Pooling更优的预训练模型

PP-YOLOv2:相较20年发布的PP-YOLO,PP-YOLOv2版本在COCO 2017 test-dev上的精度提升了3.6个百分点,由45.9%提升到了49.5%;在640*640的输入尺寸下,FPS达到68.9FPS。 主要改进点:

Path Aggregation NetworkMish Activation FunctionLarger Input SizeIoU Aware Branch

PP-YOLO-tiny:在当前移动互联网、物联网、车联网等行业迅猛发展的背景下,边缘设备上直接部署目标检测的需求越来越旺盛。生产线上往往需要在极低硬件成本的硬件例如树莓派、FPGA、K210 等芯片上部署目标检测算法。而我们常用的手机 App,也很难直接在终端采用超过 6M 的深度学习算法。如何在尽量不损失精度的前提下,获得体积更小、运算速度更快的算法呢?得益于 PaddleSlim 飞桨模型压缩工具的能力,体积仅为 1.3M 的 PP-YOLO-tiny 诞生了!PP-YOLO-tiny 沿用了 PP-YOLO 系列模型的 spp,iou loss, drop block, mixup, sync bn 等优化方法,并进一步采用了针对移动端的优化策略:

更适用于移动端的骨干网络:MobileNetV3更适用移动端的检测头(head):深度可分离卷积去除对模型体积、速度有显著影响的优化策略:iou aware、matrix NMS等使用更小的输入尺寸召回率优化更大的batch size量化后压缩

根据部署场景以及烟火检测实时性、高召回低误检要求,这里我们选择了PP-YOLOv2算法进行火灾和烟雾检测。

5 模型训练

本项目采用PP-YOLOv2作为烟火检测的模型,模型训练需要经过如下环节:

基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

具体代码请参考train.py,可修改参数:

train_transforms:训练预处理参数,可以增加、修改预处理方法和参数;eval_transforms:验证预处理参数,可以增加、修改预处理方法和参数;train_dataset:训练使用数据集,修改图片路径、标签路径以及是否进行数据shuffle;eval_dataset:验证使用数据集,修改图片路径、标签路径以及是否进行数据shuffle;pdx.models.*:设置不同的模型,可选[FasterRCNN、YOLOv3、PP-YOLO、PP-YOLO-tiny、PP-YOLOv2],这里选择PP-YOLOv2;model.train:设置训练epoch、训练和验证数据集、batch size、学习率learning rate、warmup step、lr衰减lr_decay_epoch、模型保存间隔save_interval_epoch、模型保存路径save_dir,详细介绍训练参数。

PaddleX提供了单卡/多卡训练模型,满足用户多种训练需求:

In [2]

%cd /home/aistudio/code/
/home/aistudio/code

In [3]

# GPU单卡训练%cd /home/aistudio/code/# 可以在code文件夹内选择不同的训练文件进行训练,每个文件使用的策略参考本项目10.3小节!export CUDA_VISIBLE_DEVICES=0!python 1.train_ppyolov2_imagenet.py# GPU多卡训练,例如使用2张卡时执行:# export CUDA_VISIBLE_DEVICES=0,1 #windows和Mac下不需要执行该命令# python -m paddle.distributed.launch --gpus 0,1 1.train_ppyolov2_imagenet.py

6 模型评估

因为采用多个数据集一起训练,每个数据集标注方式不同,如下图左数据集A将火标注为一个检测框,但是下图右数据集B又将火标注为多个检测框。

基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

不同的标注方式就导致训练好的模型,无法有效的计算mAP值。我们可以通过下图从两方面分析:

蓝色框表示真实标注框,可以看出有很多小检测框。实际评估时,火灾只有2个绿色检测框,能正确检测火灾,但没能和真实框一一对应,如果使用mAP作为指标,就不能正确反映检测效果。有些数据集没标注烟雾,但是可以检测到烟雾,同样mAP也不能正确反映检测效果。基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

综上,我们计算不同置信度阈值下图片级召回率和图片级误检率,找到符合要求的召回率和误检率,对应的置信度阈值用于后续模型预测阶段。使用PP-YOLOv2训练好的模型进行评估,评估数据暂未公开,大家可以按照下面步骤准备数据集:

1)新建文件夹eval_imgs

In [6]

!mkdir /home/aistudio/dataset/eval_imgs/

2)准备包含火灾和烟雾的图片,放在eval_imgs/fire_smoke

In [7]

!mkdir /home/aistudio/dataset/eval_imgs/fire_smoke/

准备负样本:不包含火灾和烟雾的图片,尽量选择和当前场景相似的图片,放在eval_imgs/neg_picsIn [8]

!mkdir /home/aistudio/dataset/eval_imgs/neg_pics/

4)生成图片列表TXT文件,正样本标签为1,负样本标签为0,格式如下:

fire_smoke/00001.jpg 1fire_smoke/00002.jpg 1...neg_pics/00001.jpg 0

代码实现:

In [9]

!python gen_txt.py

In [10]

# 评估数据未公开,按上面步骤准备好验证集,即可以执行该命令!python metric.py

得到PP-YOLOv2烟雾和火灾检测指标,召回相对达到预期,但是召回比较高,后续我们将一起探究如何降低误检率:

模型 召回率/% 误检率/%

PP-YOLOv2+ResNet5095.123.22

【名词解释】

图片级别的召回率:只要在有目标的图片上检测出目标(不论框的个数),该图片被认为召回。批量有目标图片中被召回图片所占的比例,即为图片级别的召回率。图片级别的误检率:只要在无目标的图片上检测出目标(不论框的个数),该图片被认为误检。批量无目标图片中被误检图片所占的比例,即为图片级别的误检率。

7 模型预测

加载训练好的模型,置信度阈值设置为0.4,执行下行命令对验证集或测试集图片进行预测:

In [3]

# 模型路径、测试图片路径、结果保存路径、阈值可在predict.py文件内修改# 如果报错可以检查模型路径等是否正确!python predict.py

可视化预测结果示例如下,可以看出室内的火灾也可以有效检测出来:

基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

注:图片来源于互联网,侵权删稿

8 模型导出

在模型训练过程中保存的模型文件是包含前向预测和反向传播的过程,在实际的工业部署则不需要反向传播,因此需要将模型进行导成部署需要的模型格式。 执行下面命令,即可导出模型

In [12]

# 根据具体使用的训练文件,修改模型路径model_dir!paddlex --export_inference --model_dir=/home/aistudio/code/output/ppyolov2_r50vd_dcn/best_model/ --save_dir=/home/aistudio/code/inference_model

预测模型会导出到inference_model/目录下,包括model.pdmodel、model.pdiparams、model.pdiparams.info、model.yml和pipeline.yml五个文件,分别表示模型的网络结构、模型权重、模型权重名称、模型的配置文件(包括数据预处理参数等)和可用于PaddleX Manufacture SDK的流程配置文件。

更多关于模型导出的文档,请参考模型导出文档

9 模型推理

接下来使用PaddleX python高性能预测接口,在终端输入以下代码即可,同时可以通过以下代码进行速度预测:

In [13]

!python infer.py

关于预测速度的说明:加载模型后,前几张图片的预测速度会较慢,这是因为运行启动时涉及到内存显存初始化等步骤,通常在预测20-30张图片后模型的预测速度达到稳定。如果需要评估预测速度,可通过指定预热轮数warmup_iters完成预热。为获得更加精准的预测速度,可指定repeats重复预测后取时间平均值。

10 模型优化

本小节侧重展示在模型迭代过程中优化精度的思路,在本案例中,有些优化策略获得了精度收益,而有些没有。在其他质检场景中,可根据实际情况尝试这些优化策略,具体请参考模型优化文档

10.1 模型优化策略

修改图片尺寸:数据处理时,可修改target_size为480、608、640等

数据增强:数据处理时,使用不同的预处理、增强方法组合,包含:RandomHorizontalFlip、RandomDistort 、 RandomCrop 、RandomExpand、MixupImage等,详细解释请参考图像预处理/增强

不同模型:单阶段(YOLOv3、PP-YOLO、PP-YOLOv2等)

不同backbone:ResNet50、ResNet101、DarkNet53、MobileNet3,具体每个模型可选参数,可参考检测模型文件每个模型的backbone,如YOLOV3,就表示这些模型可以作为YOLOV3的backbone:

    if backbone not in [            'MobileNetV1', 'MobileNetV1_ssld', 'MobileNetV3',            'MobileNetV3_ssld', 'DarkNet53', 'ResNet50_vd_dcn', 'ResNet34'    ]:

是否加DCN(Deformable Convolution Network,可变形卷积):FasterRCNN通过设置with_dcn=True使用可变性卷积

加入背景图片:当误检较高时,可以考虑使用add_negative_samplesAPI加入背景图片作为负样本进行训练,只需一行代码即可,image_dir表示负样本路径:

train_dataset.add_negative_samples(image_dir=’/home/aistudio/dataset/train_neg’)

训练参数调整

10.2 推理时间计算方式

采用PaddleX在单卡Tesla V100上测试模型的推理时间(输入数据拷贝至GPU的时间、计算时间、数据拷贝至CPU的时间),推理时间取100次推理取平均耗时,即9 模型推理repeats参数设置为100。

10.3 不同模型结果

我们可以运行code文件夹下的训练文件,进行不同模型的训练,文件名的第一个数字和下表的序号相对应。

序号 模型 推理时间(FPS) Recall Error Rate

1PP-YOLOv2+ResNet50+ImageNet预训练(Baseline)2495.123.222PP-YOLOv2+ResNet50+ImageNet预训练+aug-94.114.93PP-YOLOv2+ResNet50+COCO预训练-97.428.64PP-YOLOv2+ResNet50+COCO预训练+aug-96.311.15PP-YOLOv2+ResNet50+COCO预训练+aug+SPP=False-9613.216PP-YOLOv2+ResNet50+aug+COCO预训练+背景图23.693.91.17PP-YOLOv2+ResNet101+aug+COCO预训练+背景图21962.28PP-YOLO+ResNet50+COCO预训练+aug2090.08.819YOLOv3+DarkNet53+COCO预训练+img_size(640)2188.46.01

说明:

从表1的实验结论中可以发现,有些优化策略在精度优化上起到了正向结果,有些策略则相反。这些结论在不同的模型和不同的数据集上并不是相通的,还需根据具体情况验证。

本实验未提供”背景图”数据集(包含5116张图片),大家自行选择不包含的烟雾和火灾的数据作为负样本即可。

模型优化思路:

1.通过选择更好的检测架构可以提高检测的Recall值——即Neck,Head部分的优化可以提高Recall。2.添加数据增强、背景图可以降低误检率。3.在数据量比较少的情况下,可以增加预训练模型。

通过以上的简单优化方式,获取了两个较好的模型结果:【前者模型速度更快、后者召回更高】

模型 推理时间(FPS) Recall Error Rate

PP-YOLOv2+ResNet50+aug+COCO预训练+SPP+背景图23.693.91.1PP-YOLOv2+ResNet101+aug+COCO预训练+SPP+背景图21962.2

11 模型部署

在项目中为用户提供了基于Jetson NX的部署Demo方案,支持用户输入单张图片、文件夹、视频流进行预测。用户可根据实际情况自行参考。

基于PP-YOLOv2的火灾/烟雾检测 - 创想鸟

部署方式可以参考:兼容并包的PaddleX-Inference部署方式和基于QT的Jetson Xavier部署Demo。

以上就是基于PP-YOLOv2的火灾/烟雾检测的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/68105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
盘点国内外主流的15款员工绩效考核系统
上一篇 2025年11月12日 16:26:44
振华LEADEX VII对决海韵PRIME TX-1000:白金认证电源的纹波抑制与静音效果,谁能为高端硬件提供最纯净的电流?
下一篇 2025年11月12日 16:28:29

相关推荐

  • composer require-dev和require有什么不同_Composer Require与Require-Dev区别解析

    require用于声明项目运行必需的依赖,如框架、数据库组件和第三方SDK,这些包会随项目部署到生产环境;2. require-dev用于声明仅在开发和测试阶段需要的工具,如PHPUnit、PHPStan、Faker等,不会默认部署到生产环境;3. 安装时composer install根据环境决定…

    2026年5月10日
    1000
  • 开源免费PHP工具 PHP开发效率提升利器

    推荐开源免费PHP开发工具以提升效率:VS Code、Sublime Text轻量高效,PhpStorm专业强大;调试用Xdebug、Kint、Ray;依赖管理选Composer;代码质量工具包括PHPStan、Psalm、PHP_CodeSniffer;数据库管理可用%ignore_a_1%MyA…

    2026年5月10日
    000
  • Matplotlib 地图中多类型图例的创建与优化

    Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化Matplotlib 地图中多类型图例的创建与优化

    本教程旨在解决matplotlib地图可视化中,如何在一个图例中同时展示颜色块(如区域分类)和自定义标记(如特定兴趣点)的问题。文章详细介绍了当传统`patch`对象无法正确显示标记时,如何利用`matplotlib.lines.line2d`创建标记图例句柄,并将其与颜色块图例句柄合并,从而生成一…

    2026年5月10日 用户投稿
    100
  • Golang JSON序列化:控制敏感字段暴露的最佳实践

    本教程探讨golang中如何高效控制结构体字段在json序列化时的可见性。当需要将包含敏感信息的结构体数组转换为json响应时,通过利用`encoding/json`包提供的结构体标签,特别是`json:”-“`,可以轻松实现对特定字段的忽略,从而避免敏感数据泄露,确保api…

    2026年5月10日
    000
  • 利用海象运算符简化条件赋值:Python教程与最佳实践

    本文旨在探讨Python中海象运算符(:=)在条件赋值场景下的应用。通过对比传统if/else语句与海象运算符,以及条件表达式,分析海象运算符在简化代码、提高可读性方面的优势与局限性。并通过具体示例,展示如何在列表推导式等场景下合理使用海象运算符,同时强调其潜在的复杂性及替代方案,帮助开发者更好地掌…

    2026年5月10日
    100
  • Debian syslog性能优化技巧有哪些

    提升Debian系统syslog (通常基于rsyslog)性能,关键在于精简配置和高效处理日志。以下策略能有效优化日志管理,提升系统整体性能: 精简配置,高效加载: 在rsyslog配置文件中,仅加载必要的输入、输出和解析模块。 使用全局指令设置日志级别和格式,避免不必要的处理。 自定义模板: 创…

    2026年5月10日
    000
  • 怎么在PHP代码中实现图片上传功能_PHP图片上传功能实现与安全处理教程

    首先创建含enctype的HTML表单,再用PHP接收文件,检查目录、移动临时文件,验证类型与大小,生成唯一文件名,并调整php.ini限制以确保上传成功。 如果您尝试在PHP项目中添加图片上传功能,但服务器无法正确接收或保存文件,则可能是由于表单配置、文件处理逻辑或安全限制的问题。以下是实现该功能…

    2026年5月10日
    100
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,P2P交易获得比特币,常用平台包括Binance、OKX和Huobi;交易流程包括注册账户、实名认证、绑定支付方式、充值法币并下单购买,可选择市价单或限价单;比特币存储方式有交易…

    2026年5月10日
    000
  • c++中的SFINAE技术是什么_c++模板编程中的SFINAE原理与应用

    SFINAE 是“替换失败不是错误”的原则,指模板实例化时若参数替换导致错误,只要存在其他合法候选,编译器不报错而是继续重载决议。它用于条件启用模板、类型检测等场景,如通过 decltype 或 enable_if 控制函数重载,实现类型特征判断。尽管 C++20 引入 Concepts 简化了部分…

    2026年5月10日
    000
  • Go语言mgo查询构建:深入理解bson.M与日期范围查询的正确实践

    本文旨在解决go语言mgo库中构建复杂查询时,特别是涉及嵌套`bson.m`和日期范围筛选的常见错误。我们将深入剖析`bson.m`的类型特性,解释为何直接索引`interface{}`会导致“invalid operation”错误,并提供一种推荐的、结构清晰的代码重构方案,以确保查询条件能够正确…

    2026年5月10日
    100
  • RichHandler与Rich Progress集成:解决显示冲突的教程

    在使用rich库的`richhandler`进行日志输出并同时使用`progress`组件时,可能会遇到显示错乱或溢出问题。这通常是由于为`richhandler`和`progress`分别创建了独立的`console`实例导致的。解决方案是确保日志处理器和进度条组件共享同一个`console`实例…

    2026年5月10日
    000
  • Golang goroutine与channel调试技巧

    使用go run -race检测数据竞争,结合runtime.NumGoroutine监控协程数量,通过pprof分析阻塞调用栈,利用select超时避免永久阻塞,有效排查goroutine泄漏、死锁和数据竞争问题。 Go语言的goroutine和channel是并发编程的核心,但它们也带来了调试上…

    2026年5月10日
    000
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 《魔兽世界》将于6月11日开启国服回归技术测试

    《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试《魔兽世界》将于6月11日开启国服回归技术测试

    《%ign%ignore_a_1%re_a_1%》官方宣布,将于6月11日开启国服回归技术测试,时间为7天,并称可以在6月内正式开服,玩家们可以访问官网下载战网客户端并预下载“巫妖王之怒”客户端,技术测试详情见下图。 WordAi WordAI是一个AI驱动的内容重写平台 53 查看详情 以上就是《…

    2026年5月10日 用户投稿
    200
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100
  • 网站标题关键词更新后,搜索引擎为何仍显示旧标题?

    网站标题更新后,搜索引擎为何显示旧标题? 网站SEO优化中,站长常修改网站标题关键词,期望搜索结果显示自定义标题。然而,即使更新标签、meta keywords、meta description和结构化数据中的name属性后,搜索结果仍显示旧标题,这令人费解。本文将对此进行解释。 问题:站长修改了网…

    2026年5月10日
    100
  • 创建指定大小并填充特定数据的Golang文件教程

    本文将介绍如何使用Golang创建一个指定大小的文件,并用特定数据填充它。我们将使用 `os` 包提供的函数来创建和截断文件,从而实现快速生成大文件的目的。示例代码展示了如何创建一个10MB的文件,并将其填充为全零数据。掌握这些方法,可以方便地在例如日志系统或磁盘队列等场景中,预先创建测试文件或初始…

    2026年5月10日
    000
  • Python命令怎样使用profile分析脚本性能 Python命令性能分析的基础教程

    使用Python的cProfile模块分析脚本性能最直接的方式是通过命令行执行python -m cProfile your_script.py,它会输出每个函数的调用次数、总耗时、累积耗时等关键指标,帮助定位性能瓶颈;为进一步分析,可将结果保存为文件python -m cProfile -o ou…

    2026年5月10日
    000
  • 使用 WebCodecs VideoDecoder 实现精确逐帧回退

    本文档旨在解决在使用 WebCodecs VideoDecoder 进行视频解码时,实现精确逐帧回退的问题。通过比较帧的时间戳与目标帧的时间戳,可以避免渲染中间帧,从而提高用户体验。本文将提供详细的解决方案和示例代码,帮助开发者实现精确的视频帧控制。 在使用 WebCodecs VideoDecod…

    2026年5月10日
    000
  • 如何插入查询结果数据_SQL插入Select查询结果方法

    如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法如何插入查询结果数据_SQL插入Select查询结果方法

    使用INSERT INTO…SELECT语句可高效插入数据,通过NOT EXISTS、LEFT JOIN、MERGE语句或唯一约束避免重复;表结构不一致时可通过别名、类型转换、默认值或计算字段处理;结合存储过程可提升可维护性,支持参数化与动态SQL。 将查询结果数据插入到另一个表中,可以…

    2026年5月10日 用户投稿
    000

发表回复

登录后才能评论
关注微信