CV / LPRNet

LPRNet

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

51 téléchargements
Précision
RKNN / Hailo HEF

Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.

Pour commencer

Déployer
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

Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.

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

Détails du modèle

reComputer RK

Démarrage rapide

1. Installer Docker

Exécutez les commandes suivantes sur la carte de développement pour installer 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. Exécuter le projet (une commande, aperçu double mode)

Ce service repose sur le module LPRNet de reComputer-RK-CV. Il reconnaît les plaques chinoises colorées avec LPRNet et peut diriger les plaques claires ou internationales vers le module PP-OCR fourni.

Informations sur le modèle

ComposantFichier
Module de reconnaissance des plaques chinoisesmodel/lprnet.rknn
Solution de repli pour plaques internationales/clairesmodel/ppocr_rec.rknn
Dictionnaire PP-OCRmodel/ppocr_keys_v1.txt
SortieTexte de plaque, module utilisé, scores, boîte et informations de rejet

L’interface Web fournit un outil de sélection à quatre points. Le quadrilatère sélectionné est rectifié en perspective avant la reconnaissance.

Étape A : télécharger les images

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

Étape B : exécuter en un clic

Pour 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

Pour 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

Ouvrez http://<BOARD_IP>:8000 ou /docs. Les identifiants de caméra correspondent à /dev/videoN. Le mode vidéo locale accepte --video ou --video_path et remplace la caméra.


🔌 Documentation de l’API

1. Reconnaissance des plaques (Predict)

Endpoint : POST /api/models/lprnet/predict

Paramètres de requête (Multipart/Form-Data) :

Téléversez file ; contrôlez la reconnaissance avec whole_image, plate_layout, manual_quad, manual_box, min_score, max_plates et min_text_length.

Exemples d’utilisation :

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

Les champs importants sont manual_quad, manual_box, plate_layout, min_score, max_plates et min_text_length. plate_layout=auto choisit LPRNet pour les plaques chinoises colorées et PP-OCR pour les plaques claires/internationales.

manual_quad est un tableau JSON de quatre points dans l’image source. manual_box vaut [x1,y1,x2,y2] et contourne la localisation automatique. whole_image=true indique une plaque déjà recadrée. min_score est utile pour le filtrage relatif, mais ne constitue pas une probabilité calibrée.

Format de réponse (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. Interface de configuration système (Config)

GET/POST /api/config gère min_score, max_plates, min_text_length et plate_layout. Les autres endpoints incluent GET /api/results/latest, MJPEG, le téléversement MP4, l’analyse, la progression, la liste et le téléchargement.

3. Arguments de ligne de commande

ArgumentValeur par défautDescription
--platformObligatoirerk3576 ou rk3588.
--model_dirmodelLes deux modules de reconnaissance, le dictionnaire et l’image de préchauffage.
--camera_id-1Indice de caméra ; -1 active uniquement les téléversements.
--video, --video_pathAucunMP4 local en boucle ; remplace la caméra.
--host / --port0.0.0.0 / 8000Adresse et port du service.

Le sélecteur Web à quatre points permet de déplacer chaque coin séparément. Le quadrilatère sélectionné est corrigé en perspective et reconnu comme une seule plaque.


Interface de flux vidéo en temps réel (Video Feed)

Obtenez le dernier flux MJPEG annoté pour l’aperçu dans le navigateur :

  • Endpoint: GET /api/video_feed
  • Exemple d’utilisation: <img src="http://<BOARD_IP>:8000/api/video_feed">

🛠️ Guide du développeur (recommandations de production)

Portée et limites

Aucun des deux modules fournis n’est un détecteur de plaques de bout en bout. Les images de scènes téléversées doivent utiliser l’outil à quatre points ou manual_quad. Les images vidéo locales sont considérées comme des plaques déjà recadrées, tandis que les boîtes des scènes caméra reposent sur de légères heuristiques OpenCV. En production, ajoutez un détecteur de plaques dédié. Le service privilégie les candidats lumineux devant les feux de circulation et les feux arrière, mais ces heuristiques ne remplacent pas un détecteur entraîné.

Compiler localement

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

Entrées et sorties

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