使用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.mzph.cn/diannao/23200.shtml

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

相关文章

服务器端口聚合

服务器网口的band模式主要涉及到网卡绑定(bonding)技术,该技术将两个或更多的物理网卡绑定成一个虚拟网卡,从而实现本地网卡的冗余、带宽扩容和负载均衡。在服务器网络配置中,这种技术有助于提高网络连接的稳定性和性能…

论工业交换机的工业级芯片的重要性

工业交换机作为工业网络中的重要设备,其性能和稳定性对整个工业生产过程至关重要。而工业级芯片作为工业交换机的核心组成部分,更是承载着重要的功能和责任。工业级芯片具有承受恶劣环境的能力,能够在高温、高压、强电磁干扰等恶劣条件下稳定…

html+CSS+js部分基础运用15

1、完成输入框内容的实时反向输出。 2、银行账户余额变动自动通知项目。 设计要求:单击按钮后,余额按照输入框的数额减少,同时将按钮式的提示信息(金额)同步改变。利用侦听属性实现余额发生变化时发出提示信息&#x…

Django render()函数页面渲染

1, render() 函数 在Django框架中,render() 函数是一个非常有用的快捷方式,用于从视图函数返回一个完整的HTTP响应。它负责将给定的模板与上下文数据结合,渲染出最终的HTML页面,并返回一个HttpResponse对象。 from d…

全能大模型AIGC产品的使用体验、选择倾向与未来展望

随着人工智能技术的迅猛发展,AIGC(人工智能生成内容)领域正迎来前所未有的繁荣。其中,全能大模型产品以其强大的生成能力和广泛的应用场景,吸引了众多用户的关注。腾讯元宝APP的上线更是为这一领域注入了新的活力。本文…

第10周 企业认证、分布式事务,分布式锁方案落地

第10周 企业认证、分布式事务,分布式锁方案落地 1. 基于Redis提高请求响应**********************************************************************************************本周我们将对企业入驻认证的流程进行落地,并且结合分布式缓存中间件Redis与Redisson进行相关的技术…

企业(园区)智慧能源双碳平台解决方案

园区作为工业企业集聚区,在提供了大量基础设施和公共服务的同时也成为了碳排放的主要源头。工业园区的耗能约占全社会总耗能的69%,碳排放占全国总排放约31%。工业园区节能、减耗、提质、减碳工作的落实,是我国实现碳达峰碳中和目标的必然要求…

【POSIX】使用iconv库将UTF-8字符串转换为UTF-16字符串

使用<iconv.h>来进行字符串编码的转换 #include <iconv.h> #include <iostream> #include <string.h> #include <unistd.h> #include <memory> #include <fcntl.h>// 需要链接iconv库// iconv -l 命令可列出所有支持的格式 // exam…

python之排序函数np.argsort()函数介绍

np.argsort()是NumPy库中的一个函数&#xff0c;用于返回数组中元素排序后的索引值数组。它根据数组的值从小到大进行排序&#xff0c;并返回相应的索引数组。 1. 基本语法 下面是np.argsort()的语法&#xff1a; numpy.argsort(a, axis-1, kindNone, orderNone) 参…

【python】ModuleNotFoundError: No module named ‘timm’

成功解决“ModuleNotFoundError: No module named ‘timm’”错误的全面指南 一、引言 在Python编程中&#xff0c;经常会遇到各种导入模块的错误&#xff0c;其中“ModuleNotFoundError: No module named ‘timm’”就是一个典型的例子。这个错误意味着你的Python环境中没有安…

springboot项目Redis统计在线用户

springboot项目Redis统计在线用户 我的项目有个显示用户的遗忘曲线&#xff0c;需要统计在线用户以计算他们的曲线 思考了两种方案&#xff0c;但都是用Redis的bitmap数据结构Bitmap是一种特殊类型的数组&#xff0c;其中每个元素只能存储0或1。在Redis中&#xff0c;Bitmap实际…

Python程序判断变量名是否符合标识符的定义

在 Python 中&#xff0c;标识符&#xff08;如变量名、函数名等&#xff09;必须遵循一些规则。这些规则包括&#xff1a; 标识符的第一个字符必须是字母&#xff08;a-z 或 A-Z&#xff09;或下划线&#xff08;_&#xff09;。标识符的其余部分可以由字母、数字或下划线组成…

UML的用例图

UML用例图 用例图示例 假设我们要描述一个图书馆管理系统的UML用例图。 参与者&#xff1a; Librarian&#xff08;图书管理员&#xff09;Member&#xff08;会员&#xff09;Guest&#xff08;访客&#xff09; 用例&#xff1a; Borrow Book&#xff08;借书&#xff09;R…

Web安全:Web体系架构存在的安全问题和解决方案

「作者简介」&#xff1a;2022年北京冬奥会网络安全中国代表队&#xff0c;CSDN Top100&#xff0c;就职奇安信多年&#xff0c;以实战工作为基础对安全知识体系进行总结与归纳&#xff0c;著作适用于快速入门的 《网络安全自学教程》&#xff0c;内容涵盖系统安全、信息收集等…

【毕业设计之微信小程序系列】基于微信小程序的餐厅点餐小程序的设计与实现

《基于微信小程序的餐厅点餐小程序的设计与实现》 项目效果图 目录大纲 摘要 1、选题及其意义 1.1、设计项目的名称 1.2、研究意义 2、需求分析 2.1、用户需求分析 2.2、功能需求分析 2.3、非功能需求分析 3、系统相关技术概述 3.1、餐饮平台开发相关技术 3.1.1、微信小程序 …

【BP时序预测】基于鱼鹰算法OOA优化BP神经网络实现温度数据预测算法研究附matlab代码

以下是一个大致的步骤和MATLAB代码框架&#xff1a; 数据准备&#xff1a;准备用于训练和测试的温度数据集。 初始化BP神经网络&#xff1a;定义神经网络的结构&#xff08;如隐藏层的数量和每层的神经元数量&#xff09;。 定义适应度函数&#xff1a;这是优化算法的目标函数…

读AI未来进行式笔记04数字医疗与机器人

1. 数字医疗 1.1. 20世纪的“现代医学”得益于史无前例的科学突破&#xff0c;使得医疗的方方面面都得到改善&#xff0c;让人类预期寿命从1900年的31岁提高到2017年的72岁 1.2. 现有的医疗数据库和流程将实现数字化 1.2.1. 患者记录 1.2.…

实时语音交互数字人解决方案,满足不同场景需求

北京美摄网络科技有限公司凭借其领先的实时语音交互数字人解决方案&#xff0c;为企业带来了全新的沟通体验与商业机遇。 一、技术革新&#xff0c;开启交互新篇章 美摄科技实时语音交互数字人解决方案&#xff0c;以先进的人工智能和机器学习技术为基础&#xff0c;实现了文…

速盾:网站使用cdn后,如何做动静分离?

动静分离是指将网站的静态资源&#xff08;如图片、CSS、JS等&#xff09;与动态内容&#xff08;如数据库查询、服务器脚本等&#xff09;分别存放在不同的服务器或环境中&#xff0c;以提高网站的性能和稳定性。而CDN&#xff08;Content Delivery Network&#xff09;是一种…

批量提取 Word 文档中的全部图片

步骤 1、打开 WinRAR 任选一个现成的压缩包双击打开 WinRAR &#xff0c;或从开始菜单打开 WinRAR 2、直接把要提取图片的 Word 文档拖入 WinRAR 菜单区域 1 → 2 → 3&#xff0c;WinRAR 资源管理目录中的 media 就是该 Word 文档所要提取的全部图片所在文件夹 按住&#x…