逐步指南:使用FastAPI部署YOLO模型的步骤

简介: 逐步指南:使用FastAPI部署YOLO模型的步骤

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

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

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

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


第一部分:设置环境

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


1.1 安装Python

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


python - version


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


# Create a virtual environment (replace 'myenv' with your preferred environment name)
python -m venv myenv
# Activate the virtual environment (Windows)
myenv\Scripts\activate
# Activate the virtual environment (macOS/Linux)
source myenv/bin/activate

您应该看到终端提示更改,指示虚拟环境处于活动状态。注意:请记得将'myenv'替换为您喜欢的虚拟环境名称。


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


pip install fastapi uvicorn opencv-python-headless numpy


1.4 YOLO模型设置要使用YOLO,您需要安装来自ultralytics的yolov8库。


pip install ultralytics

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


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


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

2.1 项目结构

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


mkdir object_detection_api
cd object_detection_api


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


2.2 初始化FastAPI应用程序

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


touch main.py


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


2.3. 创建您的第一个路由

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




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


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


2.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 上运行。


4.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结合的步骤。


3.1. 加载YOLOv8模型

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

import cv2
import numpy as np
from ultralytics import YOLO


3.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.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可以被用户访问了。在本节中,我们将探讨各种部署选项,包括用于测试的本地部署和用于生产环境的基于云的部署。


4.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端点。


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

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

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


具体的部署方法可能取决于您选择的云提供商。通常需要:a. 在选择的云平台上创建帐户并设置项目。b. 配置部署设置,例如指定运行时环境和依赖项。c. 使用平台的部署工具或CLI将FastAPI应用程序部署到云中。d. 根据需要监视和扩展您部署的应用程序。


4.3. 选择正确的服务器

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

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


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

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

相关文章
|
3月前
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
241 1
|
3月前
|
Python
[python]使用gunicorn部署fastapi服务
[python]使用gunicorn部署fastapi服务
160 1
|
3月前
|
Java UED 自然语言处理
Struts 2 国际化竟有如此神奇魔力?快来揭开多语言支持的 Web 应用神秘面纱
【8月更文挑战第31天】在全球化背景下,Web应用需适应多种语言环境。Struts 2凭借其强大的国际化(i18n)支持,简化了多语言应用开发。通过不同语言的资源文件,它能自动匹配用户语言偏好,优化用户体验并扩展用户群。下面是一个示例:创建`messages.properties`(英语)与`messages_zh_CN.properties`(中文),并在Struts 2的Action类及JSP页面中调用`getText()`方法及Struts标签展示相应语言内容。此外,在struts.xml中指定资源文件,以确保框架正确加载对应语言包。通过这些步骤,开发者可以轻松实现应用的多语言支持。
65 0
|
3月前
|
监控 应用服务中间件 网络安全
FastAPI部署大揭秘!如何从代码到云端,让你的Web应用华丽变身生产环境之星?
【8月更文挑战第31天】FastAPI是一款基于Python 3.6+异步特性的高性能Web框架,深受开发者喜爱。本文详细介绍了将FastAPI应用部署到生产环境的过程,包括准备应用、使用Uvicorn测试、配置Gunicorn和Nginx、设置反向代理及监控日志等关键步骤。通过这些步骤,确保应用安全高效地运行在生产环境中,实现高性能与高可扩展性。
413 0
|
3月前
|
机器学习/深度学习 人工智能 编解码
【机器学习】阿里Qwen-VL:基于FastAPI私有化部署你的第一个AI多模态大模型
【机器学习】阿里Qwen-VL:基于FastAPI私有化部署你的第一个AI多模态大模型
598 0
|
3月前
|
Python
[python]使用gunicorn部署fastapi服务
【8月更文挑战第6天】以下是使用`gunicorn`部署`FastAPI`服务的简要步骤:首先安装`FastAPI`与`gunicorn`;创建一个简单的`FastAPI`应用,例如定义根路径返回"Hello World";保存代码为`main.py`;在应用目录中启动`gunicorn`服务,如`gunicorn main:app -w 4 -b 0.0.0.0:8000`,其中`-w 4`指定4个工作进程,`-b`绑定至所有IP的8000端口。这样就完成了基础部署,可通过`http://服务器IP:8000/`访问应用。
105 0
|
JSON Kubernetes API
使用FastAPI部署Ultralytics YOLOv5模型
YOLO是You Only Look Once(你只看一次)的缩写,它具有识别图像中的物体的非凡能力,在日常应用中会经常被使用。所以在本文中,我们将介绍如何使用FastAPI的集成YOLOv5,这样我们可以将YOLOv5做为API对外提供服务。
285 5
|
JSON NoSQL API
全面拥抱 FastApi — 响应模型
全面拥抱 FastApi — 响应模型
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
机器学习/深度学习 Python
【Python】fastapi框架之Web部署机器学习模型
【Python】fastapi框架之Web部署机器学习模型