Système intelligent d'extraction et de gestion des tickets de livraison pour optimiser le suivi des colis et réduire les litiges clients.
- Aperçu du Projet
- Problématique
- Architecture
- Fonctionnalités
- Stack Technique
- Installation
- Utilisation
- Modèles OCR
- Performance et Métriques
- Roadmap
- Ressources
Logistics OCR est une application intelligente qui automatise l'extraction et la gestion des informations des tickets de livraison. Le système permet aux opérateurs logistiques de :
- 📸 Scanner et extraire automatiquement les données des tickets (noms clients, références, articles)
- 💾 Stocker les informations dans une base de données structurée
- 🔍 Rechercher rapidement les colis "restés à quai" lors d'appels clients
- ⚡ Réduire drastiquement les temps de réponse et les litiges de livraison
Dans le secteur logistique, les opérateurs font face à plusieurs défis :
- Gestion manuelle chronophage : Saisie manuelle des tickets papier entraînant des erreurs et des pertes de temps
- Litiges clients fréquents : Difficulté à vérifier rapidement si un colis est en attente au dépôt lors d'appels clients
- Perte d'informations : Tickets physiques perdus ou illisibles
- Temps de recherche élevé : Recherche manuelle dans des piles de tickets pour retrouver une commande
Notre solution : Un système OCR couplé à une base de données searchable qui digitalise et centralise toutes les informations des tickets en temps réel.
┌─────────────────────────────────────────────────────────────┐
│ FRONTEND (Futur) │
│ Interface de recherche client + Upload tickets │
└────────────────────────────┬────────────────────────────────┘
│ HTTP/REST API
┌────────────────────────────▼────────────────────────────────┐
│ BACKEND (FastAPI) │
│ ┌──────────────┐ ┌───────────────┐ ┌─────────────────┐ │
│ │ API Layer │ │ OCR Service │ │ DB Service │ │
│ │ /tickets/ │─▶│ DeepSeek/ │─▶│ Storage & │ │
│ │ /search/ │ │ Qwen/Paddle │ │ Query Engine │ │
│ └──────────────┘ └───────────────┘ └─────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
▼
┌────────────────┐
│ DATABASE │
│ (SQLite/PG) │
│ Tickets + │
│ Customers │
└────────────────┘
ocr/
├── ocr/
│ ├── __init__.py
│ ├── cli.py # Interface CLI (Typer)
│ ├── main.py # Fonctions OCR de base (legacy)
│ ├── backend/
│ │ └── server.py # API FastAPI
│ └── models/
│ ├── model.py # Classe abstraite Model
│ └── model_deepseek.py # Implémentation DeepSeek/Qwen
├── img/ # Stockage temporaire des images
├── pyproject.toml # Dépendances Python (uv)
└── README.md
- Upload : Image(s) de tickets → API
/tickets/ - Traitement OCR : Extraction via modèle VLM (Vision-Language Model)
- Structuration : JSON formaté (client, référence, articles, quantités)
- Stockage : Insertion en base de données
- Recherche : API
/search?customer=xxx→ Résultats filtrés
- API d'extraction OCR (
POST /tickets/)- Upload de tickets (JPG, PNG, JPEG)
- Extraction structurée (client, référence, articles, quantités)
- Support multi-fichiers (batch processing)
- Modèles OCR modulaires
- DeepSeek OCR
- Qwen 3 VL 30B
- PaddleOCR VL
- Interface abstraite pour ajouter facilement de nouveaux modèles
- Validation de schéma (Pydantic)
- CLI de test (Typer)
- Base de données
- Schéma : Tables
customers,tickets,items - ORM (SQLAlchemy)
- Migrations (Alembic)
- Schéma : Tables
- API de recherche (
GET /search) - Frontend
- Interface de recherche clients
- Dashboard administrateur
- Upload drag-and-drop
- Authentification (JWT)
- Monitoring (métriques de performance OCR)
| Composant | Technologie | Justification |
|---|---|---|
| Backend | FastAPI | Performance, async, documentation auto (Swagger) |
| OCR Engine | DeepSeek OCR / Qwen VL | SOTA accuracy, structured output (JSON), cost-effective |
| Vision Models | Novita API | Pricing compétitif (0.02$/1M tokens), pas de GPU local requis |
| Base de données | SQLite (dev) / PostgreSQL (prod) | SQLite pour le MVP, PostgreSQL pour scalabilité |
| Validation | Pydantic | Type safety, validation automatique, serialization JSON |
| CLI | Typer | CLI moderne et intuitive pour tests |
| Package Manager | uv | Installation ultra-rapide, gestion de dépendances moderne |
| Frontend | React/Vue (futur) | SPA moderne pour interface utilisateur |
- Python 3.10+
- uv (recommandé) ou pip
- Tesseract OCR (optionnel, pour tests locaux)
# 1. Cloner le repository
git clone https://github.com/votre-username/logistics-ocr.git
cd logistics-ocr
# 2. Créer un environnement virtuel et installer les dépendances
uv venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
# 3. Installer les dépendances
uv pip install -e .
# 4. Configurer les variables d'environnement
cp .env.example .env
# Éditer .env avec votre clé API Novitanovita_api_key=your_novita_api_key_hereObtenir une clé API : Novita AI
# Démarrer le serveur FastAPI
uvicorn ocr.backend.server:app --reload
# Accéder à la documentation interactive
# http://localhost:8000/docs# Upload d'un ticket
curl -X POST "http://localhost:8000/tickets/" \
-F "files=@ticket1.jpg" \
-F "files=@ticket2.jpg"Réponse exemple :
[
{
"id": "a3b5c7d9-...",
"filename": "ticket1.jpg",
"tickets": {
"tickets": [
{
"customer": "MAXIM'S",
"ticket_number": "32/3",
"items": [
{"description": "Moyen cabri", "quantity": 2},
{"description": "Poulet fermier", "quantity": 5}
]
}
]
}
}
]# Test OCR avec EasyOCR
python -m ocr.main easyocr_image img/ticket.jpg
# Test avec PaddleOCR
python -m ocr.main paddle_ocr_image img/ticket.jpgPour sélectionner le modèle OCR le plus adapté, nous avons effectué un benchmark rigoureux basé sur deux critères principaux :
- Accuracy : Mesurée à l'aide de la distance de Levenshtein entre le texte extrait et la vérité terrain.
- Coût : Analyse comparative des coûts d'exploitation pour différents volumes de tickets.
| Modèle | Accuracy (Levenshtein) | Coût (par 1M tokens) | Structured Output | Observations |
|---|---|---|---|---|
| Qwen 3 VL | ⭐⭐⭐⭐⭐ (98%) | $0.02 | ✅ Oui | Meilleur choix global : précision élevée et sortie structurée. |
| DeepSeek OCR | ⭐⭐⭐⭐ (95%) | $0.02 | ✅ Oui | Hallucinations fréquentes, moins fiable. |
| PaddleOCR VL | ⭐⭐⭐ (88%) | $0.02 | ✅ Oui | Performances correctes mais inférieures. |
| Tesseract | ⭐⭐ (70%) | Gratuit | ❌ Non | Faible précision, adapté uniquement aux tests. |
| EasyOCR | ⭐⭐⭐ (82%) | Gratuit | ❌ Non | Performances moyennes, pas adapté à la production. |
- Précision Supérieure : Avec une accuracy de 98%, Qwen 3 VL surpasse tous les autres modèles testés.
- Sortie Structurée : Génère des résultats directement exploitables en JSON, réduisant le besoin de post-traitement.
- Coût Raisonnable : $0.02 par 1M tokens, idéal pour des volumes moyens à élevés.
- Robustesse : Gère efficacement les documents complexes et les variations de qualité d'image.
- Bien que précis (95%), DeepSeek OCR souffre d'hallucinations fréquentes, rendant les résultats moins fiables pour des cas critiques.
- Avantages : Gratuits et faciles à configurer pour des tests ou des environnements sans connexion Internet.
- Inconvénients : Faible précision et absence de sortie structurée, inadaptés à la production.
Mesure la distance d'édition entre le texte extrait et la vérité terrain.
import jellyfish
distance = jellyfish.levenshtein_distance(ground_truth, prediction)accuracy = (1 - (distance / max_distance)) * 100Pourcentage de mots incorrects dans une phrase.
from jiwer import wer
error_rate = wer(reference, hypothesis)Analyse des bounding boxes pour identifier les zones où le modèle a des difficultés.
| Modèle | Accuracy | WER | Latence | Coût/1000 images |
|---|---|---|---|---|
| Qwen 3 VL | TBD | TBD | ~2s | $0.40 |
| DeepSeek | TBD | TBD | ~1.5s | $0.30 |
| PaddleOCR | TBD | TBD | ~3s | $0.50 |
- API d'extraction OCR
- Modèles multiples
- Validation de schéma
- Intégration PostgreSQL
- API de recherche avancée
- Indexation full-text
- Interface de recherche clients
- Dashboard admin
- Statistiques en temps réel
- Authentification JWT
- Rate limiting
- Déploiement cloud (AWS/Azure)
- CI/CD pipeline
- Monitoring (Sentry, Prometheus)
- Détection automatique de duplicatas
- Suggestions auto-complétion
- Analytics prédictives (colis à risque)
Les contributions sont les bienvenues ! Veuillez suivre les conventions de commit :
feat(api): add customer search endpoint
fix(ocr): improve ticket number extraction
docs: update installation instructionsVoir Conventional Commits pour plus de détails.
Ce projet est sous licence MIT. Voir LICENSE pour plus de détails.
Fred Wantou
📧 Email : freddypouna@gmail.com
🔗 GitHub : @FredWantou
- Novita AI pour l'API OCR accessible
- Communauté FastAPI pour l'excellent framework
- Équipes DeepSeek et Qwen pour les modèles open-source
⭐ Si ce projet vous est utile, n'hésitez pas à lui donner une étoile !