【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计

【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计

本地演示视频(手机版貌似看不到,在codelab里也没法直接看到,只有网页版的项目预览可以看到)

       

视频传送门

gitee仓库

一、项目背景

社区是城市的关键组成部分,社区治理是围绕社区场景下的人、地、物、情、事的管理与服务。

随着城市化的快速推进及人口流动的快速增加,传统社区治理在人员出入管控、安防巡逻、车辆停放管理等典型场景下都面临着人力不足、效率低下、响应不及时等诸多难题。而人工智能技术代替人力,实现人、车、事的精准治理,大幅降低人力、物质、时间等成本,以最低成本发挥最强大的管理效能,有效推动城市治理向更“数字化、自动化、智慧化”的方向演进。

传统社区视频监控80%都依靠人工实现,随着摄像头在社区中的大规模普及,日超千兆的视频图像数据、人员信息的日渐繁杂已远超人工的负荷。

1.1 技术实现

为解决以上问题,我们灵活应用飞桨行人分析PP-Human中的行人检测和属性分析模型,实时识别行人的性别、年龄、衣着打扮等26种属性并记录统计。

其中,属性分析包含26种不同属性:

- 性别:男、女- 年龄:小于18、18-60、大于60- 朝向:朝前、朝后、侧面- 配饰:眼镜、帽子、无- 正面持物:是、否- 包:双肩包、dan肩包、shou提包- 上衣风格:带条纹、带logo、带格子、拼接风格- 下装风格:带条纹、带图案- 短袖上衣:是、否- 长袖上衣:是、否- 长外套:是、否- 长裤:是、否- 短裤:是、否- 短裙&裙子:是、否- 穿靴:是、否

       【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计 - 创想鸟
街道人员属性识别

PP-Human是基于飞桨深度学习框架的业界首个开源的实时行人分析工具,具有功能丰富,应用广泛和部署高效三大优势。PP-Human 支持图片/单镜头视频/多镜头视频多种输入方式,功能覆盖多目标跟踪、属性识别和行为分析。能够广泛应用于智慧交通、智慧社区、工业巡检等领域。支持服务器端部署及TensorRT加速,T4服务器上可达到实时。

【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计 - 创想鸟        

详细文档可参考:https://github.com/PaddlePaddle/PaddleDetection/tree/develop/deploy/pphuman

1.2 技术方案

在本项目中,我们基于PP-HUMAN实现一套行人客流和人员属性统计系统,可以通过数据库查询,有可视化统计页面。

【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计 - 创想鸟        

1.2.1.识别:使用PP-HUMAN的行人属性检测方案,对于视频流的行人属性识别需要用到MOT(多目标跟踪)模型和ATTR(行人属性识别)模型,由MOT模型识别并跟踪行人,由ATTR模型进行多分类识别行人属性。

1.2.2.后端:

Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。(百度百科) 总而言之flask用python编写,对于技术栈还不够全面和足够熟练的新手小队实现起来方便一些。

1.2.3.前端:

1.2.3.1.Ajax:

Asynchronous Javascript And XML(异步JavaScript和XML)是一种web数据交互方式,使用Ajax技术网页应用能够快速地将增量更新呈现在用户界面上,而不需要重载(刷新)整个页面,这使得程序能够更快地回应用户的操作。用来实时刷新数据。

1.2.3.2.ECharts:

ECharts是一款基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表。

1.2.4.数据库:

SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。技术成熟、资源占用少并且可以直接在python中import直接使用,有SQL知识基础的小伙伴上手很快。

1.3 数据集介绍

PETA (PEdesTrian Attribute)数据集包含了8705个行人,共19000张图像(分辨率跨度范围大,从17×39到169×365的大小都有)。每个行人标注了61个二值的和4个多类别的属性。

二、配置运行环境

环境要求: PaddleDetection版本 >= release/2.4 或 develop

通过以下命令获取PaddleDetection套件代码

git clone https://gitee.com/paddlepaddle/PaddleDetection.git

       在这个项目中,我们预先准备了项目代码的压缩包,可以通过直接解压代替git clone的过程。In [ ]

%cd /home/aistudio/# 克隆PaddleDetection仓库# !git clone https://gitee.com/paddlepaddle/PaddleDetection.git!unzip PaddleDetection.zip

   In [ ]

# 安装其他依赖%cd PaddleDetection!pip install -r requirements.txt

   In [ ]

# 可选,安装paddledet!python setup.py install

   

更换为修改过的pphuman文件夹

该zip中包含flask后端代码app.py、前端数据可视化代码index.html、前端js库以及整合适配后的推理相关代码。

In [ ]

#更换为修改过的pphuman文件夹!rm -rf /home/aistudio/PaddleDetection/deploy/pphuman!unzip /home/aistudio/pphuman.zip -d /home/aistudio/PaddleDetection/deploy/pphuman

   

三、如何构建模型

PPHuman中实现整个行人分析的工具和部署流程,包括检测、多目标跟踪、跨镜头跟踪、关键点检测、行为识别等多个模块。在这一部分中, 我们以关键点模型为例,展示将dark_hrnet_w32_256x192这一个模型从训练到导出至部署可用的模型的全流程。详细细节可以参考我们的Github文档。

3.1 模型训练

训练模型主要包括准备训练数据以及启动训练命令,可以按照下面的命令执行。

这里由于完整COCO数据集的训练耗时较长,我们准备了一个样例数据集,供执行流程参考使用。

In [ ]

# 准备我们的样例训练数据%cd /home/aistudio/PaddleDetection/!wget https://bj.bcebos.com/v1/paddledet/data/keypoint/coco_val_person_mini.tar!tar -xf coco_val_person_mini.tar -C ./dataset/!mv ./dataset/coco_val_person_mini/* ./dataset/coco!cp ./dataset/coco/annotations/instances_train2017.json ./dataset/coco/annotations/person_keypoints_train2017.json!cp ./dataset/coco/annotations/instances_val2017.json ./dataset/coco/annotations/person_keypoints_val2017.json

   In [ ]

#训练模型, 如果是CPU环境,请加上 -o use_gpu=False%cd /home/aistudio/PaddleDetection/!python tools/train.py -c configs/keypoint/hrnet/dark_hrnet_w32_256x192.yml

   

完成训练后,我们的模型默认保存在output/dark_hrnet_w32_256x192/。

3.2 模型评估

在训练模型以后,我们可以通过运行评估命令来得到模型的精度,以确认训练的效果。评估可以参考以下命令执行。

这里使用了我们已经训练好的模型。如希望使用自己训练的模型,请对应将weights=后的值更改为对应模型.pdparams文件的存储路径。

In [ ]

!python tools/eval.py -c configs/keypoint/hrnet/dark_hrnet_w32_256x192.yml   -o weights=https://paddledet.bj.bcebos.com/models/keypoint/dark_hrnet_w32_256x192.pdparams

   

3.3 模型导出

.pdparams只包括了模型的参数数据,实际部署还需要执行导出步骤。导出步骤可以参考下面列举的步骤:

注意,这里使用了我们已经训练好的模型。如希望使用自己训练的模型,请对应将weights=后的值更改为对应模型.pdparams文件的存储路径。如果没有指定–output_dir,那么导出的模型将默认存储在output_inference/路径下。

In [ ]

!python tools/export_model.py -c configs/keypoint/hrnet/dark_hrnet_w32_256x192.yml   --output_dir inference_models/   -o weights=https://paddledet.bj.bcebos.com/models/keypoint/dark_hrnet_w32_256x192.pdparams

   

至此,我们就完成了关键点模型的从训练到导出的过程。可以用于PPhuman的实际部署中了。

参考以上步骤,在我们PaddleDetection套件中,除了关键点检测以外,同样可以实现检测、跟踪模型的训练、评估及导出使用。

3.4 行为识别模型

行为识别模型从训练到到导出使用的全流程介绍及对应源码,细节请参考 PP-Human 行为识别模型。

如何自定义训练行为类型

行为识别模型本质上是一个分类模型,如果用户希望训练自定义的行为类型,可以参照以下步骤执行:

数据准备按照期望实现的自定义行为准备对应的动作视频或图片序列片段使用关键点模型或人工标注的方式,将动作片段转化为关键点序列在训练/测试数据中,正确设置动作的类别配置文件修改在配置文件中,修改num_classes,通常为支持的动作类型数目 + 1可选的,当动作的类型较多时,top1可能不能完全反应模型准确率,此时可以修改评估时的top_k项来额外评估模型的准确率(例如top5)。

3.5 下载本项目需要的模型

在这一步中,逐一下载上述我们事先为大家准备的各任务的导出模型,可以直接使用。如果您希望在自己的场景上进一步迭代优化,也可以参考前述如何构建模型部分,完成对应模块模型的训练到导出流程,得到部署需要的导出模型。

In [ ]

#下载检测模型!wget https://bj.bcebos.com/v1/paddledet/models/pipeline/mot_ppyoloe_l_36e_pipeline.zip#下载属性模型!wget https://bj.bcebos.com/v1/paddledet/models/pipeline/strongbaseline_r50_30e_pa100k.zip#下载关键点模型#!wget https://bj.bcebos.com/v1/paddledet/models/pipeline/dark_hrnet_w32_256x192.zip#下载行为识别模型#!wget https://bj.bcebos.com/v1/paddledet/models/pipeline/STGCN.zip

   In [ ]

#解压至./output_inference文件夹!unzip -d output_inference mot_ppyoloe_l_36e_pipeline.zip!unzip -d output_inference strongbaseline_r50_30e_pa100k.zip#!unzip -d output_inference dark_hrnet_w32_256x192.zip#!unzip -d output_inference STGCN.zip

   

3.6 配置文件说明

PP-Human相关配置位于deploy/pphuman/config/infer_cfg.yml中,存放模型路径,完成不同功能需要设置不同的任务类型。

功能及任务类型对应表单如下:

输入类型 功能 任务类型 配置项

图片属性识别目标检测 属性识别DET ATTR单镜头视频属性识别多目标跟踪 属性识别MOT ATTR单镜头视频行为识别多目标跟踪 关键点检测 行为识别MOT KPT ACTION

本项目应用到的是:

社区人员信息留存:单镜头视频或图片输入的属性识别

3.7 执行模型预测

我们以一个视频文件来展示一下属性识别的实际使用方式。

在预测命令中,模型预测参数选择分为两部分:

功能选择:将对应参数设置为True属性识别:enable_attr行为识别:enable_action模型路径修改:设置对应任务(DET, MOT, ATTR, KPT, ACTION)的模型路径,包括两种方式修改配置文件中对应模型的路径直接在命令行中指定各模型的路径

例如,我们可以增加下列命令,指定检测模型和属性识别模型的路径:

--model_dir det=output_inference/mot_ppyoloe_l_36e_pipeline/ attr=output_inference/strongbaseline_r50_30e_pa100k/

       

行人信息留存

支持开发者根据具体情况选择视频或单帧图片输入进行属性识别。

注意事项:

–video_file or –image_dir后是输入视频or图片的路径,开发者可上传自己的数据集进行尝试In [ ]

#补充安装相关库(不然运行下面的)视频行人属性识别指令会报错缺库!pip install motmetrics!pip install lap

   In [ ]

#视频行人属性识别#pipeline.py里的attr_res是视野里识别出的标签#处理结果可在/home/aistudio/PaddleDetection/output/ 中查看!python deploy/pphuman/pipeline.py     --config deploy/pphuman/config/infer_cfg.yml     --model_dir mot=output_inference/mot_ppyoloe_l_36e_pipeline/ attr=output_inference/strongbaseline_r50_30e_pa100k/     --video_file=/home/aistudio/属性.mp4     --enable_attr=True     --device=gpu

   

预测效果

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

【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计 - 创想鸟        

In [ ]

#图片行人属性识别#处理结果可在/home/aistudio/PaddleDetection/output/ 中查看!python deploy/pphuman/pipeline.py     --config deploy/pphuman/config/infer_cfg.yml     --model_dir det=output_inference/mot_ppyoloe_l_36e_pipeline/ attr=output_inference/strongbaseline_r50_30e_pa100k/     --image_dir=/home/aistudio/photodemo     --enable_attr=True     --device=gpu

   

使用TensorRT加速预测

NVIDIA TensorRT是一个高性能的深度学习预测库。PP-Human同样支持了使用TensorRT加速模型的预测,并且整个步骤十分简单快速。您可以参考以下步骤实现:

安装适配TensorRT的Paddle, 通过下载链接直接下载对应环境的Paddle whl包进行安装。或是参照指导文档使用docker或自编译方式准备适配TensorRT的Paddle环境。在上述两个场景的Python预测命令中,直接增加–run_mode=trt_fp16即可。

四、部署踩坑指南:

(记录了一些踩的坑,菜菜遇到坑只会搜索)

1.: cannot connect to X server !

原因:在BML CodeLab中没有允许实时显示可视化视频的权限,故在BML CodeLab中只能注释掉PaddleDetection/deploy/pphuman/pipeline.py里的(已经注释掉,本地使用建议解开注释)

#在BML CodeLab中无法实时显示,故注释下面三行cv2.imshow('PPHuman', im)if cv2.waitKey(1) & 0xFF == ord('q'):    break

       

ctrl+f搜索,将两个位置的上面三行注释后再次运行即可运行对视频的检测。(本地的打开显示预测处理结果是没有问题的)

2.重新annaconda配置环境

3.遇到报错ERROR: Failed building wheel for pycocotools

4.发现系统没有cudnn,配置教程

5.cudnn库报错缺dll文件

6.mysql主键唯一键重复插入解决方法

7.视频流传输

五、运行后端服务

In [ ]

! python /home/aistudio/PaddleDetection/deploy/pphuman/app.py# 这个在BML CodeLab目前同样无法查看,后端起的服务在环境本地,从我们的浏览器CodeLab访问不了,部署到本地是可以看到的。

   

本地服务效果如图【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计 - 创想鸟【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计 - 创想鸟        

以上就是【校园AI Day-AI workshop】基于PP-HUMAN的客流及属性统计的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
LNMP中如何处理高并发请求
上一篇 2025年11月9日 13:02:21
登录免费领600分钟时长!《云・鸣潮》不删档开启预下载
下一篇 2025年11月9日 13:02:26

相关推荐

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

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

    2026年5月10日
    1000
  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    000
  • 开源免费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
  • 比特币新手教程 比特币交易平台有哪些

    比特币是一种去中心化的数字货币,基于区块链技术实现点对点交易,具有匿名性、有限发行和不可篡改等特点;新手可通过交易所购买,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
  • vscode上怎么运行html_vscode上运行html步骤【指南】

    首先保存文件为.html格式,再通过浏览器或Live Server插件打开预览;推荐安装Live Server实现本地服务器运行与实时刷新,提升开发体验。 在 VS Code 上运行 HTML 文件并不需要复杂的配置,只需几个简单步骤即可预览页面效果。VS Code 本身是一个代码编辑器,不直接运行…

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

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

    2026年5月10日
    000
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    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日
    000
  • 前端缓存策略与JavaScript存储管理

    根据数据特性选择合适的存储方式并制定清晰的读写与清理逻辑,能显著提升前端性能;合理运用Cookie、localStorage、sessionStorage、IndexedDB及Cache API,结合缓存策略与定期清理机制,可在保证用户体验的同时避免安全与性能隐患。 前端缓存和JavaScript存…

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

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

    2026年5月10日
    100
  • HTML5网页如何实现手势操作 HTML5网页移动端交互的处理技巧

    首先利用原生touch事件实现滑动判断,再通过preventDefault解决滚动冲突,接着引入Hammer.js处理复杂手势,最后通过优化点击区域、避免事件冲突和增加视觉反馈提升体验。 在移动端浏览器中,HTML5网页可以通过触摸事件实现手势操作,提升用户体验。虽然原生JavaScript提供了基…

    2026年5月10日
    000

发表回复

登录后才能评论
关注微信