Ce TD a pour objectif de vous faire découvrir comment :
- utiliser un modèle d’intelligence artificielle pour analyser une image ;
- transformer un programme Python en service web (API) ;
- manipuler des données au format JSON ;
- comprendre les bases d’une application moderne utilisée en entreprise.
À la fin de ce TD, vous serez capable de créer une API simple intégrant de l’intelligence artificielle et de la déployer dans un conteneur Docker pour garantir sa portabilité et sa reproductibilité.
Dans le monde professionnel, les modèles d’IA ne sont pas utilisés seuls. Ils sont intégrés dans des systèmes complets :
- applications web
- services cloud
- logiciels industriels
- systèmes embarqués
Ce TD vous montre comment passer de :
Script Python → Application utilisable (API)
Une entreprise peut utiliser ce type de système pour :
- détecter des personnes (sécurité)
- analyser des produits (industrie)
- compter des objets (logistique)
- automatiser des contrôles visuels
Sans API :
Script Python → Résultat local
Limites :
- utilisable uniquement sur votre machine
- non réutilisable
- non accessible
Avec une API :
Client → API → Résultat
Avantages :
- accessible via URL
- utilisable par d’autres applications
- standard du développement moderne
FastAPI permet de créer facilement une API en Python.
Avantages :
- simple à utiliser
- rapide
- documentation automatique (
/docs) - peu de code
Il transforme un script en service web
YOLO est un modèle d’intelligence artificielle qui permet de :
- détecter des objets
- localiser leur position
- donner une probabilité
Modèle rapide et utilisé en industrie
Docker permet d’exécuter une application dans un conteneur.
- problèmes d’installation
- versions incompatibles
- “ça marche chez moi”
Application + dépendances → conteneur
Même environnement partout
Image → API → YOLO → JSON + image annotée
git clone https://github.com/Tinny-Robot/Live-Object-Detection-with-Camera.git
cd Live-Object-Detection-with-Camera
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtSi vous êtes sous Windows avec caméra :
python app.pyObjectif :
- tester YOLO
- capturer une image
- comprendre le fonctionnement
pip install fastapi uvicorn python-multipartfrom fastapi import FastAPI, UploadFile, File
from fastapi.responses import FileResponse
from ultralytics import YOLO
import numpy as np
import cv2
import os
import time
OUTPUT_DIR = "outputs"
os.makedirs(OUTPUT_DIR, exist_ok=True)
app = FastAPI()
model = YOLO("yolov8n.pt")
@app.get("/")
def home():
return {"message": "API de détection d'objets"}
@app.get("/health")
def health():
return {"status": "ok"}
@app.post("/detect")
async def detect(file: UploadFile = File(...)):
contents = await file.read()
npimg = np.frombuffer(contents, np.uint8)
image = cv2.imdecode(npimg, cv2.IMREAD_COLOR)
if image is None:
return {"error": "Image invalide"}
results = model(image)
annotated_image = image
for result in results:
annotated_image = result.plot()
filename = f"result_{int(time.time())}.jpg"
output_path = os.path.join(OUTPUT_DIR, filename)
cv2.imwrite(output_path, annotated_image)
detections = []
for box in results[0].boxes:
cls_id = int(box.cls[0])
conf = float(box.conf[0])
xyxy = box.xyxy[0].tolist()
detections.append({
"class": model.names[cls_id],
"confidence": round(conf, 3),
"bbox": [round(x, 2) for x in xyxy]
})
return {
"count": len(detections),
"detections": detections,
"image_name": filename
}
@app.get("/image/{filename}")
def get_image(filename: str):
return FileResponse(f"outputs/{filename}")uvicorn main:app --reloadhttp://127.0.0.1:8000/docs
Les images détectées sont sauvegardées dans :
outputs/
http://127.0.0.1:8000/image/NOM_IMAGE.jpg
- Les warnings CUDA peuvent être ignorés
- Le modèle fonctionne en CPU
fastapi
uvicorn[standard]
python-multipart
opencv-python
ultralytics
supervisionFROM python:3.11-slim
WORKDIR /app
RUN apt-get update && apt-get install -y \
libgl1 \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender1 \
libgomp1 \
ffmpeg \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"].venv
__pycache__
*.pyc
.git
outputs
docker build -t yolo-api .Linux / WSL :
docker run --rm -p 8000:8000 -v $(pwd)/outputs:/app/outputs yolo-apiWindows PowerShell :
docker run --rm -p 8000:8000 -v ${PWD}/outputs:/app/outputs yolo-apihttp://localhost:8000/docs
- upload image
- JSON de détection
- image annotée accessible
- transformer un script IA en API
- manipuler des images
- créer un backend
- introduire Docker
Transformer un modèle d’IA en service web utilisable