yolov8 目标检测快速streamlit可视化界面

news2024/11/18 15:38:30

参考:
https://github.com/ultralytics/ultralytics/blob/2330caa50a8a8e0bb61408df8dca0721fb350dbe/ultralytics/solutions/streamlit_inference.py

版本:

ultralytics                    8.2.27 
# Ultralytics YOLO 🚀, AGPL-3.0 license

import cv2
import streamlit as st
import torch

from ultralytics import YOLO

# Hide main menu style
menu_style_cfg = """<style>MainMenu {visibility: hidden;}</style>"""

# Main title of streamlit application
main_title_cfg = """<div><h1 style="color:#FF64DA; text-align:center; font-size:40px; 
                         font-family: 'Archivo', sans-serif; margin-top:-50px;">
                Ultralytics YOLOv8 Streamlit Application
                </h1></div>"""

# Subtitle of streamlit application
sub_title_cfg = """<div><h4 style="color:#042AFF; text-align:center; 
                font-family: 'Archivo', sans-serif; margin-top:-15px;">
                Experience real-time object detection on your webcam with the power of Ultralytics YOLOv8! 🚀</h4>
                </div>"""


def inference():
    # Set html page configuration
    st.set_page_config(page_title="Ultralytics Streamlit App", layout="wide", initial_sidebar_state="auto")

    # Append the custom HTML
    st.markdown(menu_style_cfg, unsafe_allow_html=True)
    st.markdown(main_title_cfg, unsafe_allow_html=True)
    st.markdown(sub_title_cfg, unsafe_allow_html=True)

    # Add elements to vertical setting menu
    st.sidebar.title("USER Configuration")
    yolov8_model = st.sidebar.radio("Model", ("yolov8n", "yolov8s", "yolov8m", "yolov8l"))
    conf_thres = st.sidebar.text_input("Confidence Threshold", "0.25")
    nms_thres = st.sidebar.text_input("NMS Threshold", "0.45")

    col1, col2 = st.columns(2)
    org_frame = col1.empty()
    ann_frame = col2.empty()

    if st.sidebar.button("Start"):
        model = YOLO(yolov8_model + ".pt")  # Load the yolov8 model
        videocapture = cv2.VideoCapture(0)  # Capture the webcam

        if not videocapture.isOpened():
            st.error("Could not open webcam.")

        stop_button = st.button("Stop")  # Button to stop the inference
        # execute code until webcam closed
        while videocapture.isOpened():
            success, frame = videocapture.read()
            if not success:
                st.warning("Failed to read frame from webcam. Please make sure the webcam is connected properly.")
                break

            # Store model predictions
            results = model(frame, conf=float(conf_thres), iou=float(nms_thres))
            annotated_frame = results[0].plot()  # Add annotations on frame

            # display frame
            org_frame.image(frame, channels="BGR")
            ann_frame.image(annotated_frame, channels="BGR")

            if stop_button:
                videocapture.release()  # Release the capture
                torch.cuda.empty_cache()  # Clear CUDA memory
                st.stop()  # Stop streamlit app

        # Release the capture
        videocapture.release()

    # Clear CUDA memory
    torch.cuda.empty_cache()

    # Destroy window
    cv2.destroyAllWindows()


# Main function call
if __name__ == "__main__":
    try:
        inference()
    except SystemExit:
        pass

运行:
streamlit run .\YOLO\streamlit_yolo.py

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1890893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

速锐得解码汽车以太网技术特点接口定义数据传输及应用

在当前的汽车工业中&#xff0c;随着技术的飞速发展&#xff0c;车载网络技术也在不断进步与更新。其中&#xff0c;具备以太网的车型已成为一个新兴趋势&#xff0c;这主要归功于车载以太网技术在车内带宽需求较高的系统上的应用&#xff0c;如高级驾驶辅助系统&#xff08;AD…

vue3单个页面进行防抖节流

防抖 <template><button id"submitButton" ref"submitButton">GET</button> </template><script lang"ts" setup> import { ref, onMounted } from vue;// 防抖函数 function debounce(func: () > void, dela…

浅析C++函数重载

浅析C函数重载 C语言和C函数调用的不同 C语言会进行报错 C能成功运行并且自动识别类型 由此可以看出&#xff0c;C在函数调用时进行了调整&#xff0c;使其支持函数重载&#xff0c;那么我们就来看看进行了哪些调整吧&#x1f60e; 分析函数调用 首先我们要知道&#xff0c…

Mysql8.0.36 Centos8环境安装

下载安装包 官网地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 可以直接下载后再传到服务器&#xff0c;也可以在服务器采用wget下载。如下&#xff1a; wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.36-linux-glib…

LLM应用:传统NLP任务

LLM出来以后&#xff0c;知乎上就出现了“传统NLP已死”的言论&#xff0c;但是传统NLP真的就被扔进历史的垃圾桶了吗&#xff1f; 其实&#xff0c;尽管LLM具有出色的通用能力&#xff0c;但仍然无法有效应对低资源领域的自然语言处理任务&#xff0c;如小语种翻译。为了更好地…

企业LoRA模型定制服务

&#x1f308; 最强AI绘画模型训练、定制服务公司出炉 —— 触站AI&#xff0c;设计界的智能魔法师 &#x1f9d9;‍♂️ &#x1f3a8; 触站AI&#xff0c;用智能技术解锁设计的无限可能 &#x1f3a8;在创意与科技交织的今天&#xff0c;触站AI以其AI绘画模型训练和定制服务…

「算法题」二分查找算法演示

一个样式更加美观大方的HTML页面示例,其中包括了二分查找算法的演示。 布局描述 页面主体使用白色背景,加上轻微的阴影和圆角边框,使页面看起来更加精致。输入框和按钮使用了更加现代的样式,包括圆角边框和悬浮效果。按钮使用了鲜明的颜色,以吸引用户点击。搜索结果显示时…

指定IP地址通过远程桌面访问WINDOWS10

1:登录Windows10系统&#xff0c;在控制面板找到系统和安全&#xff0c;打开Windows Defender防火墙。 2&#xff1a;点击感觉设置。 3&#xff1a;在入站规则中&#xff0c;找到远程桌面。查看自己的网络现在是公用&#xff0c;域&#xff0c;还是专用。选择对应的网络。 4&am…

魔行观察-AI数据分析-蜜雪冰城

摘要 本报告旨在评估蜜雪冰城品牌作为投资对象的潜力和价值&#xff0c;基于其经营模式、门店分布、人均消费、覆盖省份等关键指标进行分析。 数据数据源&#xff1a;魔行观察&#xff1a;http://www.wmomo.com/#/brand/brandDetails?code10013603 品牌概览 蜜雪冰城是中国…

idea一些bug

今天再弄idea项目&#xff0c;遇到了好多bug&#xff0c;崩溃了&#xff0c;赶紧来记录一下 这里写目录标题 1、git管理2、maven管理2.1 导入新项目&#xff0c;报错 java: JDK isn‘t specified for module 3、idea SVN报错 1、git管理 如果我们在本地写了一个项目&#xff…

MySQL8.0版本的安装、配置

MySQL8.0 版本的安装 第一步、选择“Custorm”(自定义安装)&#xff0c;然后“Next”(下一步)。 第二步、展开“MySQL Server”,单击“MySQL Server 8.0.37 - x64”,点击绿色右键头导入&#xff0c;其中产品安装路径是默认的&#xff0c;最后“Next”(下一步)。 如果需要自定义…

OA系统多少钱一套 用低代码开发OA系统需要多少钱

在数字化时代&#xff0c;企业对办公自动化(OA)系统的需求日益增长&#xff0c;以提高工作效率和优化管理流程。低代码开发平台以其快速开发和部署的能力&#xff0c;成为构建OA系统的热门选择。本文将介绍低代码开发OA系统的成本效益&#xff0c;并以白码低代码平台为例&#…

8.x86游戏实战-OD详解

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;7.x86游戏实战-C实现跨进程读写-跨进程写内存 工具下载&#xff1a;下载 OllyI…

机器人控制系列教程之Delta机器人轨迹规划

并联机器人轨迹规划原理 轨迹规划&#xff1a;并联机器人的轨迹规划相比于串联机器人更加严苛&#xff0c;因为在大多数工作场合都有高速、高精度、轻载的特征。其一般运动轨迹为 Point-To-Point&#xff0c;对这始末两点的轨迹规划在 Delta 机器人乃至所有机器人领域具有重要…

【干货】SaaS企业使用PLG模式实现用户自增长与留存的三大战略

近年来越来越多toB厂商开始采用SaaS模式&#xff0c;消费者的体验需求和购买行为也逐渐转变。根据Forrester研究调查显示&#xff0c;B端购买者现在越来越倾向于进行产品体验和产品调研与评估&#xff0c;而非如传统的方式那样直接与销售人员接触。 因此&#xff0c;SaaS&…

Halcon 基于分水岭的目标分割

一 分水岭 1 分水岭介绍 传统的分水岭分割方法&#xff0c;是一种基于拓扑理论的数学形态学的分割方法&#xff0c;其基本思想是把图像看作是地质学上的拓扑地貌&#xff0c;图像中每一像素的灰度值表示该点的海拔高度&#xff0c;每一个局部极小值及其周边区域称为集水盆地&…

视频汇聚/安防监控/GB28181国标EasyCVR视频综合管理平台出现串流的原因排查及解决

安防视频监控系统/视频汇聚EasyCVR视频综合管理平台&#xff0c;采用了开放式的网络结构&#xff0c;能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;视频汇聚EasyCVR平台支持设备…

【基于R语言群体遗传学】-5-扩展到两个以上等位基因及多基因位点

我们现在继续对于群体遗传学进行统计建模&#xff0c;书接上回&#xff0c;我们讨论了孤雌生殖的物种违反哈代温伯格遗传比例的例子&#xff0c;那我们现在来看多于两个等位基因的情况的计算。 如果没有看过之前文章的同学&#xff0c;可以先去看一下之前的文章&#xff1a; …

数据库day1

MySQL的安装&#xff1a; 采用MySQL的zip格式安装

在C++中,工厂模式的思考(《C++20设计模式》及常规设计模式对比)

文章目录 一、前言二、讲解1、构造函数的弊端2、工厂方法&#xff08;解决上述弊端&#xff09;3、简单工厂3.1 **UML类图**3.2 **实现** 4、工厂模式4.1 **UML类图**4.2 **实现** 5、抽象工厂5.1 **UML类图**5.2 **实现** 三、总结 一、前言 在看《C20设计模式》一书中产生了…