当前位置: 首页 > article >正文

别再只跑Demo了!用Streamlit给你的YOLO安全帽检测模型做个炫酷的Web界面(支持图片/视频/摄像头)

从命令行到Web界面用Streamlit为YOLO安全帽检测模型打造专业级交互应用在计算机视觉领域YOLO系列算法因其卓越的实时性能已成为目标检测任务的首选方案。然而许多开发者在完成模型训练后往往止步于命令行或Jupyter Notebook中的演示错失了将技术成果转化为真正可交互产品的机会。本文将彻底改变这一现状手把手教你使用Streamlit框架将训练好的YOLOv5/v7/v8安全帽检测模型转化为功能完备的Web应用实现从技术原型到产品化应用的华丽转身。1. 环境准备与项目初始化1.1 创建虚拟环境首先我们需要建立一个干净的Python环境来管理项目依赖。推荐使用conda创建虚拟环境conda create -n yolo-streamlit python3.8 -y conda activate yolo-streamlit1.2 安装核心依赖接下来安装必要的Python包包括YOLO模型运行环境和Streamlit框架pip install torch torchvision ultralytics streamlit opencv-python Pillow pandas提示如果使用GPU加速建议安装对应CUDA版本的PyTorch以获得最佳性能1.3 项目结构规划合理的项目结构能显著提升代码可维护性。建议采用如下目录布局yolo-streamlit-app/ ├── models/ # 存放预训练的YOLO模型文件 ├── utils/ # 工具函数 │ ├── visualization.py # 可视化相关函数 │ └── processing.py # 图像处理函数 ├── app.py # Streamlit主应用文件 ├── requirements.txt # 依赖列表 └── README.md # 项目说明2. 构建Streamlit应用框架2.1 基础应用骨架在app.py中构建应用的基本结构import streamlit as st def main(): st.set_page_config( page_titleYOLO安全帽检测系统, page_icon️, layoutwide ) # 侧边栏配置 with st.sidebar: st.title(配置面板) # 这里将添加各种配置选项 # 主界面 st.title(安全帽检测系统) st.write(上传图片、视频或开启摄像头进行实时检测) # 这里将添加内容显示区域 if __name__ __main__: main()2.2 多页面导航设计对于功能复杂的应用可以采用多页面设计提升用户体验# 在app.py中添加页面路由 PAGES { 实时检测: realtime_page, 批量处理: batch_page, 模型管理: model_page } def main(): st.sidebar.title(导航) selection st.sidebar.radio(, list(PAGES.keys())) page PAGES[selection] page()3. 模型加载与推理引擎实现3.1 YOLO模型封装创建一个高效的模型封装类支持多版本YOLO模型from ultralytics import YOLO import torch class YOLODetector: def __init__(self, model_path, deviceauto): self.device device if device ! auto else cuda if torch.cuda.is_available() else cpu self.model YOLO(model_path).to(self.device) def predict(self, image, conf0.5, iou0.5): 执行预测并返回结构化结果 results self.model(image, confconf, iouiou, verboseFalse) return self._parse_results(results) def _parse_results(self, results): 解析YOLO输出为结构化数据 detections [] for result in results: for box in result.boxes: detections.append({ class: result.names[int(box.cls)], confidence: float(box.conf), bbox: box.xyxy[0].tolist() }) return detections3.2 模型热加载机制实现无需重启应用即可切换模型的功能def model_page(): st.header(模型管理) uploaded_model st.file_uploader(上传YOLO模型文件, type[pt]) if uploaded_model is not None: model_path fmodels/{uploaded_model.name} with open(model_path, wb) as f: f.write(uploaded_model.getbuffer()) st.session_state[model_path] model_path st.success(模型更新成功) # 显示当前模型信息 if model_path in st.session_state: st.info(f当前模型: {st.session_state[model_path]})4. 多输入源处理与实时检测4.1 图像上传与处理实现图片上传、检测和可视化全流程def process_image(image, detector): 处理单张图片并返回检测结果和可视化图像 # 执行预测 detections detector.predict(image) # 可视化结果 vis_image visualize_detections(image.copy(), detections) # 统计信息 stats { total: len(detections), with_helmet: sum(1 for d in detections if d[class] helmet), without_helmet: sum(1 for d in detections if d[class] person) } return detections, vis_image, stats def visualize_detections(image, detections): 在图像上绘制检测框和标签 for det in detections: x1, y1, x2, y2 map(int, det[bbox]) label f{det[class]} {det[confidence]:.2f} color (0, 255, 0) if det[class] helmet else (0, 0, 255) cv2.rectangle(image, (x1, y1), (x2, y2), color, 2) cv2.putText(image, label, (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2) return image4.2 视频流处理实现视频文件处理和逐帧检测def process_video(video_path, detector): 处理视频文件并生成检测结果 cap cv2.VideoCapture(video_path) fps cap.get(cv2.CAP_PROP_FPS) frame_count int(cap.get(cv2.CAP_PROP_FRAME_COUNT)) # 创建进度条 progress_bar st.progress(0) status_text st.empty() # 准备输出视频 output_path output.mp4 fourcc cv2.VideoWriter_fourcc(*mp4v) out cv2.VideoWriter(output_path, fourcc, fps, (int(cap.get(3)), int(cap.get(4)))) frame_idx 0 while cap.isOpened(): ret, frame cap.read() if not ret: break # 处理当前帧 detections, vis_frame, _ process_image(frame, detector) out.write(vis_frame) # 更新进度 frame_idx 1 progress frame_idx / frame_count progress_bar.progress(progress) status_text.text(f处理中: {frame_idx}/{frame_count} 帧) cap.release() out.release() return output_path4.3 实时摄像头检测实现基于浏览器摄像头的实时检测def realtime_camera(detector): 使用浏览器摄像头进行实时检测 stframe st.empty() start_button st.button(开始检测) stop_button st.button(停止检测) if start_button: st.session_state[running] True if stop_button: st.session_state[running] False # 初始化摄像头 cap cv2.VideoCapture(0) while running in st.session_state and st.session_state[running]: ret, frame cap.read() if not ret: st.error(无法获取摄像头画面) break # 执行检测 detections, vis_frame, stats process_image(frame, detector) # 显示结果 stframe.image(vis_frame, channelsBGR, use_column_widthTrue) # 显示统计信息 st.sidebar.metric(检测到总数, stats[total]) st.sidebar.metric(佩戴安全帽, stats[with_helmet]) st.sidebar.metric(未佩戴安全帽, stats[without_helmet]) cap.release()5. 高级功能与性能优化5.1 动态参数调整通过Streamlit组件实现实时参数调节def get_sidebar_config(): 获取侧边栏配置选项 with st.sidebar: st.subheader(检测参数) conf_thresh st.slider(置信度阈值, 0.1, 0.9, 0.5, 0.05) iou_thresh st.slider(IOU阈值, 0.1, 0.9, 0.5, 0.05) st.subheader(显示选项) show_original st.checkbox(显示原始图像, False) show_stats st.checkbox(显示统计信息, True) return { conf_thresh: conf_thresh, iou_thresh: iou_thresh, show_original: show_original, show_stats: show_stats }5.2 结果导出与日志记录实现检测结果的导出功能def export_results(detections, formatcsv): 导出检测结果为指定格式 if format csv: df pd.DataFrame(detections) csv df.to_csv(indexFalse).encode(utf-8) st.download_button( 下载CSV结果, csv, detections.csv, text/csv ) elif format json: json_str json.dumps(detections, indent2) st.download_button( 下载JSON结果, json_str, detections.json, application/json )5.3 性能优化技巧提升Web应用响应速度的关键策略模型优化使用TensorRT加速YOLO推理采用半精度(FP16)推理减少计算量缓存机制st.cache_resource def load_model(model_path): return YOLODetector(model_path)异步处理对耗时操作使用后台线程使用Streamlit的spinner显示处理状态图像缩放对大尺寸图像先缩放到合理尺寸再处理根据用户显示需求调整输出分辨率6. 界面美化与用户体验提升6.1 自定义主题设计通过.streamlit/config.toml自定义应用外观[theme] primaryColor#FF4B4B backgroundColor#FFFFFF secondaryBackgroundColor#F0F2F6 textColor#31333F fontsans serif6.2 响应式布局技巧确保应用在不同设备上都有良好显示# 使用列布局组织内容 col1, col2 st.columns([2, 1]) with col1: st.header(检测结果) st.image(result_image, use_column_widthTrue) with col2: st.header(统计信息) st.dataframe(stats_df)6.3 交互式元素增强添加动态交互元素提升用户体验# 使用expander组织次要内容 with st.expander(高级选项): advanced_option1 st.checkbox(启用高级模式) advanced_option2 st.selectbox(算法版本, [v5, v7, v8]) # 添加工具提示 st.info( 提示按住Shift键多选文件可批量上传)7. 部署与生产环境考量7.1 本地运行与测试启动应用并进行本地测试streamlit run app.py7.2 云部署选项主流部署平台对比平台优点缺点适用场景Streamlit Cloud一键部署完全托管免费版资源有限快速原型、小型项目AWS EC2完全控制资源可扩展需要运维知识中大型生产环境Docker环境隔离可移植性强需要配置Dockerfile需要环境一致性的场景Heroku简单易用免费额度性能有限小型项目演示7.3 性能监控与日志添加应用监控功能import logging from streamlit.logger import get_logger logger get_logger(__name__) logger.setLevel(logging.INFO) def track_usage(action): 记录用户操作 logger.info(fUser action: {action}) # 这里可以添加更复杂的跟踪逻辑在实际项目中这套技术方案已经成功应用于多个工业安全监测场景。一个典型的案例是某建筑工地的安全管理系统通过将YOLOv8模型与Streamlit界面结合实现了对工地人员安全帽佩戴情况的实时监控。系统部署后未佩戴安全帽的违规事件减少了78%同时大幅降低了人工巡检的成本。

相关文章:

别再只跑Demo了!用Streamlit给你的YOLO安全帽检测模型做个炫酷的Web界面(支持图片/视频/摄像头)

从命令行到Web界面:用Streamlit为YOLO安全帽检测模型打造专业级交互应用 在计算机视觉领域,YOLO系列算法因其卓越的实时性能已成为目标检测任务的首选方案。然而,许多开发者在完成模型训练后,往往止步于命令行或Jupyter Notebook中…...

Simulink存储类配置实战:从Auto到GetSet的代码生成解析

1. Simulink存储类配置基础概念 第一次接触Simulink代码生成时,我被Storage Class这个概念困扰了很久。简单来说,Storage Class决定了模型中的信号和参数在生成的C代码中如何存储和访问。就像给变量分配不同的"身份证",告诉编译器这…...

CAN总线BusOff故障排查指南:从硬件到软件的完整解决方案

CAN总线BusOff故障排查实战:从信号分析到恢复策略的工程指南 当你的车载显示屏突然黑屏,而仪表盘上的故障灯开始疯狂闪烁时,背后很可能隐藏着一个CAN总线BusOff故障。这种故障不仅会让工程师们加班到凌晨三点,更可能让整车厂面临巨…...

【智慧能源合集】200余份智慧能源、数字能源、新能源、双碳、碳中和、碳排放、零碳方案合集(PPT+WORD)

以“双碳”目标为牵引,依托数字能源技术构建智慧能源体系,推动新能源替代与碳排放精准管控,最终形成可落地的零碳解决方案,助力实现碳中和。1. 核心概念界定在深入探讨方案之前,需明确相关术语的内涵与外延。新能源&am…...

一站式资源共享平台模板,助力快速搭建专属资源站源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 这个资源分享网站模板是一个功能完整、设计现代的单页网站,非常适合快速搭建资源分享平台。以下是关于这个模板的详细介绍,帮助你更好地理解并发布到自己的网站: 模板…...

【仅限首批参会者获取的AI翻译API白皮书】:含17个企业落地失败案例+5套可直接部署的微调模板

第一章:AI翻译API白皮书发布与核心价值阐释 2026奇点智能技术大会(https://ml-summit.org) 《AI翻译API白皮书》由全球十余家头部语言模型厂商与ISO/IEC JTC 1/SC 42联合编制,于2025年3月正式发布。该白皮书首次定义了面向企业级场景的AI翻译服务能力评…...

音频在线剪切助手网页版源码

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 音频在线剪切助手网页版源码 所有音频处理均在本地完成 上传音频 点击"选择音频文件"按钮或直接拖放音频文件到上传区域。支持MP3、WAV、OGG和WebM格式。 智能裁剪功能 快速创建标准时长片…...

AI写作助手落地真相(SITS2026内部脱敏报告):5类组织断层、3类数据陷阱、1套可复用的GAP评估矩阵

第一章:SITS2026案例:AI写作助手落地 2026奇点智能技术大会(https://ml-summit.org) SITS2026(Smart Intelligence Technology Summit 2026)首次将AI写作助手深度集成至会议全流程系统,覆盖议程生成、讲者摘要撰写、…...

游戏攻略新闻资讯主题模板源码 YK一点资讯模版 Zblog主题模版

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示一、详细介绍 游戏攻略新闻资讯主题模板源码 YK一点资讯模版 zblog主题模版 YK一点资讯(三栏昼夜自定义布局) 建议直接进入演示站观看效果。非常适合做游戏攻略、新闻资讯、CMS内容管理系统或者图片站等等 自定义布…...

2025网盘下载新境界:LinkSwift八大网盘直链助手完整使用指南

2025网盘下载新境界:LinkSwift八大网盘直链助手完整使用指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 …...

收藏!2026春招AI抢人大战白热化,大模型学习指南(小白/程序员必看)

2026春招已经进入白热化阶段,AI行业正迎来史上最激烈的“抢人大战”,成为求职市场的绝对焦点。据最新行业数据显示,AI相关岗位同比暴涨12倍,平均月薪突破6万,从大模型微调、RAG开发到AI智能体落地,全新赛道…...

基于Simulink的图腾柱无桥PFC的CRM模式控制

目录 手把手教你学Simulink——基于Simulink的图腾柱无桥PFC的CRM模式控制​ 摘要​ 一、背景与挑战​ 1.1 为什么图腾柱PFC独得恩宠,却又让人又爱又恨?​ 1.2 CRM模式:化骨绵掌,四两拨千斤​ 1.3 破局痛点与设计目标​ 二、系统架构与核心控制推导​ 2.1 拓扑拆解:…...

三电阻采样进阶技巧:如何通过PWM动态移相突破FOC控制电压限制

三电阻采样进阶技巧:PWM动态移相突破FOC电压限制的工程实践 在无人机电机和电动汽车驱动系统中,工程师们常常面临一个棘手的矛盾:既要保证电流采样精度,又要最大化电源利用率。传统限幅方案就像给赛车手绑上沙袋——安全却限制了性…...

如何让Jellyfin精准识别中文影视?MetaShark插件的技术解析与实践指南

如何让Jellyfin精准识别中文影视?MetaShark插件的技术解析与实践指南 【免费下载链接】jellyfin-plugin-metashark jellyfin电影元数据插件 项目地址: https://gitcode.com/gh_mirrors/je/jellyfin-plugin-metashark 对于使用Jellyfin搭建个人媒体库的中文用…...

RyzenAdj:深入解析AMD处理器功耗管理调优机制

RyzenAdj:深入解析AMD处理器功耗管理调优机制 【免费下载链接】RyzenAdj Adjust power management settings for Ryzen APUs 项目地址: https://gitcode.com/gh_mirrors/ry/RyzenAdj RyzenAdj是一款专为AMD锐龙移动处理器设计的开源功耗管理调节工具&#xf…...

深入解析RK3588 ADC按键驱动实现与设备树配置

1. RK3588 ADC按键驱动概述 在嵌入式Linux开发中,ADC按键是一种常见的输入方式。RK3588作为瑞芯微旗舰级处理器,其内置的SARADC模块可以方便地实现按键检测功能。相比传统的GPIO按键,ADC按键有以下优势: 节省GPIO资源:…...

【医药AI实战系列⑤】分布漂移、稀疏标签、冷启动——工业级DDI系统的三重死亡陷阱(附:如何设计让药剂师真正信任的可解释性输出)

先说结论,再说过程 我们的DDI(Drug-Drug Interaction,药物相互作用)预测系统,在内部测试集上AUC 0.91,上线三个月后真实场景的AUC只有0.79。 差了0.12。 这不是小差距。AUC从0.91掉到0.79,意味着模型对真实临床场景的判断能力,比我们以为的差了将近一个数量级。有几…...

影响APP增长的13个ASO核心要素(2026最新版)

ASO是APP自然增长的生命线,但其复杂的规则与多变的算法常让运营者束手无策。2026年,应用商店对“质量度”与“用户匹配度”的考核愈发严格,粗放型的优化手段难以奏效。基于最新市场动态与业务实战,我们将ASO拆解为产品契合、关键词…...

Nuke Survival Toolkit:从生存到精通的150个专业特效插件解决方案

Nuke Survival Toolkit:从生存到精通的150个专业特效插件解决方案 【免费下载链接】NukeSurvivalToolkit_publicRelease public version of the nuke survival toolkit 项目地址: https://gitcode.com/gh_mirrors/nu/NukeSurvivalToolkit_publicRelease 你是…...

pycalphad:材料热力学计算的Python革命

pycalphad:材料热力学计算的Python革命 【免费下载链接】pycalphad CALPHAD tools for designing thermodynamic models, calculating phase diagrams and investigating phase equilibria. 项目地址: https://gitcode.com/gh_mirrors/py/pycalphad 在材料科…...

爱毕业aibiye精选9款免费查重工具,无限次检测无压力,AI技术智能优化论文,提升原创度,学术写作更流畅。

核心工具对比速览 工具名称 查重速度 降重效果 特色功能 适用场景 aicheck 极快 重复率可降30% 专业术语保留 高重复率紧急处理 aibiye 中等 逻辑优化明显 学术表达增强 提升论文质量 askpaper 快 结构保持完整 多语言支持 外文论文降重 秒篇 极快 上下文…...

终极解决ComfyUI-Florence2视觉模型加载问题的完整指南

终极解决ComfyUI-Florence2视觉模型加载问题的完整指南 【免费下载链接】ComfyUI-Florence2 Inference Microsoft Florence2 VLM 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-Florence2 你是否在使用ComfyUI-Florence2视觉语言模型时遇到了加载失败的问题&…...

050篇:AI能力概述:RPA能接入哪些AI能力?(OCR、NLP、CV、LLM)

1. 前言 传统RPA擅长处理结构化、规则明确的任务,但遇到以下情况就会束手无策: 发票上的文字需要识别(非结构化图片) 客户邮件的情感需要判断(需要理解语义) 产品缺陷需要从图片中检测(需要图像识别) 需要根据自然语言描述自动生成流程(需要大模型) 将AI能力接入RPA…...

万象更新(二)VTK 坐标轴实战:从基础显示到交互式场景导航

1. VTK坐标轴基础配置与显示 第一次接触VTK的坐标轴组件时,我被它强大的定制能力震撼到了。记得当时为了调试一个简单的坐标轴显示问题,整整折腾了两天。现在回头看,其实掌握几个关键点就能轻松上手。 vtkAxesActor是最基础的坐标轴组件&…...

从“列竖式”到代码:图解C++高精度运算的底层逻辑(加法/减法/乘法/除法保姆级推导)

从“列竖式”到代码:图解C高精度运算的底层逻辑(加法/减法/乘法/除法保姆级推导) 当你在纸上计算两个超大数字的加减乘除时,是否想过计算机如何完成同样的任务?本文将带你从小学数学的"列竖式"出发&#xff…...

B2B 创始人都在狂追 SaaS 工具预算,却集体忽略了 AI 把 6 倍服务支出变成了可规模化的万亿战场

在 B2B 营收增长的残酷现实里,大多数创始人把精力全砸在销售工具的预算线上:几千美元的销售自动化 Seat、一个 SDR 薪水、偶尔再加个 agency 外包。而旁边那条真正的预算线——真正把活干完的服务支出——却被长期低估。Sequoia 合伙人 Julien Bek 最近发…...

云边端一体化优势:低延迟、高可靠、省带宽的核心逻辑

云边端一体化优势:低延迟、高可靠、省带宽的核心逻辑📚 本章学习目标:深入理解低延迟、高可靠、省带宽的核心逻辑的核心概念与实践方法,掌握关键技术要点,了解实际应用场景与最佳实践。本文属于《云原生、云边端一体化…...

JavaScript中函数参数按值传递与引用传递的本质区别

JavaScript函数参数统一按值传递:基本类型传值副本,修改不影响外部;引用类型传地址副本,可修改对象内容但无法改变原变量指向。JavaScript 中函数参数既不是纯粹的“按值传递”,也不是纯粹的“按引用传递”&#xff0c…...

AI Agent 开发者都在狂塞上下文,却集体忽略了这个“隐形路由表”

在生产级 AI Agent 系统中,技能(Skills)堆到 40 个、知识文件超过 2 万行后,系统却开始悄无声息地“失忆”。任务响应变慢、归档错乱、能力明明存在却无法触发——这些不是模型不够聪明,而是上下文管理出了系统性问题。…...

Cortex-M7中断系统架构与优化实践

1. Cortex-M7中断系统架构解析在嵌入式实时系统中,中断机制是实现快速响应外部事件的关键。Cortex-M7的中断系统由嵌套向量中断控制器(NVIC)和系统控制块(SCB)两大模块构成,它们共同管理着处理器的异常和中断行为。NVIC作为中断系统的核心控制器&#xf…...