CV / PPSeg

PP-LiteSeg

PP-LiteSeg Cityscapes semantic segmentation accelerated by RKNN.

4 téléchargements
Précision
RKNN

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 --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-ppseg:latest \
  python web_service.py --platform rk3576 --model_dir /app/model --camera_id -1 --host 0.0.0.0 --port 8000

API REST

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

Curl
curl http://localhost:8080/v1/chat/completions -d '{
  "model": "pp-liteseg-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

resp = requests.post(
    "http://localhost:8080/v1/chat/completions",
    json={"model": "pp-liteseg-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())

Détails du modèle

Démarrage rapide

1. Installer Docker

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

bash
# Docker
curl -fsSL https://get.docker.com -o get-docker.sh
# Aliyun
sudo sh get-docker.sh --mirror Aliyun
# systemd
sudo systemctl enable docker
sudo systemctl start docker

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

Ce service empaquette l’exemple PP-LiteSeg Cityscapes de reComputer-RK-CV avec inférence RKNN, aperçu Web, REST API et traitement MP4 asynchrone.

Informations sur le modèle

PropriétéValeur
Modèlemodel/ppseg.rknn
Entrée512 x 512 RGB
SortieMasque de segmentation Cityscapes à 19 classes
Image de préchauffagemodel/test.png

Étape A : télécharger les images

bash
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-ppseg:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-ppseg:latest

Étape B : exécuter en un clic

Pour RK3576:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-ppseg:latest \
  python web_service.py --platform rk3576 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

Pour RK3588:

bash
sudo docker run --rm --privileged --net=host \
  -e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
  --device /dev/dri/renderD129:/dev/dri/renderD129 \
  -v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
  ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-ppseg:latest \
  python web_service.py --platform rk3588 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

Ouvrez http://<BOARD_IP>:8000 ou /docs. Utilisez --camera_id N avec un nœud /dev/videoN mappé pour une caméra. Utilisez --video video/test.mp4 pour la vidéo fournie ; --video et --video_path sont des alias et remplacent la caméra.


🔌 Documentation de l’API

1. Interface de segmentation (Predict)

Endpoint : POST /api/models/ppseg/predict

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

Téléversez file et utilisez les paramètres facultatifs propres au modèle pour ajuster la sortie.

Exemples d’utilisation :

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/ppseg/predict" \
  -F "file=@test.png"

La réponse contient le temps d’inférence, les dimensions source et le nombre de pixels par classe. La dernière superposition du masque est servie par GET /api/video_feed.

EndpointFonction
GET /api/healthPlateforme, noms des modèles et état de préparation.
GET /api/video_feedDernière superposition colorée au format MJPEG.
POST /api/video/uploadTéléverser un MP4 dans le champ file.
POST /api/video/analyzeAnalyser un filename téléversé.
GET /api/video/statusProgression en arrière-plan et erreurs.
GET /api/video/listVidéos téléversées et générées.
GET /api/video/download/{filename}Télécharger un résultat.

2. Interface de configuration système (Config)

Les champs génériques threshold et topk sont conservés pour la compatibilité, mais ne changent pas la segmentation argmax fixe. Un modèle de remplacement doit conserver la sortie attendue de 19 classes ou nécessiter une mise à jour de la palette et du post-traitement.

Le runtime redimensionne l’entrée en 512 x 512, convertit BGR en RGB, accepte une sortie NCHW ou NHWC à 19 classes, restaure le masque par interpolation au plus proche voisin et superpose la palette Cityscapes. Les sources de conversion se trouvent dans rknn_model_zoo/examples/ppseg du projet upstream.

3. Arguments de ligne de commande

ArgumentValeur par défautDescription
--platformObligatoirerk3576 ou rk3588.
--model_dirmodelRépertoire contenant ppseg.rknn et test.png.
--camera_id-1Indice de caméra ; -1 désactive la capture.
--video, --video_pathAucunVidéo locale en boucle ; remplace la caméra.
--host / --port0.0.0.0 / 8000Adresse et port d’écoute FastAPI.

PYTHONUNBUFFERED=1 vide immédiatement les logs. RKNN_LOG_LEVEL=0 masque les messages connus et inoffensifs d’initialisation statique ; retirez-le pour diagnostiquer le démarrage RKNN.


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

Obtenez le dernier flux MJPEG annoté pour l’aperçu dans le navigateur :

  • Endpoint: GET /api/video_feed
  • Exemple d’utilisation: <img src="http://<BOARD_IP>:8000/api/video_feed">

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

Compiler localement

bash
docker build -f docker/rk3576/ppseg.dockerfile \
  -t rk3576-ppseg:local src/rk3576_ppseg

docker build -f docker/rk3588/ppseg.dockerfile \
  -t rk3588-ppseg:local src/rk3588_ppseg

Entrées et sorties

Input: image, video frame, or camera frame. Output: Cityscapes mask, class pixel counts, and overlay.