CV / LPRNet

LPRNet

RKNN recognizes cropped Chinese plates with a PP-OCR fallback, while the Hailo pipeline combines Tiny-YOLOv4 plate detection with LPRNet numeric OCR.

15 descargas
Precisión
RKNN / Hailo HEF

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 --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-lprnet:latest \
  python web_service.py --platform rk3576 --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": "lprnet-rknn",
  "messages": [{"role": "user", "content": "Hello"}]
}'
Python
import requests

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

Detalles del modelo

LPRNet en reComputer RK3576 y RK3588

Este servicio se basa en el módulo LPRNet de reComputer-RK-CV. Reconoce matrículas chinas de color con LPRNet y puede dirigir matrículas claras o internacionales al reconocedor PP-OCR incluido.

Información del modelo

ComponenteArchivo
Reconocedor de matrículas chinasmodel/lprnet.rknn
Alternativa para matrículas internacionales/clarasmodel/ppocr_rec.rknn
Diccionario PP-OCRmodel/ppocr_keys_v1.txt
SalidaTexto de matrícula, reconocedor, puntuaciones, cuadro e información de rechazo

La interfaz web ofrece una herramienta de selección de cuatro puntos. El cuadrilátero seleccionado se rectifica en perspectiva antes del reconocimiento.

Ejecutar el servicio

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-lprnet:latest \
  python web_service.py --platform rk3576 --model_dir /app/model \
  --camera_id -1 --host 0.0.0.0 --port 8000

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-lprnet: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. Los ID de cámara corresponden a /dev/videoN. El modo de vídeo local acepta --video o --video_path y tiene prioridad sobre la cámara.

Argumentos de inicio

ArgumentoPredeterminadoDescripción
--platformObligatoriork3576 o rk3588.
--model_dirmodelAmbos reconocedores, el diccionario y la imagen de calentamiento.
--camera_id-1Índice de cámara; -1 habilita solo las cargas.
--video, --video_pathNingunoMP4 local en bucle; prevalece sobre la cámara.
--host / --port0.0.0.0 / 8000Dirección y puerto del servicio.

El selector web de cuatro puntos permite mover cada esquina por separado. El cuadrilátero seleccionado se corrige en perspectiva y se reconoce como una sola matrícula.

REST API

Endpoint: POST /api/models/lprnet/predict

bash
curl -X POST "http://<BOARD_IP>:8000/api/models/lprnet/predict" \
  -F "file=@plate.jpg" -F "whole_image=true" \
  -F "plate_layout=auto"

Los campos importantes incluyen manual_quad, manual_box, plate_layout, min_score, max_plates y min_text_length. plate_layout=auto selecciona LPRNet para matrículas chinas de color y PP-OCR para matrículas claras/internacionales.

manual_quad es un array JSON de cuatro puntos de la imagen de origen. manual_box es [x1,y1,x2,y2] y omite la localización automática. whole_image=true indica que la matrícula ya está recortada. min_score sirve para el filtrado relativo, pero no es una probabilidad calibrada.

Ejemplo de respuesta:

json
{
  "success": true,
  "model": "lprnet",
  "result": {
    "plates": [
      {
        "text": "京A12345",
        "recognition_score": 0.91,
        "candidate_score": 1.0,
        "recognizer": "lprnet",
        "box": [0, 0, 94, 24]
      }
    ],
    "count": 1,
    "source_mode": "plate_crop"
  }
}

GET/POST /api/config gestiona min_score, max_plates, min_text_length y plate_layout. Otros endpoints incluyen GET /api/results/latest, MJPEG, carga de MP4, análisis, progreso, lista y descarga.

Alcance y limitaciones

Ninguno de los reconocedores incluidos es un detector de matrículas de extremo a extremo. Para imágenes de escenas subidas, use la herramienta de cuatro puntos o manual_quad. Los fotogramas de vídeo local se tratan como matrículas ya recortadas, mientras que los cuadros de escenas de cámara dependen de heurísticas ligeras de OpenCV. Las implementaciones de producción deben añadir un detector de matrículas específico. El servicio prioriza candidatos de matrícula brillantes frente a semáforos y luces traseras, pero estas heurísticas de procesamiento no sustituyen a un detector entrenado.

Compilar localmente

bash
docker build -f docker/rk3576/lprnet.dockerfile \
  -t rk3576-lprnet:local src/rk3576_lprnet

docker build -f docker/rk3588/lprnet.dockerfile \
  -t rk3588-lprnet:local src/rk3588_lprnet

Entradas y salidas

RKNN: cropped plate or selected region to recognized text. Hailo: traffic frame to detected plate box and CTC-decoded numeric plate text.