CV / PPSeg
PP-LiteSeg
PP-LiteSeg Cityscapes semantic segmentation accelerated by RKNN.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
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 8000API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "pp-liteseg-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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 :
# 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 docker2. 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èle | model/ppseg.rknn |
| Entrée | 512 x 512 RGB |
| Sortie | Masque de segmentation Cityscapes à 19 classes |
| Image de préchauffage | model/test.png |
Étape A : télécharger les images
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:
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 8000Pour RK3588:
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 8000Ouvrez 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 :
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.
| Endpoint | Fonction |
|---|---|
GET /api/health | Plateforme, noms des modèles et état de préparation. |
GET /api/video_feed | Dernière superposition colorée au format MJPEG. |
POST /api/video/upload | Téléverser un MP4 dans le champ file. |
POST /api/video/analyze | Analyser un filename téléversé. |
GET /api/video/status | Progression en arrière-plan et erreurs. |
GET /api/video/list | Vidé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
| Argument | Valeur par défaut | Description |
|---|---|---|
--platform | Obligatoire | rk3576 ou rk3588. |
--model_dir | model | Répertoire contenant ppseg.rknn et test.png. |
--camera_id | -1 | Indice de caméra ; -1 désactive la capture. |
--video, --video_path | Aucun | Vidéo locale en boucle ; remplace la caméra. |
--host / --port | 0.0.0.0 / 8000 | Adresse 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
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_ppsegEntrées et sorties
Input: image, video frame, or camera frame. Output: Cityscapes mask, class pixel counts, and overlay.