CV / YOLOv8

YOLOv8n_object

Versión Nano de la serie YOLOv8 de detección de objetos, ligera y eficiente, adecuada para despliegue en el borde.

347 descargas
Tamaño
~4.3MB
Memoria
1GB+
Precisión
INT8

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

Primeros pasos

Desplegar
sudo docker run --rm \
  --name rk3588-yolov8n-object \
  --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/yolov8n.rknn --video video/test.mp4

API REST

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

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

Detalles del modelo

reComputer RK

Inicio rapido

1. Instalar Docker

Ejecute los siguientes comandos en la placa de desarrollo para instalar Docker:

bash
# Descargar script de instalacion
curl -fsSL https://get.docker.com -o get-docker.sh
# Instalar usando fuente espejo Aliyun
sudo sh get-docker.sh --mirror Aliyun
# Iniciar Docker y habilitar inicio automatico al arrancar
sudo systemctl enable docker
sudo systemctl start docker

2. Ejecutar el proyecto (Un comando, vista previa en modo dual)

Este proyecto admite vista previa simultanea via GUI local y Navegador web. El programa detecta automaticamente el entorno de visualizacion y cambia a modo Web si no hay pantalla conectada.

Paso A: Configurar permisos de pantalla (Opcional)

Si tiene un monitor conectado y desea ver la ventana localmente:

bash
xhost +local:docker

Paso B: Ejecucion con un clic

Para 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

Para 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

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

Nota: Si necesita clases personalizadas, puede agregar el montaje -v $(pwd)/class_config.txt:/app/class_config.txt \ y el parametro --class_path. El programa usa por defecto las 80 clases COCO.

Ejemplo:

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

Documentacion de la API

Este proyecto proporciona interfaces RESTful compatibles con el estandar Ultralytics Cloud API, admitiendo deteccion de objetos mediante carga de imagenes, videos o llamadas directas a la camara.

1. Interfaz de inferencia del modelo (Predict)

Endpoint: POST /api/models/yolov8/predict

Parametros de solicitud (Multipart/Form-Data):

  • file: (Opcional) Archivo de imagen a detectar.
  • video: (Opcional) Archivo de video MP4 a detectar.
  • timestamp: (Opcional) Marca de tiempo en el archivo de video (segundos), devuelve los resultados de deteccion para el fotograma en ese punto. El valor predeterminado es 0.
  • realtime: (Opcional) Booleano. Si es true o si no se proporcionan parametros file/video, devuelve los resultados de deteccion para el fotograma actual de la camara.
  • conf: (Opcional) Umbral de confianza para una sola solicitud, rango 0.0-1.0.
  • iou: (Opcional) Umbral NMS IOU para una sola solicitud, rango 0.0-1.0.

Ejemplos de uso:

1. Deteccion de imagen:

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

2. Deteccion de fotograma especifico de video:

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. Obtener deteccion del fotograma actual de la camara:

bash
curl -X POST "http://127.0.0.1:8000/api/models/yolov8/predict" -F "realtime=true"
# O sin parametros de archivo
curl -X POST "http://127.0.0.1:8000/api/models/yolov8/predict"

Formato de respuesta (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. Interfaz de configuracion del sistema (Config)

Se utiliza para ajustar dinamicamente los umbrales para transmisiones de video en tiempo real y la inferencia predeterminada.

Obtener configuracion actual

  • Endpoint: GET /api/config
  • Respuesta: {"obj_thresh": 0.25, "nms_thresh": 0.45}

Actualizar configuracion del sistema

  • Endpoint: POST /api/config
  • Cuerpo de solicitud (JSON): {"obj_thresh": 0.3, "nms_thresh": 0.5}
  • Respuesta: {"status": "success"}

3. Interfaz de transmision de video en tiempo real (Video Feed)

Obtenga transmision de video MJPEG en tiempo real con cuadros de deteccion dibujados, se puede incrustar directamente en etiquetas HTML <img>.

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

Guia para desarrolladores (Recomendaciones de produccion)

Descripcion del codigo

  • web_detection.py:
    • Soporte de modo dual: Integra FastAPI, admitiendo tanto renderizado local como salida de transmision MJPEG.
    • Adaptacion al entorno: Detecta automaticamente la variable de entorno DISPLAY, omitiendo silenciosamente la inicializacion de GUI si no esta presente.
    • Inferencia RKNN: Encapsula la inicializacion RKNN, carga de modelos y logica de inferencia multinucleo.
    • Carga dinamica: Admite carga dinamica de configuracion de clases via --class_path.
    • Post-procesamiento: Logica de decodificacion de cajas y NMS especifica de YOLOv8.

Modificar modelos

  1. Coloque el modelo .rknn entrenado y convertido en el directorio model/.
  2. Agregue el argumento --model_path al comando de ejecucion para apuntar al nuevo modelo.