news 2026/4/29 10:05:48

基于华为云接口的门禁系统--UI 界面实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于华为云接口的门禁系统--UI 界面实现

🔥 专属服务

【关于我】

  • CSDN 技术分享者

  • 专注[各种技术]分享

  • 已帮助10000+开发者

【能帮你】

  • 🎯 技术答疑

  • 📚 学习规划

  • 💼 项目指导

一、实验目的

  • 理解并掌握基于 Gradio 框架的快速 Web 应用开发方法,通过构建智能门禁系统实现人机交互界面的设计与实现。
  • 掌握模块化程序设计思想,理解 UI 层与业务逻辑层分离的架构设计模式。
    二、实验目标
  1. 理解 Gradio 框架的核心组件:
    • 掌握 gr.Blocks 高级布局 API 的使用
    • 掌握常用输入组件(Textbox、Image)的配置方法
    • 掌握常用输出组件(Textbox、Image)的数据绑定
  2. 掌握界面布局设计:
    • 能够使用 gr.Row 和 gr.Column 实现响应式布局
    • 能够使用 gr.Tabs 实现多标签页功能
    • 理解组件的可见性控制( visible 参数)
  3. 理解模块化架构设计:
    • 掌握 UI 层与业务逻辑层分离的设计模式
    • 理解回调函数的注册与绑定机制
    • 掌握应用启动配置(服务器地址、端口设置)
      三、代码实现
      3.1 实验内容
  • 使用 gr.Blocks 构建响应式 Web 界面框架
  • 设计员工注册模块的表单布局(左右分栏)
  • 配置图像上传组件支持本地文件和摄像头两种输入源
  • 实现应用启动模块,配置服务器监听参数
    3.2 实验步骤
    步骤一:UI 层框架搭建(ui.py)
    导入 Gradio 库,创建 Blocks 容器作为界面根元素。
import gradio as gr def create_interface(): """创建并返回 Gradio Blocks 实例。 说明: - 采用分层架构,UI 层只负责界面渲染 - 回调函数由 app.py 层注入,实现解耦 """ with gr.Blocks(title="智能门禁系统") as demo: # 系统标题 gr.Markdown( """ # 🛡️ 智能门禁系统(增强版) 基于华为云人脸识别服务 | 集成活体检测 + 尾随检测 + 语音迎宾 """ ) # TODO: 添加 Tabs 和具体功能组件 return demo

步骤二:员工注册模块(👤 员工注册)
使用左右分栏布局,左侧为输入表单,右侧为结果展示。

with gr.Tabs(): with gr.Tab("👤 员工注册"): gr.Markdown("### 注册新员工") with gr.Row(): with gr.Column(): employee_id = gr.Textbox( label="员工编号", placeholder="如:EMP001", value="EMP001", ) name = gr.Textbox( label="员工姓名", placeholder="请输入姓名", value="张三", ) reg_image = gr.Image( label="人脸照片", type="pil", sources=["upload", "webcam"], # 双输入源 height=300, ) reg_btn = gr.Button( "📝 注册员工", variant="primary", size="lg" ) with gr.Column(): reg_output = gr.Textbox( label="注册结果", lines=10, interactive=False, ) reg_preview = gr.Image( label="照片预览", visible=True )

步骤三:门禁验证模块(🔐 门禁验证)

核心功能模块,集成状态管理、多输入源、实时状态展示。

with gr.Tab("🔐 门禁验证"): gr.Markdown("### 人脸验证开门(已集成活体检测+尾随检测+语音迎宾)") with gr.Row(): with gr.Column(): # 状态管理:存储最新帧和输入来源 latest_frame = gr.State(value=None) latest_source = gr.State(value="unknown") # 双输入源配置 verify_webcam = gr.Image( label="摄像头画面(可直接开始验证)", type="pil", sources=["webcam"], height=350, ) verify_upload = gr.Image( label="或上传照片", type="pil", sources=["upload"], height=200, ) verify_btn = gr.Button( "🔍 开始验证", variant="primary", size="lg" ) # 实时状态显示 tailgating_status = gr.Textbox( label="尾随检测状态", value="", interactive=False, lines=1, ) with gr.Column(): # 富文本结果展示 verify_result = gr.HTML( label="验证结果", value='<div style="padding: 40px; color: #9ca3af; text-align: center; border: 2px dashed #e5e7eb; border-radius: 16px; background: #f9fafb;">等待验证...</div>', ) # 标签式状态显示 verify_status = gr.Label( label="门禁状态", value="等待验证..." ) # 语音播报组件 voice_status = gr.Textbox( label="语音播报状态", value="等待播报...", interactive=False, ) voice_audio = gr.Audio( label="语音播报", interactive=False, type="filepath", )

步骤四:人脸比对模块(🔄 人脸比对)

实现 1:1 人脸相似度比对功能,双图并行展示。

with gr.Tab("🔄 人脸比对"): gr.Markdown("### 1:1人脸比对") with gr.Row(): compare_img1 = gr.Image( label="照片1", type="pil", sources=["upload", "webcam"], height=250, ) compare_img2 = gr.Image( label="照片2", type="pil", sources=["upload", "webcam"], height=250, ) compare_btn = gr.Button( "🔍 开始比对", variant="primary", size="lg" ) with gr.Row(): compare_result = gr.Textbox( label="比对结果", lines=4, interactive=False, ) # 数值仪表盘显示相似度 similarity_gauge = gr.Number( label="相似度", value=0, minimum=0, maximum=1, )

页面输出:

步骤五:员工管理模块(📋 员工管理)

实现员工列表查询和删除功能。

with gr.Tab("📋 员工管理"): gr.Markdown("### 查看和管理员工") with gr.Row(): list_btn = gr.Button( "📋 列出所有员工", variant="primary" ) refresh_btn = gr.Button( "🔄 刷新", variant="secondary" ) employee_list = gr.Textbox( label="员工列表", lines=15, interactive=False, ) gr.Markdown("### 删除员工") with gr.Row(): del_id = gr.Textbox( label="员工编号", placeholder="输入要删除的员工编号" ) del_btn = gr.Button( "🗑️ 删除", variant="stop" # 危险操作使用红色样式 ) del_result = gr.Textbox( label="删除结果", interactive=False )

页面输出

步骤六:应用启动层(app.py)

from ui import create_interface def create_app(): """创建应用实例,UI 与逻辑分离""" return create_interface() if __name__ == '__main__': demo = create_app() demo.launch( server_name='127.0.0.1', server_port=5001, )

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 10:05:47

OBS多平台直播同步方案:obs-multi-rtmp插件的架构哲学与实战配置

OBS多平台直播同步方案&#xff1a;obs-multi-rtmp插件的架构哲学与实战配置 【免费下载链接】obs-multi-rtmp OBS複数サイト同時配信プラグイン 项目地址: https://gitcode.com/gh_mirrors/ob/obs-multi-rtmp 当内容创作者需要同时在YouTube、Twitch、Bilibili等多个平…

作者头像 李华
网站建设 2026/4/29 10:04:55

非参数检验怎么做:软件操作步骤与结果指标解读

一、非参数检验所属模块非参数检验在SPSSAU中归属于【通用方法】模块。二、方法概述非参数检验主要用于比较不同组别在某个定量指标上的分布差异&#xff0c;特别适合数据不满足正态分布、样本量偏小&#xff0c;或者结果更适合用中位数来描述的场景。做问卷评分、实验前后分组…

作者头像 李华
网站建设 2026/4/29 9:54:23

旋转机械故障诊断特征表达与智能识别【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。 ✅ 如需沟通交流&#xff0c;扫描文章底部二维码。&#xff08;1&#xff09;优化变分互无量纲特征与变分模态分解的联合特征提取&#xf…

作者头像 李华
网站建设 2026/4/29 9:49:01

视觉令牌剪枝技术:优化大型视觉语言模型的关键策略

1. 项目背景与核心价值 视觉令牌剪枝&#xff08;Visual Token Pruning&#xff09;是当前大型视觉语言模型&#xff08;VLMs&#xff09;优化领域的前沿研究方向。我在实际部署CLIP、BLIP等模型时发现&#xff0c;传统方法处理高分辨率图像会产生大量冗余视觉令牌&#xff0c;…

作者头像 李华