首页 >后端开发 >Python教程 >在 AWS EC2 上使用 OpenCV、Flask、Gemini Vision 和 GitHub Actions CI/CD 构建人工智能驱动的实时对象检测

在 AWS EC2 上使用 OpenCV、Flask、Gemini Vision 和 GitHub Actions CI/CD 构建人工智能驱动的实时对象检测

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-22 19:36:12601浏览

介绍:

想象一个系统,它可以实时分析实时视频源、解释场景并智能地响应有关环境的问题,就像一个有眼睛的虚拟助手一样。这就是将用于视频处理的 OpenCV 等尖端技术与 Google 的 Gemini 视觉模型相结合,利用其最新的“gemini-1.5-flash-latest”模型的潜力。

在本文中,我将指导您构建一个实时对象检测系统,该系统使用实时视频流和人工智能驱动的场景分析来提供富有洞察力、上下文感知的响应。我们将在 AWS EC2 上部署该应用程序,为可扩展性和实际使用奠定基础,同时采用 Github Actions 进行自动化 CI/CD,确保无缝更新管道。

在本教程结束时,您将拥有一个功能齐全的人工智能驱动系统,可供部署,并有信心针对各种用例对其进行扩展和自定义。


项目结构

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

核心组件

  1. 实时视频捕捉(OpenCV) app.py 中的 WebcamCapture 类处理视频流:
self.stream = cv2.VideoCapture(0)  # Open the default webcam

这确保了高效、线程安全的帧捕获和处理。

  1. 人工智能支持的物体检测(Google Gemini) 使用 Gemini 模型,我们分析帧以实现实时场景理解:
self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

  1. Flask 后端 Flask 应用程序提供视频流、AI 查询和系统状态检查的端点:

/video_feed:直播视频。

/process_query:根据用户输入和视频帧处理人工智能驱动的分析。

  1. 前端用户界面

    index.html 文件提供了一个响应式 Web 界面,用于与系统交互。它捕获用户查询并显示实时人工智能响应。

    先决条件

  2. AWS 帐户。

  3. 注册域名(例如 example.com)。

  4. Google Cloud 帐户或 Open AI 帐户

  5. 在您的存储库中配置的 GitHub 操作。

4. SSH和Linux命令行工具的基础知识。

应用程序克隆和部署

第 1 步:克隆存储库、生成 API 并将应用程序文件推送到 Github

A.克隆存储库

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS

B.生成您的 API 密钥并添加到 .env 文件
我。从文本编辑器左侧的可用选项手动创建 .env 文件(我使用 VScode)

在终端上运行:
$ touch .env

然后将这些添加到 .env

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True

ii.登录 Google Cloud 并按照以下步骤生成您的 API 密钥。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

a.导航至 API 和服务部分

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

b.单击“凭据”,然后按照以下其他步骤操作

创建凭证> API Key ,然后生成API Key。请记住记下您的 API 密钥的名称。您还可以在此过程中为其命名。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

复制生成的 API 密钥,返回到您的 .env 文件并将 your_google_api_key 替换为您刚刚复制的密钥。

c.启用 Gemini API
搜索 Gemini API 并单击启用

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

确认您的 API 密钥位于“启用的 Gemini API”下的“指标和凭证”部分。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

iii.创建一个 .gitignore 文件并添加 .env 到该文件中,这样就不会推送到 github。

注意:标准做法是确保秘密和环境变量不暴露给公众。因此,在推送到 Github 时需要 .gitignore 来忽略其中添加的文件。

B.推送到存储库。
我。使用应用程序名称创建一个Github存储库,然后按照以下命令推送到github

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

注意:将存储库名称更改为您的存储库名称

第 2 步:设置 Github Actions 环境 Secret

配置项目所需的 AWS IAM 用户密钥和环境变量。

通过 AWS 部署项目需要将 AWS 密钥以及本地添加到 .env 的环境变量添加到 Github Actions 环境中。这是为了确保能够访问用于部署的特定 AWS 账户,并确保必要的环境变量在部署环境中可用。

我。导航到存储库中的“设置”

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

ii。单击“秘密和变量”>行动

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

iii。添加您的秘密和变量,如下所示

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

![秘密](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7t6vyolkj2jyq85oswh7.png

步骤 3:设置 AWS EC2 实例

我。启动 EC2 实例

  • 使用 AWS 管理控制台启动 EC2 实例(例如 Ubuntu 22.04)。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

  • 选择实例类型(例如,免费套餐用户选择 t2.micro)。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

  • 创建并下载用于 SSH 访问的密钥对(.pem 文件)。

创建一个新的密钥对或使用现有的密钥对。

如果您要创建新的密钥对,请单击“创建密钥对”并为其指定一个您选择的名称。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

选择密钥对类型为 RSA

文件格式为 .pem

密钥对会自动下载到您的系统。

  • 配置安全组

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

允许以下入站规则:
我。 HTTP(端口 80):用于为您的应用程序提供服务。
二. HTTPS(端口 443):用于安全访问。
三. SSH(端口 22):用于管理访问。

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

  • 单击启动实例并允许实例完全启动。

现在,一旦状态显示“正在运行”,您的实例就可以使用了。

ii。配置 SSH 访问的密钥对(.pem 密钥)

对于 Mac book 用户或使用 bash 终端的 Linux 用户,请配置用于 SSH 访问的密钥对:

a.使用 VScode 或 Xcode 打开下载的 .pem 密钥

b.在终端上,从根目录导航到 .ssh 目录(~)

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

c.使用nano或vim文本编辑器在.ssh目录中创建.pem文件;我将在本教程中使用 nano。

如果没有安装nano,请安装它。

适用于 MacBook 用户

self.stream = cv2.VideoCapture(0)  # Open the default webcam

对于 Linux 用户

self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

安装完毕后,使用 nano 在 .ssh 目录中创建 .pem 文件。

确保要创建的文件具有您的 .pem 文件的确切名称。

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS

然后复制已经打开的.pem文件并将要创建的.pem粘贴到.ssh目录中。

按 Ctrl X,然后按 Y,然后按 Enter 保存。

d.更改 .pem 文件权限

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True

iii。访问实例 - SSH 到您的 EC2 实例:

单击实例 ID 。实例处于运行状态后,选择连接选项

进入连接页面后,转到 SSH 客户端

Building AI-Powered Real-Time Object Detection with OpenCV, Flask, Gemini Vision, and GitHub Actions CI/CD on AWS EC2

然后复制页面上的最后一个命令,如下所示:

$ git init
$ git add .
$ git commit -m "first commit"
$ git branch -M main
$ git remote add origin https://github.com/Abunuman/repository-name.git
git push -u origin main

将其粘贴到您的终端上并按 Enter 键。您应该无缝连接。

Windows 用户

  • Windows 设置

在 Windows 计算机上打开 CMD

找到存储 .pim 文件的所需目录

理想情况下,我们可以从这个目录运行复制的 ssh 命令,并且我们应该能够连接到 EC2。然而,有时我们在运行 ssh 命令时会遇到安全权限错误。

我们必须更改 .pem 文件的权限。

为此,请按照以下步骤操作。

  1. 找到 .pem 文件夹,右键单击该文件并选择属性

  2. 转到“安全”选项卡

  3. 转到“高级”选项卡

  4. 单击禁用继承

  5. 此高级选项还显示其他用户拥有 .pem 文件的所有权限。删除所有其他用户的权限

  6. 添加您尝试连接到 EC2 的用户(如果用户列表中尚未存在)。

  7. 启用该用户的所有权限。

理想情况下,按照这些步骤,您应该不会遇到错误。

从 CMD 提示符运行 SSH 命令

权限修复后,会提示成功连接EC2

现在您已成功完成这些步骤,您可以在 EC2 实例上从 Windows CMD 运行命令。

iv.安装依赖项 - 更新软件包列表并安装必要的软件包:

通过 SSH 连接到您的 EC2 实例后,安装 EC2 上的依赖项。

在连接的终端上,运行以下命令:

project/
├── app.py              # Flask application code
├── requirements.txt    # Python dependencies
├── templates/
│   └── index.html     # Frontend UI
└── .env               # Environment variables (API keys, etc.)

检查安装的python3版本,确保是3.12

self.stream = cv2.VideoCapture(0)  # Open the default webcam

第 2 步:部署应用程序

设置应用程序

将app.py、index.html和requirements.txt传输到EC2实例:

self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

第 3 步:为 CI/CD 配置 GitHub 操作

在存储库中创建工作流文件,添加 .github/workflows/main.yml 文件:

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS

结论

在本教程中,我们开始了构建和部署实时对象检测系统的全面旅程,该系统无缝集成用于实时视频捕获的 OpenCV 和用于智能场景分析的 Google ChatGoogleGenerativeAI。从在本地配置应用程序到使用自定义域和 SSL 将其安全地部署在 AWS EC2 上,我们涵盖了将您的想法转变为实用且可扩展的解决方案的每个基本步骤。

该项目强调了结合 Flask、OpenCV 和 AI 等尖端技术来解决现实问题的力量,同时确保云部署的最佳实践。通过执行这些步骤,您不仅部署了强大的 AI 驱动的系统,而且还确保了可扩展性、安全性和高效的 CI/CD 管道。

以上是在 AWS EC2 上使用 OpenCV、Flask、Gemini Vision 和 GitHub Actions CI/CD 构建人工智能驱动的实时对象检测的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn