CV / PPSeg

PP-LiteSeg

reComputer RK3588

Segmentación semántica de Cityscapes con PP-LiteSeg acelerada por RKNN.

57 descargas
Precisión
RKNN

Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.

Primeros pasos

Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.

Desplegar
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

API REST

Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.

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())

Detalles del modelo

Armbian 26.8.7 Gnome o posterior con OTA overlayroot: Configura el almacenamiento de Docker antes de ejecutar contenedores para evitar errores de montaje de overlay.

Inicio rápido

1. Instalar Docker

Ejecute los siguientes comandos en la placa de desarrollo para instalar 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. Ejecutar el proyecto (un comando y vista previa de doble modo)

Este servicio empaqueta el ejemplo PP-LiteSeg Cityscapes de reComputer-RK-CV con inferencia RKNN, vista previa web, REST API y procesamiento MP4 asíncrono.

Información del modelo

PropiedadValor
Modelomodel/ppseg.rknn
Entrada512 x 512 RGB
SalidaMáscara de segmentación Cityscapes de 19 clases
Imagen de calentamientomodel/test.png

Paso A: Descargar las imágenes

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

Paso B: Ejecutar con un clic

Para 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

Para 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

Abra http://<BOARD_IP>:8000 o /docs. Use --camera_id N con un nodo /dev/videoN asignado para la cámara. Use --video video/test.mp4 para el vídeo incluido; --video y --video_path son alias y prevalecen sobre la cámara.


🔌 Documentación de la API

1. Interfaz de segmentación (Predict)

Endpoint: POST /api/models/ppseg/predict

Parámetros de solicitud (Multipart/Form-Data):

Suba file y use los parámetros opcionales específicos del modelo para ajustar la salida.

Ejemplos de uso:

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

La respuesta contiene el tiempo de inferencia, las dimensiones de origen y el número de píxeles por clase. La última superposición de máscara se sirve mediante GET /api/video_feed.

EndpointFinalidad
GET /api/healthPlataforma, nombres de modelos y disponibilidad.
GET /api/video_feedÚltima superposición de máscara de color como MJPEG.
POST /api/video/uploadSubir un MP4 en el campo file.
POST /api/video/analyzeAnalizar un filename subido.
GET /api/video/statusProgreso en segundo plano y errores.
GET /api/video/listVídeos subidos y generados.
GET /api/video/download/{filename}Descargar un resultado.

2. Interfaz de configuración del sistema (Config)

Los campos genéricos threshold y topk se conservan por compatibilidad del servicio, pero no cambian la segmentación argmax fija. Un modelo de sustitución debe conservar la salida esperada de 19 clases o actualizar la paleta y el código de posprocesamiento.

El runtime redimensiona la entrada a 512 x 512, convierte BGR a RGB, acepta una salida NCHW o NHWC de 19 clases, restaura la máscara con interpolación de vecino más cercano y superpone la paleta Cityscapes. Las fuentes de conversión están en rknn_model_zoo/examples/ppseg del proyecto upstream.

3. Argumentos de línea de comandos

ArgumentoPredeterminadoDescripción
--platformObligatoriork3576 o rk3588.
--model_dirmodelDirectorio que contiene ppseg.rknn y test.png.
--camera_id-1Índice de cámara; -1 deshabilita la captura.
--video, --video_pathNingunoVídeo local en bucle; prevalece sobre la cámara.
--host / --port0.0.0.0 / 8000Dirección y puerto de escucha de FastAPI.

PYTHONUNBUFFERED=1 vacía los logs inmediatamente. RKNN_LOG_LEVEL=0 suprime mensajes conocidos e inofensivos de inicialización de modelos estáticos; elimínelo al depurar el inicio de RKNN.


Interfaz de vídeo en tiempo real (Video Feed)

Obtenga el último flujo MJPEG anotado para la vista previa en el navegador:

  • Endpoint: GET /api/video_feed
  • Ejemplo de uso: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Guía para desarrolladores (recomendaciones de producción)

Compilar localmente

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

Entradas y salidas

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