Maison > développement back-end > Tutoriel Python > Création d'une détection d'objets en temps réel basée sur l'IA avec OpenCV, Flask, Gemini Vision et GitHub Actions CI/CD sur AWS EC2

Création d'une détection d'objets en temps réel basée sur l'IA avec OpenCV, Flask, Gemini Vision et GitHub Actions CI/CD sur AWS EC2

Mary-Kate Olsen
Libérer: 2024-12-22 19:36:12
original
556 Les gens l'ont consulté

INTRODUCTION:

Imaginez un système capable d'analyser les flux vidéo en direct en temps réel, d'interpréter les scènes et de répondre intelligemment aux questions sur l'environnement, tout comme un assistant virtuel doté d'yeux. C'est le potentiel de combiner des technologies de pointe comme OpenCV pour le traitement vidéo et le modèle de vision Gemini de Google, en tirant parti de son dernier modèle "gemini-1.5-flash-latest".

Dans cet article, je vais vous guider dans la création d'un système de détection d'objets en temps réel qui utilise le streaming vidéo en direct et l'analyse de scène basée sur l'IA pour fournir des réponses perspicaces et contextuelles. Nous déploierons l'application sur AWS EC2, ouvrant la voie à l'évolutivité et à l'utilisation dans le monde réel tout en utilisant les actions Github pour le CI/CD automatisé, garantissant ainsi un pipeline de mise à jour transparent.

À la fin de ce didacticiel, vous disposerez d'un système entièrement fonctionnel, alimenté par l'IA, prêt à être déployé, avec la confiance nécessaire pour l'étendre et le personnaliser pour divers cas d'utilisation.


STRUCTURE DU PROJET

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

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Composants de base

  1. Capture vidéo en temps réel (OpenCV) La classe WebcamCapture dans app.py gère le streaming vidéo :
self.stream = cv2.VideoCapture(0)  # Open the default webcam
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cela garantit une capture et un traitement des images efficaces et sécurisés.

  1. Détection d'objets basée sur l'IA (Google Gemini) À l'aide du modèle Gemini, nous analysons les images pour comprendre la scène en temps réel :
self.model = ChatGoogleGenerativeAI(model="gemini-1.5-flash-latest")
response = self.chain.invoke({"prompt": prompt, "image_base64": image_base64})

Copier après la connexion
Copier après la connexion
Copier après la connexion
  1. Backend Flask L'application Flask fournit des points de terminaison pour le streaming vidéo, les requêtes IA et les vérifications de l'état du système :

/video_feed : diffuse des vidéos en direct.

/process_query : gère l'analyse basée sur l'IA en fonction des entrées de l'utilisateur et des images vidéo.

  1. Interface utilisateur frontale

    Le fichier index.html fournit une interface Web réactive pour interagir avec le système. Il capture les requêtes des utilisateurs et affiche les réponses de l'IA en temps réel.

    PRÉREQUIS

  2. Un compte AWS.

  3. Un nom de domaine enregistré (par exemple, exemple.com).

  4. Un compte Google Cloud ou un compte Open AI

  5. Actions GitHub configurées dans votre référentiel.

4. Connaissance de base des outils de ligne de commande SSH et Linux.

CLONAGE ET DÉPLOIEMENT D'APPLICATIONS

Étape 1 : clonez le référentiel, générez l'API et transférez les fichiers d'application vers Github

A. Cloner le référentiel

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Copier après la connexion
Copier après la connexion
Copier après la connexion

B. Générez votre clé API et ajoutez-la à un fichier .env
je. Créez un fichier .env soit manuellement à partir des options disponibles sur le côté gauche de votre éditeur de texte (j'ai utilisé VScode)
OU
Sur le terminal, exécutez :
$ touch .env

Ensuite, ajoutez-les dans le .env

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True
Copier après la connexion
Copier après la connexion

ii. Connectez-vous à Google Cloud et suivez ces étapes pour générer votre clé API.

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

a. Accédez à la section API et services

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

b. Cliquez sur Identifiants puis suivez les autres étapes ci-dessous

Créer des informations d'identification > Clé API, la clé API est alors générée. Pensez à noter le nom de votre clé API. Vous pouvez également lui donner un nom au cours du processus.

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

Copiez la clé API générée, revenez à votre fichier .env et remplacez your_google_api_key par la clé que vous venez de copier.

c. Activer l'API Gemini
Recherchez l'API Gemini et cliquez sur ACTIVER

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

Confirmez que votre clé API se trouve dans la section MÉTRIQUES et informations d'identification sous l'API Gemini activée.

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

iii. Créez un fichier .gitignore et ajoutez .env au fichier afin qu'il ne soit pas poussé vers github.

N.B. : La pratique standard consiste à garantir que les secrets et les variables d'environnement ne sont pas exposés au public. D'où la nécessité pour un .gitignore d'ignorer les fichiers qui y sont ajoutés lors de la transmission vers Github.

B. Pousser vers le référentiel.
je. Créez un référentiel Github avec le nom de l'application et suivez les commandes ci-dessous pour pousser vers github

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

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

N.B : remplacez le nom du référentiel par le nom de votre référentiel

Étape 2 : Configurer les secrets de l'environnement des actions Github

Configurez vos secrets utilisateur AWS IAM et les variables d'environnement nécessaires au projet.

Le déploiement du projet via AWS nécessite que les secrets AWS ainsi que les variables d'environnement ajoutées localement à votre .env soient ajoutés à l'environnement Github Actions. Il s'agit de garantir l'accès au compte AWS spécifique destiné au déploiement et également de garantir que les variables d'environnement nécessaires sont disponibles dans l'environnement de déploiement.

je. Accédez aux paramètres de votre référentiel

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

ii. Cliquez sur Secrets et variables > Actions

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

iii. Ajoutez vos secrets et variables comme ci-dessous

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

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

Étape 3 : Configuration de l'instance AWS EC2

je. Lancer une instance EC2

  • Utilisez AWS Management Console pour lancer une instance EC2 (par exemple, 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

  • Sélectionnez un type d'instance (par exemple, t2.micro pour les utilisateurs du niveau gratuit).

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

  • Créez et téléchargez une paire de clés (fichier .pem) pour l'accès SSH.

Créez une nouvelle paire de clés ou utilisez-en une existante.

Si vous créez une nouvelle paire de clés, cliquez sur créer une paire de clés et donnez-lui le nom de votre choix.

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

Sélectionnez le type de paire de clés comme RSA

Format de fichier au format .pem

La paire de clés est automatiquement téléchargée sur votre système.

  • Configurer les groupes de sécurité

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

Autoriser les règles entrantes suivantes :
je. HTTP (port 80) : pour servir votre application.
ii. HTTPS (port 443) : Pour un accès sécurisé.
iii. SSH (port 22) : Pour l'accès à la gestion.

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

  • Cliquez sur Lancer l'instance et autorisez le lancement complet de l'instance.

Votre instance est désormais prête à être utilisée une fois que l'état indique « En cours d'exécution ».

ii. Configurer la paire de clés (clé .pem) pour l'accès SSH

Pour les utilisateurs de Mac book ou de Linux avec terminal bash, configurez votre paire de clés pour l'accès SSH ainsi :

a. Ouvrez la clé .pem téléchargée à l'aide de VScode ou Xcode

b. Sur votre terminal, accédez au répertoire .ssh depuis le répertoire racine (~)

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

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

c. Créez un fichier .pem dans le répertoire .ssh à l'aide des éditeurs de texte nano ou vim ; J'utiliserai nano dans ce tutoriel.

Installez nano si vous ne l'avez pas installé.

Pour les utilisateurs de MacBook

self.stream = cv2.VideoCapture(0)  # Open the default webcam
Copier après la connexion
Copier après la connexion
Copier après la connexion

Pour les utilisateurs Linux

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

Copier après la connexion
Copier après la connexion
Copier après la connexion

Après l'avoir installé, créez le fichier .pem dans le répertoire .ssh à l'aide de nano.

Assurez-vous que le fichier à créer porte le nom exact de votre fichier .pem.

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Copier après la connexion
Copier après la connexion
Copier après la connexion

Copiez ensuite le fichier .pem déjà ouvert et collez-y le .pem à créer dans le répertoire .ssh.

Appuyez sur Ctrl X, puis Y, puis Entrée pour enregistrer.

d. Modifier l'autorisation du fichier .pem

GOOGLE_API_KEY=your_google_api_key
OPENAI_API_KEY=your_openai_api_key
FLASK_DEBUG=True
Copier après la connexion
Copier après la connexion

iii. Accédez à l'instance - SSH dans votre instance EC2 :

Cliquez sur l'ID de l'instance. Une fois l'instance en cours d'exécution, sélectionnez l'option de connexion

Une fois que vous êtes sur la page de connexion, accédez au client SSH

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

Copiez ensuite la dernière commande sur la page qui ressemble à ceci :

$ 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
Copier après la connexion

Collez ceci sur votre terminal et appuyez sur Entrée. Vous devez vous connecter de manière transparente.

Pour les utilisateurs Windows

  • Configuration de Windows

Ouvrez CMD sur votre ordinateur Windows

Localisez le répertoire souhaité où le fichier .pim est stocké

Idéalement à partir de ce répertoire, nous pouvons exécuter la commande ssh copiée et nous devrions pouvoir nous connecter à EC2. Cependant, nous obtenons parfois une erreur d'autorisations de sécurité lorsque nous exécutons la commande ssh.

Nous devons modifier les autorisations sur le fichier .pem.

Pour cela, suivez les étapes ci-dessous.

  1. Localisez le dossier du fichier .pem, faites un clic droit sur le fichier et sélectionnez les propriétés

  2. Allez dans l'onglet Sécurité

  3. Aller à l'onglet Avancé

  4. Cliquez sur Désactiver l'héritage

  5. Cette option avancée montre également que les autres utilisateurs disposent de toutes les autorisations sur le fichier .pem. Supprimer l'autorisation pour tous les autres utilisateurs

  6. Ajoutez l'utilisateur avec lequel vous essayez de vous connecter à EC2 s'il n'est pas déjà présent dans la liste des utilisateurs.

  7. Activer toutes les autorisations pour cet utilisateur.

Idéalement, avec ces étapes, vous ne devriez pas rencontrer d'erreur.

Exécutez la commande SSH à partir de l'invite CMD

Une fois les autorisations corrigées, l'invite se connectera avec succès à EC2

Vous avez maintenant terminé les étapes avec succès et vous pouvez exécuter des commandes à partir de Windows CMD sur l'instance EC2.

iv.Install Dependencies - Mettez à jour la liste des packages et installez les packages nécessaires :

Après vous être connecté à votre instance EC2 via SSH, installez les dépendances sur EC2.

Sur votre terminal connecté, exécutez les commandes suivantes :

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

Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

Vérifiez la version de python3 installée, assurez-vous qu'elle est 3.12

self.stream = cv2.VideoCapture(0)  # Open the default webcam
Copier après la connexion
Copier après la connexion
Copier après la connexion

Étape 2 : Déployer l'application

Configurer l'application

Transférez app.py, index.html et Requirements.txt vers l'instance EC2 :

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

Copier après la connexion
Copier après la connexion
Copier après la connexion

Étape 3 : Configuration des actions GitHub pour CI/CD

Créez un fichier de workflow dans votre référentiel, ajoutez un fichier .github/workflows/main.yml :

$ git clone https://github.com/Abunuman/Real-Time-ODS.git
$ cd Real-Time-ODS
Copier après la connexion
Copier après la connexion
Copier après la connexion

CONCLUSION

Dans ce didacticiel, nous nous sommes lancés dans un parcours complet pour créer et déployer un système de détection d'objets en temps réel qui intègre de manière transparente OpenCV pour la capture vidéo en direct et ChatGoogleGenerativeAI de Google pour l'analyse intelligente des scènes. De la configuration locale de l'application à son déploiement sécurisé sur AWS EC2 avec un domaine personnalisé et SSL, nous avons couvert toutes les étapes essentielles pour transformer votre idée en une solution fonctionnelle et évolutive.

Ce projet met en évidence la puissance de la combinaison de technologies de pointe telles que Flask, OpenCV et l'IA pour résoudre des problèmes du monde réel tout en garantissant les meilleures pratiques de déploiement cloud. En suivant ces étapes, vous avez non seulement déployé un système robuste alimenté par l'IA, mais vous avez également assuré l'évolutivité, la sécurité et l'efficacité des pipelines CI/CD.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal