首頁 >後端開發 >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:12570瀏覽

介紹:

想像一個系統,它可以即時分析即時視訊來源、解釋場景並智慧地回應有關環境的問題,就像一個有眼睛的虛擬助理一樣。這就是將用於視訊處理的 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