使用gradio库实现Web应用,允许用户上传图像,并使用YOLOv8模型对图像进行目标检测。

一、Gradio

Gradio 详细介绍

Gradio 是一个用于构建和分享机器学习模型和数据科学应用的开源Python库。它简化了创建交互式Web界面的过程,让开发者可以快速搭建原型并与他人分享。

主要特性
  1. 易用性

    • 无需前端开发经验:只需几行Python代码就可以创建功能完备的Web界面。
    • 即时部署:可以快速本地运行和在线共享。
  2. 广泛的支持

    • 支持多种输入和输出类型:包括图像、文本、音频、视频、滑动条等。
    • 与主流机器学习框架兼容:如TensorFlow、PyTorch、scikit-learn等。
  3. 自动化

    • 自动生成接口:根据定义的函数自动生成Web界面。
    • 实时更新:可以实时查看和测试模型的效果。
  4. 协作和分享

    • 共享链接:生成的应用可以通过链接分享,方便他人访问和测试。
    • 集成到现有的工作流程中:可以与Jupyter Notebook、Google Colab等集成使用。
Gradio的基本使用方法
  1. 安装Gradio

    pip install gradio
    
  2. 创建一个简单的Gradio应用

    import gradio as grdef greet(name):return f"Hello {name}!"iface = gr.Interface(fn=greet, inputs="text", outputs="text")
    iface.launch()
    
    • gr.Interface:定义了一个简单的接口。
    • fn=greet:指定了处理函数。
    • inputs="text":定义输入组件为文本输入框。
    • outputs="text":定义输出组件为文本输出框。
    • iface.launch():启动Gradio应用。
  3. 支持多种输入和输出类型
    Gradio支持多种输入和输出组件,如图像、视频、音频、滑动条、复选框等。

    def classify_image(image):# 假设有一个预训练的分类模型return "分类结果"iface = gr.Interface(fn=classify_image, inputs=gr.inputs.Image(), outputs="text")
    iface.launch()
    
  4. 多个输入和输出
    支持多输入和多输出的情况,可以构建复杂的界面。

    def process_data(name, age, image):# 假设处理这些输入并返回结果return f"Name: {name}, Age: {age}", imageiface = gr.Interface(fn=process_data,inputs=[gr.inputs.Textbox(label="Name"), gr.inputs.Slider(0, 100, label="Age"), gr.inputs.Image(type="numpy", label="Image")],outputs=["text", "image"]
    )
    iface.launch()
    
Gradio组件

Gradio提供了多种组件来满足不同的输入输出需求。以下是一些常用的组件:

  • 文本输入gr.inputs.Textbox
  • 滑动条gr.inputs.Slider
  • 复选框gr.inputs.Checkbox
  • 图像gr.inputs.Image
  • 音频gr.inputs.Audio
  • 视频gr.inputs.Video

每个组件都可以通过不同的参数进行定制,以满足特定的需求。

高级特性
  1. 自定义CSS和JS
    Gradio允许用户自定义应用的外观和行为,通过添加自定义的CSS和JavaScript文件。

  2. 集成到现有工作流
    Gradio应用可以嵌入到Jupyter Notebook、Google Colab等环境中,方便与数据科学工作流的无缝集成。

  3. 共享和部署
    Gradio提供了一键共享功能,可以生成一个临时链接,方便快速分享应用。还可以将应用部署到云端,提供更长时间的访问。

  4. 错误处理和调试
    提供了详细的错误信息和调试工具,帮助开发者快速定位和解决问题。

二、实例

本文主要使用Gradio库创建了一个Web应用,允许用户上传图像,并使用YOLOv8模型对图像进行目标检测。处理后的图像会显示检测框和标签,并展示检测结果的详细信息。通过简单的Web界面,用户可以轻松地进行图像检测而无需编写复杂的前端代码。

代码实现的具体功能

  • 图像上传:用户可以通过Web界面上传图像文件。
  • 目标检测:上传的图像被传递给YOLO模型进行目标检测。
  • 结果展示:处理后的图像会在Web界面显示,并且显示检测到的目标物体的类别、置信度和位置。
  • 交互体验:用户可以实时查看检测结果,并可以继续上传新的图像进行检测。

通过上述代码,用户能够方便地使用YOLOv8模型进行图像目标检测,并通过直观的Web界面查看结果。
下面是代码的流程以及各部分的作用功能:

代码流程和功能

  1. 引入必要的库

    import gradio as gr
    import cv2
    import numpy as np
    import os
    from ultralytics import YOLO
    
    • gradio:用于创建Web界面的库。
    • cv2:用于图像处理的OpenCV库。
    • numpy:用于处理数组和矩阵的库。
    • os:用于文件和目录操作。
    • ultralytics.YOLO:用于加载和使用YOLOv8模型。
  2. 设置上传和结果文件夹

    UPLOAD_FOLDER = 'uploads'
    RESULT_FOLDER = 'results'
    os.makedirs(UPLOAD_FOLDER, exist_ok=True)
    os.makedirs(RESULT_FOLDER, exist_ok=True)
    
    • UPLOAD_FOLDERRESULT_FOLDER:定义上传文件和处理结果的保存目录。
    • os.makedirs:创建目录(如果目录不存在)。
  3. 加载YOLO模型

    model = YOLO('yolov8n.pt')
    
    • model:加载YOLOv8模型,用于后续的图像检测。
  4. 定义图像处理函数

    def process_image(image):# 保存上传的图像filename = 'uploaded_image.jpg'file_path = os.path.join(UPLOAD_FOLDER, filename)cv2.imwrite(file_path, image)# 处理图像results = model(image)detection_results = []for result in results:boxes = result.boxesfor box in boxes:x1, y1, x2, y2 = box.xyxy[0]conf = box.conf[0]cls = box.cls[0]cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)cv2.putText(image, f'{cls}:{conf:.2f}', (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9,(36, 255, 12), 2)detection_results.append(f'Class: {cls}, Confidence: {conf:.2f}, Box: ({x1}, {y1}), ({x2}, {y2})')# 保存处理后的图像result_filename = 'result_image.jpg'result_path = os.path.join(RESULT_FOLDER, result_filename)cv2.imwrite(result_path, image)return image, '\n'.join(detection_results)
    
    • process_image函数:处理上传的图像,使用YOLO模型进行检测,绘制检测框和标签,并返回处理后的图像和检测结果文本。
      • 保存上传的图像到指定目录。
      • 使用YOLO模型对图像进行检测。
      • 绘制检测框和标签,并保存处理后的图像。
      • 返回处理后的图像和检测结果文本。
  5. 创建Gradio界面

    iface = gr.Interface(fn=process_image,inputs=gr.Image(type="numpy", label="上传图像"),outputs=[gr.Image(type="numpy", label="处理后的图像"), gr.Textbox(label="检测结果")],title="YOLOv8 图像检测",description="上传图像并使用YOLOv8模型进行检测"
    )
    
    • gr.Interface:定义Gradio界面的主要组件。
    • fn=process_image:指定处理函数为process_image
    • inputs=gr.Image(type="numpy", label="上传图像"):定义图像上传输入组件。
    • outputs=[gr.Image(type="numpy", label="处理后的图像"), gr.Textbox(label="检测结果")]:定义处理后的图像输出和检测结果文本输出组件。
    • titledescription:设置界面的标题和描述。

完整代码如下:

import gradio as gr
import cv2
import numpy as np
import os
from ultralytics import YOLO# 设置上传和结果文件夹
UPLOAD_FOLDER = 'uploads'
RESULT_FOLDER = 'results'
os.makedirs(UPLOAD_FOLDER, exist_ok=True)
os.makedirs(RESULT_FOLDER, exist_ok=True)# 加载模型
model = YOLO('yolov8n.pt')def process_image(image):# 保存上传的图像filename = 'uploaded_image.jpg'file_path = os.path.join(UPLOAD_FOLDER, filename)cv2.imwrite(file_path, image)# 处理图像results = model(image)detection_results = []for result in results:boxes = result.boxesfor box in boxes:x1, y1, x2, y2 = box.xyxy[0]conf = box.conf[0]cls = box.cls[0]cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)cv2.putText(image, f'{cls}:{conf:.2f}', (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9,(36, 255, 12), 2)detection_results.append(f'Class: {cls}, Confidence: {conf:.2f}, Box: ({x1}, {y1}), ({x2}, {y2})')# 保存处理后的图像result_filename = 'result_image.jpg'result_path = os.path.join(RESULT_FOLDER, result_filename)cv2.imwrite(result_path, image)return image, '\n'.join(detection_results)# 创建Gradio界面
iface = gr.Interface(fn=process_image,inputs=gr.Image(type="numpy", label="上传图像"),outputs=[gr.Image(type="numpy", label="处理后的图像"), gr.Textbox(label="检测结果")],title="YOLOv8 图像检测",description="上传图像并使用YOLOv8模型进行检测"
)# 启动Gradio应用
iface.launch()

运行,复制下面链接:
在这里插入图片描述
界面如下:
在这里插入图片描述
选择图片检测结果如下:
在这里插入图片描述

三、 番外篇-YOLOV10尝鲜

最近由清华大学的研究团队研发的最新的YOLOV10模型。这一新一代的YOLO模型专注于实时端到端的目标检测。YOLOv10在多个方面进行了改进,包括优化模型架构、消除非极大值抑制(NMS)后处理步骤,并引入了高效的模型设计策略,从而在提高检测精度的同时显著降低了计算开销和推理延迟。
具体来说,YOLOv10的研发团队包括Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han和Guiguang Ding。这些研究人员通过广泛的实验,证明了YOLOv10在不同模型规模上实现了最先进的性能和效率。例如,与YOLOv9-C相比,YOLOv10-B在相同性能下延迟减少了46%,参数减少了25%。
通过这些改进,YOLOv10在实时性和精度方面都达到了新的高度,适用于各种实时目标检测应用,如自动驾驶、视频监控和智能安防等。

好奇心驱使尝试一下v10模型的效果。下载了yolov10s.pt版本,进行实时视频监控测试。
各版本下载和介绍如下:
模型下载:

YOLOv10-N:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10n.pt
YOLOv10-S:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10s.pt
YOLOv10-M:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10m.pt
YOLOv10-B:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10b.pt
YOLOv10-L:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10l.pt
YOLOv10-X:https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10x.pt

模型介绍:
在这里插入图片描述
YOLOv10实战:30行左右代码构建基于YOLOv10的实时视频监控
代码如下:运行后电脑摄像头自动开启,实时检测摄像头内的目标。

import cv2
from ultralytics import YOLOv10model = YOLOv10("yolov10s.pt")
cap = cv2.VideoCapture(0)
while True:ret, frame = cap.read()if not ret:break  # 如果没有读取到帧,退出循环results = model.predict(frame)# 遍历每个预测结果for result in results:# 结果中的每个元素对应一张图片的预测boxes = result.boxes  # 获取边界框信息for box in boxes:x1, y1, x2, y2 = map(int, box.xyxy[0])cls = int(box.cls[0])conf = float(box.conf[0])cv2.rectangle(frame, (x1, y1), (x2, y2), (255, 0, 0), 2)cv2.putText(frame, f'{model.names[cls]} {conf:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,(255, 0, 0), 2)# 显示带有检测结果的帧cv2.imshow('YOLOv10实时检测', frame)# 按'q'键退出if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放资源
cap.release()
cv2.destroyAllWindows()

检测结果:
在这里插入图片描述
检测效果确实很赞!
参考:基于YOLOv10实现你的第一个视觉AI大模型

四、 YOLO版本简史

YOLO(You Only Look Once)系列目标检测模型的发展历程中,不同版本是由不同的研究团队研发的。以下是各个版本的研发团队简介:

YOLOv1

研发团队:Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi

  • 机构:华盛顿大学和Facebook AI Research (FAIR)
  • 发布时间:2016年
  • 简介:YOLOv1是YOLO系列的第一个版本,提出了一种统一的目标检测方法,能够在单次前向传递中预测物体边界和类别。

YOLOv2 (YOLO9000)

研发团队:Joseph Redmon, Ali Farhadi

  • 机构:华盛顿大学
  • 发布时间:2017年
  • 简介:YOLOv2在YOLOv1的基础上进行了改进,引入了多尺度训练和Batch Normalization等技术,并扩展了模型的检测能力(YOLO9000)来识别9000种类别。

YOLOv3

研发团队:Joseph Redmon, Ali Farhadi

  • 机构:华盛顿大学
  • 发布时间:2018年
  • 简介:YOLOv3进一步改进了网络结构,引入了残差网络和多尺度特征金字塔,使其在精度和速度上有显著提升。

YOLOv4

研发团队:Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao

  • 机构:Alexey Bochkovskiy的独立研究与台湾国立中山大学
  • 发布时间:2020年
  • 简介:YOLOv4在YOLOv3的基础上,结合了许多新技术如CSPNet、Mish激活函数和SAM,进一步提高了性能。

YOLOv5

研发团队:Glenn Jocher

  • 机构:Ultralytics LLC
  • 发布时间:2020年
  • 简介:YOLOv5由Ultralytics团队开发,注重易用性和快速部署,提供了多种预训练模型和丰富的工具,便于在各种应用中使用。

YOLOv6

研发团队:Meituan-Dianping

  • 机构:美团
  • 发布时间:2022年
  • 简介:YOLOv6专注于工业应用中的高效目标检测,优化了模型的推理速度和精度,适合在生产环境中部署。

YOLOv7

研发团队:Wong Kin-Yiu, Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao

  • 机构:台湾国立中山大学
  • 发布时间:2022年
  • 简介:YOLOv7进一步优化了网络架构和训练策略,使得模型在速度和精度上都达到了新的高度。

YOLOv8

研发团队:Ultralytics LLC

  • 机构:Ultralytics LLC
  • 发布时间:2023年
  • 简介:YOLOv8延续了YOLOv5的开发理念,通过改进的架构和训练方法,进一步提升了目标检测的性能和效率。

YOLOv9

研发团队:Ultralytics LLC

  • 机构:Ultralytics LLC
  • 发布时间:2024年
  • 简介:YOLOv9在YOLOv8的基础上,针对大规模数据集和复杂场景进行了优化,提供了更高的检测精度和速度。

YOLOv10

研发团队:Ao Wang, Hui Chen, Lihao Liu, Kai Chen, Zijia Lin, Jungong Han, Guiguang Ding

  • 机构:清华大学
  • 发布时间:2024年
  • 简介:YOLOv10通过优化模型架构和消除非极大值抑制(NMS),显著提升了实时目标检测的性能和效率。

这些不同版本的YOLO模型在各自的时代都对目标检测技术做出了重要贡献,推动了这一领域的发展。各个版本在精度、速度和易用性上都有不同的侧重点,以满足不同应用场景的需求。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【简单理解化】 内存函数及它的模拟实现

本文章谈论memcpy,memcmp,memmove,memset函数 目录 1.memcpy的使用和模拟实现 2.memmove的使用和模拟实现 3.memset的使用 4.memcmp函数的使用 1.memcpy的使用和模拟实现 该函数用于从源内存块复制指定数量的字节到目标内存块 1 void * memcpy ( void * destination, const voi…

DVWA-CSRF

CSRF Low 观察后端代码,只要password_new等于password_conf就可以修改密码。由于这两个参数是通过GET传递的,所以直接构造payload。 http://192.168.20.156/DVWA/vulnerabilities/csrf/?password_newpass&password_confpass&ChangeChange# 这…

Windows开启远程桌面

搜索并进入【远程桌面设置】 ​​ 开启远程桌面 ​​​ ipconfig​命令查看ip地址,并使用地址在另一台电脑远程登录此电脑 选择其他账户登录,输入用户和密码 ​​ ​​ 成功登录 ​​

判断经纬度是否在某个城市内

一、从高德获取指定城市边界经纬度信息 通过apifox操作&#xff1a; 二、引入第三方jar包&#xff1a; maven地址&#xff1a;https://mvnrepository.com/ maven依赖&#xff1a; <dependency><groupId>org.locationtech.jts</groupId><artifactId>…

Spring Boot整合Jasypt 库实现配置文件和数据库字段敏感数据的加解密

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…

【全开源】Shopro社区团购(小程序版)

邻里间的购物新选择 基于Fastadmin后端管理系统Uniapp客户端&#xff08;仅支持微信小程序&#xff09;开发&#xff0c;生鲜果蔬社区团购的不二之选、快速搭建社区团购平台、让你的产品走进上千个社区。线上团购线下自提&#xff0c;玩转社区消费新模式提供专业、优质的社区团…

如何解决chatgpt出现503 bad gateway的问题

昨日&#xff0c;ChatGPT官网挂了&#xff0c;也就是使用web网页端访问的用户&#xff0c;会出现 bad gateway 情况。我们去ChatGPT官方的监控查看&#xff0c;已经展示相关错误。 影响的范围有&#xff1a; 影响了 ChatGPT 所有计划的所有用户。影响包括所有与 ChatGPT 相关…

实验四、零比特插入《计算机网络》

但凡这句话有一点用的话也不至于一点用都没有。 目录 一、实验目的 二、实验内容 三、实验小结 一、实验目的 掌握零比特插入原理及方法使用任意编程语言实现零比特插入方法。 二、实验内容 掌握零比特插入原理及方法 点对点协议 PPP&#xff08;Point-to-Point Protoco…

计算机三级等级考试

计算机等级考试&#xff1a; 一&#xff1a;理论知识考试 100分考60分 1&#xff1a;题库 二&#xff1a;技能考试 100分考60分 1&#xff1a;写文档 项目概述 功能描述 数据库设计 UML 绘 图 用例图 与 包图&#xff08;两个图&#xff09; 2&…

网络运维简介

目录 1.网络运维的定义 2.诞生背景 3.网络运维的重要性 4.优点 5.缺点 6.应用场景 6.1.十个应用场景 6.2.数据中心运维 7.应用实例 8.小结 1.网络运维的定义 网络运维&#xff08;Network Operations&#xff09;是指管理、监控和维护计算机网络以确保其高效、安全和…

校园安保巡逻机器人

2023年8月5日&#xff0c;陕西西安一高校实验室起火冒烟&#xff0c;导致学校化学实验室发生火灾。2022年8月3日&#xff0c;一名歹徒持械闯入江西吉安安福县城的一家私立幼儿园&#xff0c;对着无辜的幼儿行凶伤人&#xff0c;造成3死6伤。 像这样的事故有不断地发生&#xf…

2024首发!会声会影2024旗舰版,专业编辑新体验!

会声会影2024最新旗舰版是一款专业的视频编辑软件&#xff0c;它集成了多种高级功能&#xff0c;为用户带来极致的视频编辑体验。在这篇文章中&#xff0c;我们将详细介绍该软件的功能和特色&#xff0c;帮助用户更好地了解和使用它。 会声会影全版本绿色安装包获取链接&#…

【云岚家政】-day00-开发环境配置

文章目录 1 开发工具版本2 IDEA环境配置2.1 编码配置2.2 自动导包设置2.3 提示忽略大小写2.4 设置 Java 编译级别 3 Maven环境3.1 安装Maven3.2 配置仓库3.3 IDEA中配置maven 4 配置虚拟机4.1 导入虚拟机4.2 问题 5 配置数据库环境5.1 启动mysql容器5.2 使用MySQL客户端连接数据…

【Python数据类型的奥秘】:构建程序基石,驾驭信息之海

文章目录 &#x1f680;Python数据类型&#x1f308;1. 基本概念⭐2. 转化&#x1f44a;3. 数值运算&#x1f4a5;4. 数值运算扩展(math库常用函数) &#x1f680;Python数据类型 &#x1f308;1. 基本概念 整数&#xff08;int&#xff09;&#xff1a;整数是没有小数部分的数…

深入分析 Flink SQL 工作机制

摘要&#xff1a;本文整理自 Flink Forward 2020 全球在线会议中文精华版&#xff0c;由 Apache Flink PMC 伍翀&#xff08;云邪&#xff09;分享&#xff0c;社区志愿者陈婧敏&#xff08;清樾&#xff09;整理。旨在帮助大家更好地理解 Flink SQL 引擎的工作原理。文章主要分…

如何通过 6 种简单方法将照片从华为转移到 PC?

华为作为全球领先的智能手机供应商之一&#xff0c;最近推出了其自主研发的操作系统——HarmonyOS 2.0&#xff0c;旨在为智能手机、平板电脑和智能手表等设备提供更流畅的用户体验。随着Mate 40/P40等系列手机计划升级到HarmonyOS 2.0&#xff0c;用户可能需要将手机中的文件备…

SpringBoot+Redis发送短信

SpringBootRedis发送短信 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId&g…

[数据集][目标检测]盲道检测数据集VOC+YOLO格式2173张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2173 标注数量(xml文件个数)&#xff1a;2173 标注数量(txt文件个数)&#xff1a;2173 标注…

Spring Boot项目中,如何在yml配置文件中读取maven pom.xml文件中的properties标签下的属性值

一、前言 在最近的项目开发过程中&#xff0c;有一个需求&#xff0c;需要在Spring Boot项目的yml配置文件中读取到mave的 pom.xml文件中的properties标签下的属性值&#xff0c;这个要怎么实现呢&#xff1f; 二、技术实践 pom.xml文件中增加测试属性 <properties><…

【Flask开发实战】首页模板

一、前言 前面我们已经完成登录页面的设定&#xff0c;登录后临时调转到“hello flask”的界面。现在我们根据实际首页的设计需要&#xff0c;来完成首页相关内容的开发。一般系统首页会放一些分析数据&#xff0c;多以图表的方式展示&#xff0c;方便使用者了解信息。以防火墙…