CV / PPOCR
PPOCR
End-to-end text detection and recognition using RKNN PPOCR-Det and PPOCR-Rec.
Choisissez l'appareil que vous utilisez. Le guide de configuration et la documentation seront mis à jour en conséquence.
Pour commencer
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-ppocr:latest \
python web_service.py --platform rk3576 --model_dir /app/model --host 0.0.0.0 --port 8000API REST
Utilisez l'API REST pour exécuter l'inférence. Copiez les commandes ci-dessous.
curl http://localhost:8080/v1/chat/completions -d '{
"model": "ppocr-rknn",
"messages": [{"role": "user", "content": "Hello"}]
}'import requests
resp = requests.post(
"http://localhost:8080/v1/chat/completions",
json={"model": "ppocr-rknn", "messages": [{"role": "user", "content": "Hello"}]},
)
print(resp.json())Détails du modèle
Démarrage rapide
1. Installer Docker
Exécutez les commandes suivantes sur la carte de développement pour installer 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. Exécuter le projet (une commande, aperçu double mode)
Ce service OCR de bout en bout provient de reComputer-RK-CV. Il détecte les polygones de texte, les trie selon l’ordre de lecture, rectifie chaque zone en perspective et reconnaît chaque ligne.
Informations sur le modèle
| Composant | Fichier |
|---|---|
| Détecteur de texte | model/ppocr_det.rknn |
| Module de reconnaissance de texte | model/ppocr_rec.rknn |
| Dictionnaire de caractères | model/ppocr_keys_v1.txt |
| Police d’annotation | model/simfang.ttf |
| Sortie | Texte, confiance, coordonnées du quadrilatère, zones et latence |
PPOCR ne prend en charge que les images fixes. Le service upstream n’inclut volontairement aucun contrôle de caméra, vidéo locale ou analyse MP4.
Étape A : télécharger les images
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-ppocr:latest
sudo docker pull ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-ppocr:latestÉtape B : exécuter en un clic
Pour RK3576:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3576-ppocr:latest \
python web_service.py --platform rk3576 --model_dir /app/model \
--host 0.0.0.0 --port 8000Pour RK3588:
sudo docker run --rm --privileged --net=host \
-e PYTHONUNBUFFERED=1 -e RKNN_LOG_LEVEL=0 \
-v /proc/device-tree/compatible:/proc/device-tree/compatible:ro \
ghcr.io/seeed-projects/recomputer-rk-cv/rk3588-ppocr:latest \
python web_service.py --platform rk3588 --model_dir /app/model \
--host 0.0.0.0 --port 8000Ouvrez http://<BOARD_IP>:8000 ou /docs.
🔌 Documentation de l’API
1. Interface OCR (Predict)
Endpoint : POST /api/models/ppocr/predict
Paramètres de requête (Multipart/Form-Data) :
Téléversez file ; vous pouvez utiliser det_threshold, box_threshold, unclip_ratio, drop_score, max_results et include_crops.
Exemples d’utilisation :
curl -X POST "http://<BOARD_IP>:8000/api/models/ppocr/predict" \
-F "file=@document.jpg" -F "drop_score=0.5" \
-F "include_crops=false"Les champs facultatifs sont det_threshold, box_threshold, unclip_ratio, drop_score, max_results et include_crops. Les autres endpoints fournissent l’état, la configuration, le dernier résultat structuré, le dernier JPEG annoté et la documentation OpenAPI interactive.
| Champ | Valeur par défaut | Description |
|---|---|---|
det_threshold | 0.3 | Seuil de détection de la carte de pixels, de 0 à 1. |
box_threshold | 0.6 | Score minimal d’une boîte de texte DB. |
unclip_ratio | 1.5 | Rapport d’expansion du polygone, de 0.1 à 5. |
drop_score | 0.5 | Confiance de reconnaissance minimale incluse dans le texte combiné. |
max_results | 100 | Nombre maximal de régions envoyées à la reconnaissance. |
include_crops | false | Inclure des zones JPEG base64 dans les lignes de résultat. |
Format de réponse (JSON) :
{
"success": true,
"model": "ppocr",
"result": {
"text": "Recognized first line\nRecognized second line",
"lines": [
{
"index": 1,
"text": "Recognized first line",
"confidence": 0.9621,
"accepted": true,
"box": [[42, 31], [286, 29], [287, 72], [43, 74]]
}
],
"count": 2,
"timing_ms": {"detection": 54.2, "recognition": 71.4, "total": 129.8}
}
}La qualité de détection affecte directement la reconnaissance. Un texte très petit, flou, courbé, vertical, peu contrasté ou fortement pivoté peut être ignoré, et l’heuristique simple d’ordre de lecture peut ne pas convenir aux documents complexes à plusieurs colonnes. include_crops=true augmente la taille de la réponse et vise surtout le panneau Web des résultats. Détecteur et module de reconnaissance sont des étapes du pipeline et doivent rester compatibles avec le dictionnaire et la logique de recadrage en perspective.
2. Interface de configuration système (Config)
GET /api/config / POST /api/config.
3. Arguments de ligne de commande
| Argument | Valeur par défaut | Description |
|---|---|---|
--platform | Obligatoire | rk3576 ou rk3588. |
--model_dir | model | Modèles, dictionnaire, police et image d’exemple. |
--image | Aucun | Image fixe analysée avant le démarrage du serveur. |
--output | Aucun | Chemin JPG/PNG annoté pour --image. |
--no_server | Désactivé | Quitter après le traitement de --image. |
--host / --port | 0.0.0.0 / 8000 | Adresse et port du service. |
Pour analyser une image montée, enregistrer l’annotation, afficher le JSON et quitter :
python web_service.py --platform rk3576 --model_dir model \
--image /data/document.jpg --output /data/document_result.jpg --no_server🛠️ Guide du développeur (recommandations de production)
Compiler localement
docker build -f docker/rk3576/ppocr.dockerfile \
-t rk3576-ppocr:local src/rk3576_ppocr
docker build -f docker/rk3588/ppocr.dockerfile \
-t rk3588-ppocr:local src/rk3588_ppocrEntrées et sorties
Input: still image. Output: ordered text lines, confidence scores, quadrilaterals, and annotated image.