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

介绍:

想象一个系统,它可以实时分析实时视频源、解释场景并智能地响应有关环境的问题,就像一个有眼睛的虚拟助手一样。这就是将用于视频处理的 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
说明列表和数组之间元素操作的性能差异。说明列表和数组之间元素操作的性能差异。May 06, 2025 am 12:15 AM

ArraySareBetterForlement-WiseOperationsDuetofasterAccessCessCessCessCessCessAndOptimizedImplementations.1)ArrayshaveContiguucuulmemoryfordirectAccesscess.2)列出sareflexible butslible dueTopotentEnallymideNamicizing.3)forlarargedAtaTasetsetsetsetsetsetsetsetsetsetsetlib

如何有效地对整个Numpy阵列进行数学操作?如何有效地对整个Numpy阵列进行数学操作?May 06, 2025 am 12:15 AM

在NumPy中进行整个数组的数学运算可以通过向量化操作高效实现。 1)使用简单运算符如加法(arr 2)可对数组进行运算。 2)NumPy使用C语言底层库,提升了运算速度。 3)可以进行乘法、除法、指数等复杂运算。 4)需注意广播操作,确保数组形状兼容。 5)使用NumPy函数如np.sum()能显着提高性能。

您如何将元素插入python数组中?您如何将元素插入python数组中?May 06, 2025 am 12:14 AM

在Python中,向列表插入元素有两种主要方法:1)使用insert(index,value)方法,可以在指定索引处插入元素,但在大列表开头插入效率低;2)使用append(value)方法,在列表末尾添加元素,效率高。对于大列表,建议使用append()或考虑使用deque或NumPy数组来优化性能。

如何使Unix和Windows上的Python脚本可执行?如何使Unix和Windows上的Python脚本可执行?May 06, 2025 am 12:13 AM

tomakeapythonscriptexecutableonbothunixandwindows:1)Addashebangline(#!/usr/usr/bin/envpython3)Andusechmod Xtomakeitexecutableonix.2)onWindows,确保pytythonisinsinstalledandassociatedwithedandassociatedwith.pyuunwith.pyun.pyfiles,oruseabatchfile(runuseabatchfile(rugitter)。

试图运行脚本时,应该检查一下是否会发现'找不到命令”错误?试图运行脚本时,应该检查一下是否会发现'找不到命令”错误?May 06, 2025 am 12:03 AM

当遇到“commandnotfound”错误时,应检查以下几点:1.确认脚本存在且路径正确;2.检查文件权限,必要时使用chmod添加执行权限;3.确保脚本解释器已安装并在PATH中;4.验证脚本开头的shebang行是否正确。这样做可以有效解决脚本运行问题,确保编码过程顺利进行。

为什么数组通常比存储数值数据列表更高?为什么数组通常比存储数值数据列表更高?May 05, 2025 am 12:15 AM

ArraySareAryallyMoremory-Moremory-forigationDataDatueTotheIrfixed-SizenatureAntatureAntatureAndirectMemoryAccess.1)arraysStorelelementsInAcontiguxufulock,ReducingOveringOverheadHeadefromenterSormetormetAdata.2)列表,通常

如何将Python列表转换为Python阵列?如何将Python列表转换为Python阵列?May 05, 2025 am 12:10 AM

ToconvertaPythonlisttoanarray,usethearraymodule:1)Importthearraymodule,2)Createalist,3)Usearray(typecode,list)toconvertit,specifyingthetypecodelike'i'forintegers.Thisconversionoptimizesmemoryusageforhomogeneousdata,enhancingperformanceinnumericalcomp

您可以将不同的数据类型存储在同一Python列表中吗?举一个例子。您可以将不同的数据类型存储在同一Python列表中吗?举一个例子。May 05, 2025 am 12:10 AM

Python列表可以存储不同类型的数据。示例列表包含整数、字符串、浮点数、布尔值、嵌套列表和字典。列表的灵活性在数据处理和原型设计中很有价值,但需谨慎使用以确保代码的可读性和可维护性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

功能强大的PHP集成开发环境

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中