CV / YOLOv5

YOLOv5s_seg

Version standard de la série de segmentation d'instance YOLOv5s_Seg, légère et efficace, conçue pour la segmentation au niveau pixel et la prédiction de masques avec un partitionnement régional précis, idéale pour le déploiement sur l'edge.

330 téléchargements
Taille
~11.3MB
Mémoire
2GB+
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-yolov5s-seg \
  --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-yolov5_seg:latest \
  python3 web_detection.py --model_path model/yolov5s-seg.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/yolov5_seg/predict" -F "realtime=true"
# Or without file parameters
curl -X POST "http://127.0.0.1:8000/api/models/yolov5_seg/predict"
Python
import requests
import json
resp = requests.post(
    "http://127.0.0.1:8000/api/models/yolov5_seg/predict",
    json={},
    timeout=30
)
result = resp.json()
print(json.dumps(result, indent=2, ensure_ascii=False))

Détails du modèle

Demarrage rapide

1. Installer Docker

Executez les commandes suivantes sur la carte de developpement pour installer Docker :

bash
# Download installation script
curl -fsSL https://get.docker.com -o get-docker.sh
# Install using Aliyun mirror source
sudo sh get-docker.sh --mirror Aliyun
# Start Docker and enable auto-start on boot
sudo systemctl enable docker
sudo systemctl start docker

2. Executer le projet (Une commande, apercu double mode)

Ce projet prend en charge l'apercu via un navigateur Web. Le projet peut etre execute avec une seule commande. De plus, une interface Fast-API est fournie pour faciliter le developpement et les tests personnalises des utilisateurs.

Etape A : Telecharger les images

bash
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3588-yolov5_seg:latest
sudo docker pull ghcr.io/Seeed-Projects/recomputer-rk-cv/rk3576-yolov5_seg:latest

Etape B : Execution 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-yolov5_seg:latest \
    python3 web_detection.py --model_path model/yolov5n_seg.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-yolov5_seg:latest \
    python3 web_detection.py --model_path model/yolov5n_seg.rknn --video video/test.mp4

Acces via : http://<Board_IP>:8000

Note : Si vous avez besoin de classes personnalisees, vous pouvez ajouter le montage -v $(pwd)/class_config.txt:/app/class_config.txt \ et le parametre --class_path. Le programme utilise par defaut 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-yolov5_seg:latest \
    python3 web_detection.py --model_path model/yolov5n-seg.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 segmentation d'instance via le telechargement d'images, de videos ou l'appel direct de la camera.

1. Interface d'inference du modele (Predict)

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

Parametres de la requete (Multipart/Form-Data) :

  • file : (Optionnel) Fichier image a detecter.
  • video : (Optionnel) Fichier video MP4 a detecter.
  • timestamp : (Optionnel) Horodatage dans le fichier video (secondes), retourne les resultats de detection pour la trame a ce point. La valeur par defaut est 0.
  • realtime : (Optionnel) Booleen. Si true ou si aucun parametre file/video n'est fourni, retourne les resultats de detection pour la trame actuelle de la camera.
  • conf : (Optionnel) Seuil de confiance pour une requete unique, plage 0.0-1.0.
  • iou : (Optionnel) Seuil IOU NMS pour une requete unique, plage 0.0-1.0.

Exemples d'utilisation :

1. Detection d'image :

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

2. Detection de trame video specifique :

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

3. Obtenir la detection de la trame camera actuelle :

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov5_seg/predict" -F "realtime=true"
# Or without file parameters
curl -X POST "http://127.0.0.1:8000/api/models/yolov5_seg/predict"

Format de reponse (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 },
      "polygons": [
        [100, 200], [150, 210], [160, 300]
      ]
    }
  ],
  "image": { "width": 1280, "height": 720 }
}

2. Interface de configuration systeme (Config)

Utilisee pour ajuster dynamiquement les seuils pour les flux video en temps reel et l'inference par defaut.

Obtenir la configuration actuelle

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

Mettre a jour la configuration systeme

  • Point de terminaison : POST /api/config
  • Corps de la requete (JSON) : {"obj_thresh": 0.3, "nms_thresh": 0.5}
  • Reponse : {"status": "success"}

3. Interface de flux video en temps reel (Video Feed)

Obtenez un flux video MJPEG en temps reel avec les boites de detection et les masques de segmentation dessines, pouvant etre directement integre 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 developpeur (Recommandations de production)

Description du code

  • web_detection.py :
    • Prise en charge double mode : Integre FastAPI, prenant en charge a la fois le rendu local et la sortie de streaming MJPEG.
    • Adaptatif a l'environnement : Detecte automatiquement la variable d'environnement DISPLAY, ignorant silencieusement l'initialisation GUI si elle n'est pas presente.
    • Inference RKNN : Encapsule l'initialisation RKNN, le chargement du modele et la logique d'inference multi-coeur.
    • Chargement dynamique : Prend en charge le chargement dynamique de la configuration des classes via --class_path.
    • Post-traitement : Decodage haute performance des boites englobantes base sur Numpy, NMS et extraction de contours (cv2.findContours).

Modification des modeles

  1. Placez le modele .rknn entraine et converti dans le repertoire model/.
  2. Ajoutez l'argument --model_path a la commande d'execution pour pointer vers le nouveau modele.