Heim > Backend-Entwicklung > Python-Tutorial > Aufbau einer KI-gestützten Echtzeit-Objekterkennung mit OpenCV, Flask, Gemini Vision und GitHub Actions CI/CD auf AWS EC2

Aufbau einer KI-gestützten Echtzeit-Objekterkennung mit OpenCV, Flask, Gemini Vision und GitHub Actions CI/CD auf AWS EC2

Mary-Kate Olsen
Freigeben: 2024-12-22 19:36:12
Original
556 Leute haben es durchsucht

EINFÜHRUNG:

Stellen Sie sich ein System vor, das Live-Video-Feeds in Echtzeit analysieren, Szenen interpretieren und intelligent auf Fragen zur Umgebung reagieren kann – genau wie ein virtueller Assistent mit Augen. Dies ist das Potenzial der Kombination modernster Technologien wie OpenCV für die Videoverarbeitung und des Gemini-Vision-Modells von Google unter Nutzung des neuesten „gemini-1.5-flash-latest“-Modells.

In diesem Artikel werde ich Sie durch den Aufbau eines Echtzeit-Objekterkennungssystems führen, das Live-Videostreaming und KI-gestützte Szenenanalyse nutzt, um aufschlussreiche, kontextbezogene Antworten zu liefern. Wir stellen die Anwendung auf AWS EC2 bereit und schaffen so die Voraussetzungen für Skalierbarkeit und realen Einsatz, während wir Github Actions für automatisiertes CI/CD einsetzen und so eine nahtlose Update-Pipeline gewährleisten.

Am Ende dieses Tutorials verfügen Sie über ein voll funktionsfähiges KI-gestütztes System, das für die Bereitstellung bereit ist und Sie die Sicherheit haben, es für verschiedene Anwendungsfälle zu erweitern und anzupassen.


PROJEKTSTRUKTUR

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

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Kernkomponenten

  1. Echtzeit-Videoaufnahme (OpenCV) Die WebcamCapture-Klasse in app.py verwaltet das Video-Streaming:
self.stream = cv2.VideoCapture(0)  # Open the default webcam
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dies gewährleistet eine effiziente, threadsichere Frame-Erfassung und -Verarbeitung.

  1. KI-gestützte Objekterkennung (Google Gemini) Mithilfe des Gemini-Modells analysieren wir Frames, um Szenen in Echtzeit zu verstehen:
self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  1. Flask-Backend Die Flask-Anwendung bietet Endpunkte für Video-Streaming, KI-Abfragen und Systemstatusprüfungen:

/video_feed: Streamt Live-Videos.

/process_query: Verarbeitet KI-gestützte Analysen basierend auf Benutzereingaben und Videobildern.

  1. Frontend-Benutzeroberfläche

    Die Datei index.html stellt eine reaktionsfähige Weboberfläche für die Interaktion mit dem System bereit. Es erfasst Benutzeranfragen und zeigt KI-Antworten in Echtzeit an.

    VORAUSSETZUNGEN

  2. Ein AWS-Konto.

  3. Ein registrierter Domainname (z. B. example.com).

  4. Ein Google Cloud-Konto oder ein Open AI-Konto

  5. GitHub-Aktionen in Ihrem Repository konfiguriert.

4. Grundkenntnisse der SSH- und Linux-Befehlszeilentools.

Klonen und Bereitstellen von Anwendungen

Schritt 1: Klonen Sie das Repository, generieren Sie die API und übertragen Sie die Anwendungsdateien auf Github

A. Klonen Sie das Repository

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

B. Generieren Sie Ihren API-Schlüssel und fügen Sie ihn einer .env-Datei hinzu
ich. Erstellen Sie eine .env-Datei entweder manuell über die Optionen auf der linken Seite Ihres Texteditors (ich habe VScode verwendet)
ODER
Führen Sie auf dem Terminal Folgendes aus:
$ touch .env

Dann fügen Sie diese in die .env ein

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True
Nach dem Login kopieren
Nach dem Login kopieren

ii. Melden Sie sich bei Google Cloud an und befolgen Sie diese Schritte, um Ihren API-Schlüssel zu generieren.

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

a. Navigieren Sie zum Abschnitt „API & Dienste“

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

b. Klicken Sie auf Anmeldeinformationen und befolgen Sie dann die anderen Schritte unten

Anmeldeinformationen erstellen > API-Schlüssel, dann wird der API-Schlüssel generiert. Denken Sie daran, den Namen Ihres API-Schlüssels zu notieren. Sie können ihm während des Vorgangs auch einen Namen geben.

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

Kopieren Sie den generierten API-Schlüssel, gehen Sie zurück zu Ihrer .env-Datei und ersetzen Sie your_google_api_key durch den Schlüssel, den Sie gerade kopiert haben.

c. Aktivieren Sie die Gemini-API
Suchen Sie nach Gemini API und klicken Sie auf AKTIVIEREN

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

Bestätigen Sie, dass sich Ihr API-Schlüssel im Abschnitt METRICS and Credentials unter der Enabled Gemini API befindet.

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

iii. Erstellen Sie eine .gitignore-Datei und fügen Sie .env zur Datei hinzu, damit sie nicht an Github übertragen wird.

Hinweis: Standardmäßig wird sichergestellt, dass Geheimnisse und Umgebungsvariablen nicht der Öffentlichkeit zugänglich gemacht werden. Daher ist ein .gitignore erforderlich, um darin hinzugefügte Dateien beim Pushen an Github zu ignorieren.

B. Push to Repository.
ich. Erstellen Sie ein Github-Repository mit dem Anwendungsnamen und befolgen Sie die folgenden Befehle, um es an Github zu übertragen

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

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hinweis: Ändern Sie den Repository-Namen in Ihren Repository-Namen

Schritt 2: Richten Sie Umgebungsgeheimnisse für Github-Aktionen ein

Konfigurieren Sie Ihre AWS IAM-Benutzergeheimnisse und Umgebungsvariablen, die für das Projekt benötigt werden.

Die Bereitstellung des Projekts über AWS erfordert, dass AWS-Geheimnisse sowie die lokal zu Ihrer .env hinzugefügten Umgebungsvariablen zur Github Actions-Umgebung hinzugefügt werden. Dadurch soll der Zugriff auf das spezifische AWS-Konto sichergestellt werden, das für die Bereitstellung bestimmt ist, und außerdem wird sichergestellt, dass die erforderlichen Umgebungsvariablen in der Bereitstellungsumgebung verfügbar sind.

ich. Navigieren Sie in Ihrem Repository zu „Einstellungen“

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

ii. Klicken Sie auf Geheimnisse und Variablen > Aktionen

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

iii. Fügen Sie Ihre Geheimnisse und Variablen wie unten beschrieben hinzu

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

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

Schritt 3: Einrichten der AWS EC2-Instanz

ich. Starten Sie eine EC2-Instanz

  • Verwenden Sie die AWS-Managementkonsole, um eine EC2-Instanz zu starten (z. B. 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

  • Wählen Sie einen Instanztyp aus (z. B. t2.micro für Benutzer des kostenlosen Tarifs).

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

  • Erstellen Sie ein Schlüsselpaar (.pem-Datei) und laden Sie es für den SSH-Zugriff herunter.

Erstellen Sie ein neues Schlüsselpaar oder verwenden Sie ein vorhandenes.

Wenn Sie ein neues Schlüsselpaar erstellen, klicken Sie auf Schlüsselpaar erstellen und geben Sie ihm einen Namen Ihrer Wahl.

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

Wählen Sie als Schlüsselpaartyp RSA aus

Dateiformat als .pem

Das Schlüsselpaar wird automatisch auf Ihr System heruntergeladen.

  • Sicherheitsgruppen konfigurieren

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

Erlauben Sie die folgenden eingehenden Regeln:
ich. HTTP (Port 80): Zur Bereitstellung Ihrer Anwendung.
ii. HTTPS (Port 443): Für sicheren Zugriff.
iii. SSH (Port 22): Für Verwaltungszugriff.

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

  • Klicken Sie auf Instanz starten und lassen Sie die Instanz vollständig starten.

Jetzt ist Ihre Instanz einsatzbereit, sobald der Status „Wird ausgeführt“ anzeigt.

ii. Konfigurieren Sie das Schlüsselpaar (.pem-Schlüssel) für den SSH-Zugriff

Für Mac-Book-Benutzer oder Linux-Benutzer mit Bash-Terminal konfigurieren Sie Ihr Schlüsselpaar für den SSH-Zugriff folgendermaßen:

a. Öffnen Sie den heruntergeladenen .pem-Schlüssel mit VScode oder Xcode

b. Navigieren Sie auf Ihrem Terminal vom Stammverzeichnis (~) zum Verzeichnis .ssh

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

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

c. Erstellen Sie mit den Texteditoren nano oder vim eine .pem-Datei im .ssh-Verzeichnis. Ich werde in diesem Tutorial Nano verwenden.

Installieren Sie nano, wenn Sie es nicht installiert haben.

Für MacBook-Benutzer

self.stream = cv2.VideoCapture(0)  # Open the default webcam
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Für Linux-Benutzer

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

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Erstellen Sie nach der Installation die .pem-Datei im .ssh-Verzeichnis mit nano.

Stellen Sie sicher, dass die zu erstellende Datei den genauen Namen Ihrer .pem-Datei trägt.

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Kopieren Sie dann die bereits geöffnete .pem-Datei und fügen Sie die zu erstellende .pem-Datei in das .ssh-Verzeichnis ein.

Drücken Sie Strg X, dann Y und dann die Eingabetaste, um zu speichern.

d. Ändern Sie die .pem-Dateiberechtigung

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True
Nach dem Login kopieren
Nach dem Login kopieren

iii. Greifen Sie auf die Instanz zu – SSH in Ihre EC2-Instanz:

Klicken Sie auf die Instanz-ID. Sobald die Instanz ausgeführt wird, wählen Sie die Verbindungsoption

aus

Sobald Sie sich auf der Verbindungsseite befinden, gehen Sie zum SSH-Client

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

Kopieren Sie dann den letzten Befehl auf der Seite, der so aussieht:

$ 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
Nach dem Login kopieren

Fügen Sie dies in Ihr Terminal ein und drücken Sie die Eingabetaste. Sie sollten eine nahtlose Verbindung herstellen.

Für Windows-Benutzer

  • Windows-Setup

Öffnen Sie CMD auf Ihrem Windows-Rechner

Suchen Sie das gewünschte Verzeichnis, in dem die PIM-Datei gespeichert ist

Idealerweise können wir von diesem Verzeichnis aus den kopierten SSH-Befehl ausführen und sollten in der Lage sein, eine Verbindung zu EC2 herzustellen. Manchmal erhalten wir jedoch einen Sicherheitsberechtigungsfehler, wenn wir den SSH-Befehl ausführen.

Wir müssen die Berechtigungen für die .pem-Datei ändern.

Befolgen Sie dazu die folgenden Schritte.

  1. Suchen Sie den .pem-Dateiordner, klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie Eigenschaften

  2. Gehen Sie zur Registerkarte „Sicherheit“

  3. Gehen Sie zur Registerkarte „Erweitert“

  4. Klicken Sie auf Vererbung deaktivieren

  5. Diese erweiterten Optionen zeigen auch andere Benutzer an, die über alle Berechtigungen für die PEM-Datei verfügen. Berechtigung für alle anderen Benutzer entfernen

  6. Fügen Sie den Benutzer hinzu, mit dem Sie eine Verbindung zu EC2 herstellen möchten, falls er nicht bereits in der Benutzerliste vorhanden ist.

  7. Alle Berechtigungen für diesen Benutzer aktivieren.

Im Idealfall sollte bei diesen Schritten kein Fehler auftreten.

Führen Sie den SSH-Befehl über die CMD-Eingabeaufforderung aus

Sobald die Berechtigungen festgelegt sind, stellt die Eingabeaufforderung erfolgreich eine Verbindung zu EC2 her

Jetzt haben Sie die Schritte erfolgreich abgeschlossen und können Befehle von Windows CMD auf der EC2-Instanz ausführen.

iv.Abhängigkeiten installieren – Aktualisieren Sie die Paketliste und installieren Sie die erforderlichen Pakete:

Nachdem Sie über SSH eine Verbindung zu Ihrer EC2-Instanz hergestellt haben, installieren Sie Abhängigkeiten auf EC2.

Führen Sie auf Ihrem verbundenen Terminal die folgenden Befehle aus:

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

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Überprüfen Sie die installierte Version von Python3 und stellen Sie sicher, dass es sich um 3.12 handelt

self.stream = cv2.VideoCapture(0)  # Open the default webcam
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 2: Bereitstellen der Anwendung

Richten Sie die Anwendung ein

Übertragen Sie app.py, index.html und require.txt an die EC2-Instanz:

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

Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Schritt 3: GitHub-Aktionen für CI/CD konfigurieren

Erstellen Sie eine Workflow-Datei in Ihrem Repository und fügen Sie eine .github/workflows/main.yml-Datei hinzu:

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

ABSCHLUSS

In diesem Tutorial haben wir uns auf eine umfassende Reise zum Aufbau und Einsatz eines Echtzeit-Objekterkennungssystems begeben, das OpenCV für die Live-Videoerfassung und Googles ChatGoogleGenerativeAI für die intelligente Szenenanalyse nahtlos integriert. Von der lokalen Konfiguration der Anwendung bis zur sicheren Bereitstellung auf AWS EC2 mit einer benutzerdefinierten Domäne und SSL haben wir alle wesentlichen Schritte abgedeckt, um Ihre Idee in eine funktionale und skalierbare Lösung umzuwandeln.

Dieses Projekt unterstreicht die Leistungsfähigkeit der Kombination modernster Technologien wie Flask, OpenCV und KI, um reale Probleme zu lösen und gleichzeitig Best Practices für die Cloud-Bereitstellung sicherzustellen. Indem Sie diese Schritte befolgen, haben Sie nicht nur ein robustes KI-gestütztes System bereitgestellt, sondern auch Skalierbarkeit, Sicherheit und effiziente CI/CD-Pipelines sichergestellt.

Das obige ist der detaillierte Inhalt vonAufbau einer KI-gestützten Echtzeit-Objekterkennung mit OpenCV, Flask, Gemini Vision und GitHub Actions CI/CD auf AWS EC2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage