OCR local pour l'extraction automatique des données des cartes grises françaises.
Utilise PaddleOCR (via ONNX) pour une reconnaissance de texte performante sans dépendance cloud.
- Node.js 20+
- pnpm 9+
git clone <repo-url>
cd autoscan
pnpm install# Installation globale
pnpm build
pnpm link --global
# Utilisation
autoscan carte-grise.jpg
autoscan carte-grise.pdf --debug
autoscan *.jpg --json > results.jsonautoscan <fichier> [options]
Options:
-d, --debug Mode debug (logs détaillés)
-j, --json Sortie JSON uniquement (pour scripting)
-h, --help Affiche l'aide
# Traitement simple
autoscan ma-carte-grise.jpg
# Mode debug
autoscan document.pdf --debug
# Sortie JSON (pour intégration)
autoscan carte.jpg --json
# {
# "immatriculation": { "value": "AB-123-CD", "confidence": 0.95 },
# "vin": { "value": "VF1234567890ABCDE", "confidence": 0.88 },
# ...
# }
# Traitement par lot
autoscan image1.jpg image2.png image3.pdf
# Pipeline avec jq
autoscan carte.jpg --json | jq '.immatriculation.value'
# "AB-123-CD"# Exécuter sans build
pnpm cli carte-grise.jpg
# Mode dev (index.ts)
pnpm devimport { processCarteGrise } from "autoscan/pipeline";
const result = await processCarteGrise("/chemin/vers/carte-grise.jpg", {
debug: false,
});
console.log(result.data);
// {
// immatriculation: { value: "AB-123-CD", confidence: 0.95, source: "mrz_extraction" },
// vin: { value: "VF1234567890ABCDE", confidence: 0.88, source: "detection_match" },
// marque: { value: "RENAULT", confidence: 0.95, source: "D1_pattern" },
// modele: { value: "CLIO", confidence: 0.90, source: "mrz_line2" },
// dateImmatriculation: { value: "15/03/2020", confidence: 0.92, source: "B_field" },
// numeroFormule: { value: "2020AA12345", confidence: 0.87, source: "detection_match" }
// }| Format | Support |
|---|---|
| JPEG | ✅ |
| PNG | ✅ |
| ✅ (converti en image automatiquement) |
| Champ | Description | Pattern |
|---|---|---|
immatriculation |
Numéro d'immatriculation | AA-123-BB ou ancien format |
vin |
Vehicle Identification Number | 17 caractères alphanumériques |
marque |
Marque du véhicule | Champ D.1 |
modele |
Modèle du véhicule | Champ D.3 |
dateImmatriculation |
Date de première immatriculation | DD/MM/YYYY |
numeroFormule |
Numéro de formule | YYYYXXNNNNN |
interface PipelineOptions {
debug?: boolean; // Affiche les logs détaillés (défaut: false)
preprocess?: {
grayscale?: boolean; // Conversion en niveaux de gris (défaut: true)
normalize?: boolean; // Normalisation du contraste (défaut: true)
sharpen?: boolean; // Accentuation des contours (défaut: true)
resize?: { // Redimensionnement (défaut: null, auto-resize si >2500px)
width: number;
height?: number;
} | null;
};
}interface PipelineResult {
data: {
immatriculation: ExtractedField | null;
vin: ExtractedField | null;
marque: ExtractedField | null;
modele: ExtractedField | null;
dateImmatriculation: ExtractedField | null;
numeroFormule: ExtractedField | null;
};
raw?: OCRResult; // Données OCR brutes (si debug: true)
processingTimeMs: number; // Temps de traitement en ms
}
interface ExtractedField {
value: string; // Valeur extraite
confidence: number; // Score de confiance (0-1)
source?: string; // Méthode d'extraction utilisée
}| Métrique | Valeur |
|---|---|
| Temps moyen | ~3s (CPU) |
| Mémoire | ~300MB |
| Précision | >90% sur images de bonne qualité |
Input (PDF/Image)
│
▼
┌─────────────────┐
│ PDF → Image │ (si PDF)
└─────────────────┘
│
▼
┌─────────────────┐
│ Preprocessing │ Sharp (grayscale, normalize, sharpen)
└─────────────────┘
│
▼
┌─────────────────┐
│ Auto-rotation │ Teste 0°, 90°, 270°, 180°
└─────────────────┘
│
▼
┌─────────────────┐
│ PaddleOCR │ Détection + Reconnaissance
└─────────────────┘
│
▼
┌─────────────────┐
│ Extracteurs │ Regex + Validation + MRZ
└─────────────────┘
│
▼
Output
pnpm dev # Exécute src/index.ts avec tsx
pnpm build # Bundle avec esbuild
pnpm start # Exécute le bundle
pnpm lint # Vérifie le code avec Biomesrc/
├── cli.ts # CLI principal
├── index.ts # Point d'entrée dev
├── config.ts # Chargement configuration
├── utils.ts # Utilitaires (PDF, détection format)
├── pipeline/
│ ├── index.ts # Exports publics
│ ├── pipeline.ts # Orchestrateur
│ ├── paddle-ocr.ts # Wrapper PaddleOCR
│ ├── preprocessor.ts # Preprocessing image
│ └── types.ts # Types TypeScript
└── extractors/
├── base.extractor.ts
├── immatriculation.extractor.ts
├── vin.extractor.ts
├── marque.extractor.ts
├── modele.extractor.ts
├── date.extractor.ts
└── numero-formule.extractor.ts
@gutenye/ocr-node- PaddleOCR pour Node.js (ONNX)sharp- Traitement d'imagepdf2pic- Conversion PDF vers image
- Les images très inclinées (>15°) peuvent nécessiter une correction de perspective manuelle
- La qualité d'extraction dépend de la qualité de l'image source
- Optimisé pour les cartes grises françaises uniquement
MIT