CV / LPRNet

LPRNet

License-plate recognition on reComputer RK3576, RK3588, and CM5 with Hailo-8 or Hailo-10H.

51 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

reComputer RK

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

Paso A: Descargar las imágenes

bash
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-lprnet:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-lprnet: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-lprnet: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-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.


🔌 Documentación de la API

1. Reconocimiento de matrículas (Predict)

Endpoint: POST /api/models/lprnet/predict

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

Suba file; controle el reconocimiento con whole_image, plate_layout, manual_quad, manual_box, min_score, max_plates y min_text_length.

Ejemplos de uso:

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.

Formato de respuesta (JSON):

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"
  }
}

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

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.

3. Argumentos de línea de comandos

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.


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)

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.