CV / LPRNet
LPRNet
License-plate recognition on reComputer RK3576, RK3588, and CM5 with Hailo-8 or Hailo-10H.
Elige el dispositivo que estás usando. La guía de configuración y la documentación se actualizarán en consecuencia.
Primeros pasos
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 8000API REST
Usa la API REST para ejecutar inferencia. Copia los comandos siguientes.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "lprnet-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'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 RKInicio rápido
1. Instalar Docker
Ejecute los siguientes comandos en la placa de desarrollo para instalar 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. 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
| Componente | Archivo |
|---|---|
| Reconocedor de matrículas chinas | model/lprnet.rknn |
| Alternativa para matrículas internacionales/claras | model/ppocr_rec.rknn |
| Diccionario PP-OCR | model/ppocr_keys_v1.txt |
| Salida | Texto 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
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:latestPaso B: Ejecutar con un clic
Para 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-lprnet:latest \
python web_service.py --platform rk3576 --model_dir /app/model \
--camera_id -1 --host 0.0.0.0 --port 8000Para 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-lprnet:latest \
python web_service.py --platform rk3588 --model_dir /app/model \
--camera_id -1 --host 0.0.0.0 --port 8000Abra 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:
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):
{
"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
| Argumento | Predeterminado | Descripción |
|---|---|---|
--platform | Obligatorio | rk3576 o rk3588. |
--model_dir | model | Ambos reconocedores, el diccionario y la imagen de calentamiento. |
--camera_id | -1 | Índice de cámara; -1 habilita solo las cargas. |
--video, --video_path | Ninguno | MP4 local en bucle; prevalece sobre la cámara. |
--host / --port | 0.0.0.0 / 8000 | Direcció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
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_lprnetEntradas y salidas
RKNN: cropped plate or selected region to recognized text. Hailo: traffic frame to detected plate box and CTC-decoded numeric plate text.