For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/ai-machine-learning/ai-deploy-rock-paper-scissors.md.

AI Deploy - Tutoriel - Créer une application pour jouer à pierre papier ciseaux avec YOLOv8

Voir en Markdown

Comment créer une application basée sur la vision par ordinateur et YOLOv8

Objectif

L’objectif de ce tutoriel est d’expliquer comment déployer une application pour jouer au jeu « pierre papier ciseaux » à l’aide du modèle YOLOv8.

Pour cela, vous utiliserez Streamlit, un framework Python qui transforme des scripts en applications web partageables. Vous apprendrez également à construire et utiliser une image Docker personnalisée pour une application Streamlit.

Prérequis

En pratique

Vous allez suivre différentes étapes pour construire votre application Streamlit.

  • Plus d’informations sur les fonctionnalités de Streamlit sont disponibles ici.
  • Tous les fichiers sources sont disponibles sur GitHub.

Écrire l’application Streamlit

Créez un fichier Python nommé app.py et collez-y le code suivant :

from ultralytics import YOLO
import streamlit as st

#######################################################################################################################
## 🎯 The aim of this script is to create an Rock/Paper/Scissors application based on a trained model (from YOLOv8). ##
## 🏞 The uploaded snapshots are stored in /workspace/                                                               ##
## 🧠 The train model is stored in /workspace/model/rock-paper-scissors/                                             ##
#######################################################################################################################

# Save uploaded photo
def save_photo(photo):
    
    photoAbsolutePath = '/workspace/' + photo.name
    
    with open(photoAbsolutePath,'wb') as f:
         f.write(photo.getbuffer())
    
    return photoAbsolutePath

# main
if __name__ == '__main__':

    st.write("## Welcome on the 🪨 📄 ✂️ game!")
    # 🧠 Load the model
    model = YOLO('/workspace/model/rock-paper-scissors/best.torchscript')

    # 📸 Camera input
    img_file_buffer = st.camera_input("Take your picture in real time:")
    if img_file_buffer is not None:
      photoPath = save_photo(img_file_buffer) 

      # 🔎 Prediction
      results = model.predict(photoPath, verbose=True, save=True, conf=0.5)

      # 📈 Display results
      for r in results:
        for c in r.boxes.cls:
          st.write(r.names[int(c)])

Écrire le fichier requirements.txt de l’application

Le fichier requirements.txt nous permettra d’indiquer tous les modules nécessaires au fonctionnement de notre application. Ce fichier sera utile lors de l’écriture du Dockerfile.

ultralytics==8.0.194 
opencv-python-headless==4.8.1.78 
streamlit==1.27.2 

Écrire le Dockerfile de l’application

Votre Dockerfile doit commencer par l’instruction FROM indiquant l’image parente à utiliser. Dans notre cas, nous choisissons de partir d’une image python:3.8 :

# 🐳 Base image to execute Python application
FROM python:3.8

# 👱 Userspace for AI Deploy
WORKDIR /workspace
# 📚 Libraries for the application
ADD requirements.txt /workspace
RUN pip install -r requirements.txt
RUN apt-get update
RUN apt-get install ffmpeg libsm6 libxext6  -y

# 🐍 Python application
ADD app.py /workspace

# 👮 Rootless execution
RUN chown -R 42420:42420 /workspace

# 🚀 Run the Python application
CMD [ "streamlit" , "run" , "/workspace/app.py", "--server.address=0.0.0.0" ]

ENV HOME=/workspace

Construire l’image Docker depuis le Dockerfile

Lancez l’une des commandes suivantes depuis le répertoire du Dockerfile pour construire l’image de votre application :

# Build the image using your machine's default architecture
docker build . -f Dockerfile -t <shared-regristry-name>/rock-paper-scissors-app:1.0.0

# Build image targeting the linux/amd64 architecture
docker buildx build --platform linux/amd64 -f Dockerfile -t <shared-regristry-name>/rock-paper-scissors-app:1.0.0 .
  • La première commande construit l’image en utilisant l’architecture par défaut de votre système. Cela peut fonctionner si votre machine utilise déjà l’architecture linux/amd64, qui est requise pour exécuter des containers avec nos produits AI. Cependant, sur des systèmes ayant une architecture différente (par exemple ARM64 sur Apple Silicon), l’image obtenue ne sera pas compatible et ne pourra pas être déployée.
  • La seconde commande cible explicitement l’architecture linux/amd64 afin de garantir la compatibilité avec nos services AI. Elle nécessite buildx, qui n’est pas installé par défaut. Si vous n’avez jamais utilisé buildx, vous pouvez l’installer en exécutant : docker buildx install

Envoyer l’image vers le registre partagé

Warning

Avertissement Le registre partagé d’AI Deploy ne doit être utilisé qu’à des fins de test. Nous vous recommandons d’attacher votre propre registre Docker. Plus d’informations à ce sujet sont disponibles ici. Les images envoyées sur ce registre sont destinées uniquement aux workloads AI Tools et ne seront pas accessibles pour des usages externes.

Trouvez l’adresse de votre registre partagé en lançant cette commande :

ovhai registry list

Connectez-vous au registre partagé avec vos identifiants habituels d’utilisateur AI Platform :

docker login -u `<user>` -p <password> `<shared-registry-address>`

Envoyez l’image compilée vers le registre partagé :

docker push `<shared-registry-address>`/rock-paper-scissors-app:1.0.0

Lancer l’app AI Deploy

La commande suivante démarre une nouvelle app exécutant votre application Streamlit :

ovhai app run \
	--name rock-paper-scissors-app \
	--cpu 1 \
	--default-http-port 8501 \
	--volume rock-paper-scissors-model@GRA:/workspace/model:RO:cache \
	--unsecure-http \
	`<shared-registry-address>`/rock-paper-scissors-app:1.0.0
Info

Notes

  • --default-http-port 8501 indique que le port à atteindre sur l’URL de l’app est 8501.

  • --cpu 1 indique que nous ne demandons qu’un seul CPU pour cette app.

  • Pensez à ajouter l’attribut --unsecure-http si vous souhaitez que votre application soit accessible sans authentification.

Aller plus loin

Si vous avez besoin d'une formation ou d'une assistance technique pour la mise en oeuvre de nos solutions, contactez votre commercial ou cliquez sur ce lien pour obtenir un devis et demander une analyse personnalisée de votre projet à nos experts de l’équipe Professional Services.

Nous voulons vos retours !

N’hésitez pas à nous faire part de vos questions, retours et suggestions pour améliorer le service :

Cette page vous a-t-elle aidé ?