您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

使用FastAPI部署YOLO模型的步骤

时间:2023-12-06 15:00:35  来源:微信公众号  作者:小白玩转Python

在计算机视觉领域,You Only Look Once (YOLO) 算法已经崭露头角,成为一种改变游戏规则的算法。它承诺具有卓越准确性的实时目标检测,使其成为从监视和自动驾驶车辆到图像和视频分析等应用中强大的工具。然而,只有在无缝集成到实际的现实系统中时,YOLO 的真正潜力才能被充分发挥。这就是现代、快速、用于使用Python/ target=_blank class=infotextkey>Python构建API的Web框架FastAPI的用武之地,它可以轻松地成为您在部署YOLO模型时的伙伴。

使用FastAPI部署YOLO模型的步骤

想象一下能够在Web应用程序中部署一个YOLO模型,允许用户通过简单的API调用进行实时目标检测。无论您是构建智能安全系统、野生动物监测应用程序还是零售分析平台,本指南将引导您完成整个过程,从设置开发环境到使用FastAPI部署完全功能的YOLO模型。

在深入研究本教程时,您将揭示YOLO的魔力——它如何能够在眨眼之间识别图像和视频中的物体。您还将掌握将这种强大算法与FastAPI集成的艺术,这是为那些注重速度和简单性的开发人员设计的框架。通过本次旅程的结束,您将具备创建自己的实时目标检测API的工具和知识,这些API可以部署在云端、本地服务器甚至边缘设备上。

因此,无论您是经验丰富的计算机视觉工程师还是渴望探索YOLO和FastAPI世界的好奇开发人员,系好安全带吧。我们将开始一场逐步部署YOLO模型的专业之旅。准备将您的目标检测梦想变为现实吗?让我们开始吧!

使用FastAPI部署YOLO模型的步骤

第一部分:设置环境

在我们深入使用FastAPI部署YOLO模型的世界之前,我们需要确保我们的开发环境已正确设置。本节将逐步引导您完成这个过程。

1. 安装Python

首先,请确保您的系统上已安装Python。您可以从官方网站:https://www.python.org/downloads/下载最新版本的Python,或使用Anaconda等包管理器。要检查Python是否已安装,请打开终端或命令提示符运行:

python - version

2. 创建虚拟环境

为了保持项目的依赖关系隔离,最好创建一个虚拟环境。这样,您就可以避免不同项目之间的冲突。让我们使用Python的内置 venv 模块创建一个虚拟环境。打开终端并导航到项目的根目录。运行以下命令:

# Create a virtual environment (replace 'myenv' with your preferred environment name)
python -m venv myenv
# Activate the virtual environment (windows)
myenvScriptsactivate
# Activate the virtual environment (macOS/linux)
source myenv/bin/activate

您应该看到终端提示更改,指示虚拟环境处于活动状态。

注意:请记得将'myenv'替换为您喜欢的虚拟环境名称。

3. 安装依赖

现在,您正在虚拟环境中工作,是时候安装必要的依赖项了。这些包括FastAPI、Uvicorn(用于提供FastAPI应用程序的工具)、与YOLO相关的库以及您可能需要的项目的任何其他包。使用 pip 安装这些依赖项:

pip install fastapi uvicorn opencv-python-headless numpy

4. YOLO模型设置

要使用YOLO,您需要安装来自ultralytics的yolov8库。

pip install ultralytics

有了开发环境的设置,您现在已经准备好深入研究YOLO和FastAPI的激动人心的世界。在接下来的部分中,我们将探讨如何利用YOLO的强大功能进行实时目标检测,并构建一个用于提供服务的FastAPI应用程序。

第二部分:创建FastAPI应用程序

现在是时候动手构建一个FastAPI应用程序来部署模型了。本节将引导您完成设置对象检测API基础的过程。

1. 项目结构

让我们开始整理我们的项目结构。创建一个用于FastAPI项目的目录并进入其中:

mkdir object_detection_api
cd object_detection_api

在这个项目目录中,您将为FastAPI应用程序的不同组件创建文件和文件夹。

2. 初始化FastAPI应用程序

FastAPI让构建Web应用程序变得非常容易。创建一个用于FastAPI应用程序的Python脚本,通常命名为 mAIn.py :

touch main.py

现在,让我们开始编写一些代码。在您喜欢的文本编辑器或IDE中打开 main.py,并导入FastAPI,现在FastAPI应用程序初始化完成。这个应用程序将作为您的目标检测API的基础。

3. 创建您的第一个路由

在FastAPI中,您使用Python函数定义路由。让我们从一个简单的“Hello, World!”路由开始。将以下代码添加到 main.py

@App.get("/")
async def read_root():
return {"message": "Hello, World!"}

这段代码定义了一个路由,响应根URL(“/”)的GET请求,并返回一个带有“message”字段的JSON响应。

4. 本地运行FastAPI应用程序

现在,是时候在本地测试您的FastAPI应用程序了。打开终端并导航到包含 main.py 的项目目录。如果还没有激活虚拟环境,请激活:

source myenv/bin/activate # Replace 'myenv' with your environment name

接下来,使用Uvicorn运行您的FastAPI应用程序:

uvicorn main:app --reload

这个命令告诉Uvicorn从 main.py 模块运行 app 对象,并启用开发环境下的自动重新加载。您应该看到输出,指示您的FastAPI应用程序正在本地运行。默认情况下,它在 http://127.0.0.1:8000 上运行。

5. 访问Hello World路由

打开您的Web浏览器或使用 curl 等工具访问“Hello, World!”路由:

curl http://127.0.0.1:8000/

您应该收到一个带有“Hello, World!”消息的JSON响应。有了您的FastAPI应用程序运行起来,您现在可以继续进行激动人心的部分:集成YOLOv8模型进行目标检测。在接下来的部分中,我们将探讨如何准备YOLOv8模型,并将其与FastAPI无缝集成。

第三部分:将YOLOv8与FastAPI集成

现在我们已经有了FastAPI应用程序,让我们深入研究如何集成YOLOv8模型进行实时目标检测的过程。本节将引导您完成无缝将YOLOv8与FastAPI结合的步骤。

1. 加载YOLOv8模型

让我们从在FastAPI应用程序中加载YOLOv8模型开始。打开 main.py 并在文件顶部添加以下代码以导入必要的模块:

import cv2
import numpy as np
from ultralytics import YOLO

2. 创建一个目标检测路由

现在,让我们在FastAPI中创建一个路由,该路由将接受一个用于目标检测的图像。定义一个新的路由函数如下:

from fastapi import File, UploadFile
model = YOLO("yolov8n.pt")

@app.post("/detect/")
async def detect_objects(file: UploadFile):
 # Process the uploaded image for object detection
 image_bytes = await file.read()
 image = np.frombuffer(image_bytes, dtype=np.uint8)
 image = cv2.imdecode(image, cv2.IMREAD_COLOR)
 
 # Perform object detection with YOLOv8
 detections = model.predict(image)
 
 return {"detections": detections}

在这里,我们创建了一个名为 /detect/ 的路由,该路由接受上传的图像文件。我们将使用 model.predict() 在上传的图像上执行目标检测。

3. 测试目标检测路由

完成了YOLOv8的集成,现在您可以测试您的目标检测路由。使用Uvicorn启动您的FastAPI应用程序:

uvicorn main:app --reload

然后,向/detect/路由发出POST请求,上传一个图像文件进行目标检测。您可以使用curl或Postman等工具进行此操作。

curl -X POST -F "file=@image.jpg" http://127.0.0.1:8000/detect/

您将收到一个带有目标检测结果的JSON响应。恭喜!您已成功将YOLOv8与FastAPI集成,实现了实时目标检测。在接下来的部分中,我们将增强API,添加文档,并探索部署选项。

第四部分:部署FastAPI应用程序

现在您已经构建了FastAPI应用程序,是时候将其部署,使您的目标检测API可以被用户访问了。在本节中,我们将探讨各种部署选项,包括用于测试的本地部署和用于生产环境的基于云的部署。

1. 本地部署进行测试

在部署到生产环境之前,测试FastAPI应用程序在本地是否正常运行是必不可少的。要在本地运行FastAPI应用程序,请打开终端,导航到包含 main.py 的项目目录,并激活虚拟环境(如果尚未激活):

source myenv/bin/activate # Replace 'myenv' with your environment name

然后,使用Uvicorn启动FastAPI应用程序:

uvicorn main:app --reload

您的FastAPI应用程序现在应该在 http://127.0.0.1:8000/ 上可访问。您可以使用 curl 、Postman或您的Web浏览器测试API端点。

2. 用于生产的基于云的部署

当您准备将FastAPI应用程序部署到生产环境时,您有几个基于云的部署选项。一些流行的选择包括:

  • AWS(亚马逊云服务):您可以使用AWS Elastic Beanstalk、AWS Lambda或Amazon EC2等服务在AWS上部署FastAPI应用程序。
  • google Cloud Platform(GCP):GCP提供使用Google App Engine、Google Cloud Functions或Google Kube.NETes Engine(GKE)的部署选项。
  • Microsoft Azure:Azure提供使用Azure App Service、Azure Functions或Azure Kubernetes Service(AKS)的部署选项。
  • Heroku:Heroku是一个用户友好的平台,可以轻松部署Web应用程序,包括FastAPI应用程序。

具体的部署方法可能取决于您选择的云提供商。通常需要:

  • 在选择的云平台上创建帐户并设置项目。
  • 配置部署设置,例如指定运行时环境和依赖项。
  • 使用平台的部署工具或CLI将FastAPI应用程序部署到云中。
  • 根据需要监视和扩展您部署的应用程序。

3. 选择正确的服务器

在部署到基于云的服务器时,您可能可以灵活选择服务器类型。常见的选项包括:

  • HTTP服务器:您可以将FastAPI应用程序部署在传统的HTTP服务器后面,如NginxApache。这种设置有助于提高性能和安全性。
  • ASGI服务器:对于ASGI(异步服务器网关接口)部署,您可以使用Uvicorn、Hypercorn或Daphne。对于FastAPI应用程序,通常建议使用Uvicorn。
  • 无服务器:如果选择无服务器部署,您可以使用AWS Lambda、Azure Functions或Google Cloud Functions。这种方法是经济高效的,并根据需求自动缩放。

4. 持续集成和持续部署(CI/CD)

考虑实施CI/CD流水线以自动化部署过程。Jenkins、Travis CI、GitLab CI/CD和Github Actions等工具可以帮助您在将更改推送到代码仓库时自动进行测试和部署。通过遵循CI/CD的最佳实践,您可以确保平稳可靠的部署过程,降低在生产环境中出现错误的风险。



Tags:FastAPI   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
FastAPI:高性能Web框架的简介与应用
正文:在当今互联网时代,构建高性能的WebAPI是许多开发人员的关注重点。而FastAPI作为一个现代、快速的Web框架,为基于标准Python类型提示的API构建提供了强大的支持。FastAPI的...【详细内容】
2023-12-27  Search: FastAPI  点击:(101)  评论:(0)  加入收藏
使用FastAPI部署YOLO模型的步骤
在计算机视觉领域,You Only Look Once (YOLO) 算法已经崭露头角,成为一种改变游戏规则的算法。它承诺具有卓越准确性的实时目标检测,使其成为从监视和自动驾驶车辆到图像和视频...【详细内容】
2023-12-06  Search: FastAPI  点击:(157)  评论:(0)  加入收藏
高性能Python开发:解密FastAPI的高并发秘籍!
在FastAPI中解决高并发可以采取以下几种方法:异步处理(Asynchronous Processing):FastAPI内置了对异步处理的支持,可以使用async和await关键字定义异步函数。通过使用异步函数,可...【详细内容】
2023-11-06  Search: FastAPI  点击:(228)  评论:(0)  加入收藏
Python Web框架的三强之争:Flask、Django和FastAPI
出品 | OSC开源社区(ID:oschina2013)JetBrains 公布 2022 Python 开发者调查结果。完整报告地址:https://lp.jetbrains.com/zh-cn/python-developers-survey-2022/这是由 Pytho...【详细内容】
2023-10-11  Search: FastAPI  点击:(331)  评论:(0)  加入收藏
fastapi python 中的异步 io 高性能 web 框架
fastapiFastAPI 是一个基于 Python 的现代、快速(高性能)的 Web 框架,用于构建 API。它具有简单易用的语法和高度集成的特性,旨在提供高效的开发体验和出色的性能。‬项目特性 ...【详细内容】
2023-08-13  Search: FastAPI  点击:(259)  评论:(0)  加入收藏
高性能API接口构建框架:fastapi
一、fastapi简介:FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用基于类型提示的 Python 3.6 及更高版本。 二、关键特性:快速:可与 NodeJS 和 Go 比肩的极高...【详细内容】
2022-05-09  Search: FastAPI  点击:(1221)  评论:(0)  加入收藏
使用 FastAPI 和 Angular 部署机器学习模型
在本文中,我们将探讨如何为生产准备机器学习模型,并将其部署在简单的 Web 应用程序中。部署机器学习模型本身就是一门艺术。事实上,将机器学习模型成功投入生产超出了数据科学...【详细内容】
2022-03-25  Search: FastAPI  点击:(586)  评论:(0)  加入收藏
FastAPI - 一款新型的 Python Web 框架(对比 Flask)
近日只是为了想尽办法为 Flask 实现 Swagger UI 文档功能,基本上要让 Flask 配合 Flasgger, 所以写了篇 Flask 应用集成 Swagger UI 。然而不断的 Google 过程中偶然间发现了...【详细内容】
2021-12-23  Search: FastAPI  点击:(1118)  评论:(0)  加入收藏
FastAPI 大型项目模板框架
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。关键特性: 快速:可与 NodeJS 和 Go 比肩的极高性能(归功于 Star...【详细内容】
2021-05-10  Search: FastAPI  点击:(1417)  评论:(0)  加入收藏
FastAPI入门
之前一直用Flask,今年看到这个FastAPI框架,感觉还不错,体验了下,很容易就入门。开始学习FastAPI特点官方描述从官方的描述来看,有以下特点: 高性能,与NodeJS和Go相当,最快的python...【详细内容】
2020-10-12  Search: FastAPI  点击:(854)  评论:(0)  加入收藏
▌简易百科推荐
即将过时的 5 种软件开发技能!
作者 | Eran Yahav编译 | 言征出品 | 51CTO技术栈(微信号:blog51cto) 时至今日,AI编码工具已经进化到足够强大了吗?这未必好回答,但从2023 年 Stack Overflow 上的调查数据来看,44%...【详细内容】
2024-04-03    51CTO  Tags:软件开发   点击:(5)  评论:(0)  加入收藏
跳转链接代码怎么写?
在网页开发中,跳转链接是一项常见的功能。然而,对于非技术人员来说,编写跳转链接代码可能会显得有些困难。不用担心!我们可以借助外链平台来简化操作,即使没有编程经验,也能轻松实...【详细内容】
2024-03-27  蓝色天纪    Tags:跳转链接   点击:(12)  评论:(0)  加入收藏
中台亡了,问题到底出在哪里?
曾几何时,中台一度被当做“变革灵药”,嫁接在“前台作战单元”和“后台资源部门”之间,实现企业各业务线的“打通”和全域业务能力集成,提高开发和服务效率。但在中台如火如荼之...【详细内容】
2024-03-27  dbaplus社群    Tags:中台   点击:(8)  评论:(0)  加入收藏
员工写了个比删库更可怕的Bug!
想必大家都听说过删库跑路吧,我之前一直把它当一个段子来看。可万万没想到,就在昨天,我们公司的某位员工,竟然写了一个比删库更可怕的 Bug!给大家分享一下(不是公开处刑),希望朋友们...【详细内容】
2024-03-26  dbaplus社群    Tags:Bug   点击:(5)  评论:(0)  加入收藏
我们一起聊聊什么是正向代理和反向代理
从字面意思上看,代理就是代替处理的意思,一个对象有能力代替另一个对象处理某一件事。代理,这个词在我们的日常生活中也不陌生,比如在购物、旅游等场景中,我们经常会委托别人代替...【详细内容】
2024-03-26  萤火架构  微信公众号  Tags:正向代理   点击:(10)  评论:(0)  加入收藏
看一遍就理解:IO模型详解
前言大家好,我是程序员田螺。今天我们一起来学习IO模型。在本文开始前呢,先问问大家几个问题哈~什么是IO呢?什么是阻塞非阻塞IO?什么是同步异步IO?什么是IO多路复用?select/epoll...【详细内容】
2024-03-26  捡田螺的小男孩  微信公众号  Tags:IO模型   点击:(8)  评论:(0)  加入收藏
为什么都说 HashMap 是线程不安全的?
做Java开发的人,应该都用过 HashMap 这种集合。今天就和大家来聊聊,为什么 HashMap 是线程不安全的。1.HashMap 数据结构简单来说,HashMap 基于哈希表实现。它使用键的哈希码来...【详细内容】
2024-03-22  Java技术指北  微信公众号  Tags:HashMap   点击:(11)  评论:(0)  加入收藏
如何从头开始编写LoRA代码,这有一份教程
选自 lightning.ai作者:Sebastian Raschka机器之心编译编辑:陈萍作者表示:在各种有效的 LLM 微调方法中,LoRA 仍然是他的首选。LoRA(Low-Rank Adaptation)作为一种用于微调 LLM(大...【详细内容】
2024-03-21  机器之心Pro    Tags:LoRA   点击:(12)  评论:(0)  加入收藏
这样搭建日志中心,传统的ELK就扔了吧!
最近客户有个新需求,就是想查看网站的访问情况。由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的...【详细内容】
2024-03-20  dbaplus社群    Tags:日志   点击:(4)  评论:(0)  加入收藏
Kubernetes 究竟有没有 LTS?
从一个有趣的问题引出很多人都在关注的 Kubernetes LTS 的问题。有趣的问题2019 年,一个名为 apiserver LoopbackClient Server cert expired after 1 year[1] 的 issue 中提...【详细内容】
2024-03-15  云原生散修  微信公众号  Tags:Kubernetes   点击:(5)  评论:(0)  加入收藏
站内最新
站内热门
站内头条