CV / YOLOv8

YOLOv8s_object

Version small de la série de détection d'objets YOLOv8, légère mais avec une précision de détection améliorée par rapport au nano, idéale pour le déploiement rapide sur l'edge.

347 téléchargements
Taille
~12.5MB
Mémoire
1GB+
Précision
INT8

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
sudo docker run --rm \
  --name rk3588-yolov8s-objec \
  --privileged \
  --net=host \
  -e PYTHONUNBUFFERED=1 \
  -e RKNN_LOG_LEVEL=0 \
  --device /dev/video1:/dev/video1 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolov8:latest \
  python3 web_detection.py --model_path model/yolov8s.rknn --video video/test.mp4

API REST

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

Curl
curl -X POST "http://127.0.0.1:8000/api/models/yolov8n/predict" -F "realtime=true"
# Or without file parameters
curl -X POST "http://127.0.0.1:8000/api/models/yolov8n/predict"
Python
import requests
import json
resp = requests.post(
    "http://127.0.0.1:8000/api/models/yolov8n/predict",
    json={},
    timeout=30
)
result = resp.json()
print(json.dumps(result, indent=2, ensure_ascii=False))

Détails du modèle

reComputer RK

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer Docker :

bash
# Télécharger le script d'installation
curl -fsSL https://get.docker.com -o get-docker.sh
# Installer en utilisant le miroir Aliyun
sudo sh get-docker.sh --mirror Aliyun
# Démarrer Docker et activer le démarrage automatique
sudo systemctl enable docker
sudo systemctl start docker

2. Exécuter le projet (Une commande, aperçu double mode)

Ce projet prend en charge l'aperçu simultané via Interface graphique locale et Navigateur Web. Le programme détecte automatiquement l'environnement d'affichage et passe en mode Web si aucun écran n'est connecté.

Étape A : Configurer les permissions d'affichage (Optionnel)

Si vous avez un moniteur connecté et souhaitez voir la fenêtre localement :

bash
xhost +local:docker

Étape B : Exécuter en un clic

Pour RK3588 :

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    --device /dev/video0:/dev/video0 \
    --device /dev/dri/renderD128:/dev/dri/renderD128 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolov8:latest \
    python3 web_detection.py --model_path model/yolov8n.rknn --video video/test.mp4

Pour RK3576 :

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    --device /dev/video0:/dev/video0 \
    --device /dev/dri/renderD128:/dev/dri/renderD128 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-yolov8:latest \
    python3 web_detection.py --model_path model/yolov8n.rknn --video video/test.mp4

Accès via : http://<Board_IP>:8000

Remarque : Si vous avez besoin de classes personnalisées, vous pouvez ajouter le montage -v $(pwd)/class_config.txt:/app/class_config.txt \ et le paramètre --class_path. Le programme utilise par défaut les 80 classes COCO.

Exemple :

bash
sudo docker run --rm --privileged --net=host \
    -e PYTHONUNBUFFERED=1 \
    -e RKNN_LOG_LEVEL=0 \
    -v $(pwd)/class_config.txt:/app/class_config.txt \
    --device /dev/video0:/dev/video0 \
    --device /dev/dri/renderD128:/dev/dri/renderD128 \
    -v /proc/device-tree/compatible:/proc/device-tree/compatible \
    ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-yolov8:latest \
    python3 web_detection.py --model_path model/yolov8n.rknn --video video/test.mp4 --class_path class_config.txt

🔌 Documentation de l'API

Ce projet fournit des interfaces RESTful compatibles avec la norme API Ultralytics Cloud, prenant en charge la détection d'objets via le téléchargement d'images, de vidéos ou l'appel direct de la caméra.

1. Interface d'inférence de modèle (Predict)

Point de terminaison : POST /api/models/yolov8/predict

Paramètres de la requête (Multipart/Form-Data) :

  • file : (Optionnel) Fichier image à détecter.
  • video : (Optionnel) Fichier vidéo MP4 à détecter.
  • timestamp : (Optionnel) Horodatage dans le fichier vidéo (secondes), retourne les résultats de détection pour la trame à ce point. La valeur par défaut est 0.
  • realtime : (Optionnel) Booléen. Si true ou si aucun paramètre file/video n'est fourni, retourne les résultats de détection pour la trame actuelle de la caméra.
  • conf : (Optionnel) Seuil de confiance pour une requête unique, plage 0.0-1.0.
  • iou : (Optionnel) Seuil IOU NMS pour une requête unique, plage 0.0-1.0.

Exemples d'utilisation :

1. Détection d'image :

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8/predict" -F "file=@/home/cat/001.jpg"

2. Détection de trame vidéo spécifique :

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8/predict" -F "video=@/home/cat/test.mp4" -F "timestamp=5.5"

3. Obtenir la détection de la trame caméra actuelle :

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8/predict" -F "realtime=true"
# Ou sans paramètres de fichier
curl -X POST "http://127.0.0.1:8000/api/models/yolov8/predict"

Format de réponse (JSON) :

json
{
  "success": true,
  "source": "video frame at 5.5s",
  "predictions": [
    {
      "class": "person",
      "confidence": 0.92,
      "box": { "x1": 100, "y1": 200, "x2": 300, "y2": 500 }
    }
  ],
  "image": { "width": 1280, "height": 720 }
}

2. Interface de configuration système (Config)

Utilisée pour ajuster dynamiquement les seuils pour les flux vidéo en temps réel et l'inférence par défaut.

Obtenir la configuration actuelle

  • Point de terminaison : GET /api/config
  • Réponse : {"obj_thresh": 0.25, "nms_thresh": 0.45}

Mettre à jour la configuration système

  • Point de terminaison : POST /api/config
  • Corps de la requête (JSON) : {"obj_thresh": 0.3, "nms_thresh": 0.5}
  • Réponse : {"status": "success"}

3. Interface de flux vidéo en temps réel (Video Feed)

Obtenez un flux vidéo MJPEG en temps réel avec les boîtes de détection dessinées, pouvant être directement intégré dans les balises HTML <img>.

  • Point de terminaison : GET /api/video_feed
  • Exemple d'utilisation : <img src="http://<Board_IP>:8000/api/video_feed">

🛠️ Guide du développeur (Recommandations de production)

Description du code

  • web_detection.py :
    • Prise en charge double mode : Intègre FastAPI, prenant en charge à la fois le rendu local et la sortie de streaming MJPEG.
    • Adaptatif à l'environnement : Détecte automatiquement la variable d'environnement DISPLAY, ignorant silencieusement l'initialisation GUI si elle n'est pas présente.
    • Inférence RKNN : Encapsule l'initialisation RKNN, le chargement du modèle et la logique d'inférence multi-cœur.
    • Chargement dynamique : Prend en charge le chargement dynamique de configuration de classes via --class_path.
    • Post-traitement : Logique de décodage de boîtes et NMS spécifique à YOLOv8.

Modification des modèles

  1. Placez le modèle .rknn entraîné et converti dans le répertoire model/.
  2. Ajoutez l'argument --model_path à la commande d'exécution pour pointer vers le nouveau modèle.