Add OCR PDF Service project documentation
New project: Online OCR service for PDFs with dual output modes - Mode 1: Extract text from scanned PDFs - Mode 2: Generate searchable PDFs with embedded OCR text layer Key features: - Multi-language support (CN/EN/FR) via PaddleOCR - Two output formats: plain text or searchable PDF - Reuses validated OCR pipeline from ClassGen (99.97% accuracy) - Proposed architecture: Node.js API + Python OCR worker + job queue Suggested stack: - Backend: PaddleOCR (already validated), Node.js + Express - PDF processing: pdf-lib, PyPDF2 - Queue: Redis + Bull for async processing Timeline: 3-4 weeks for production-ready MVP Status: Conception phase - awaiting prioritization decision 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
bdbe17a3a0
commit
8600fbe23f
222
Projects/ocr_pdf_service.md
Normal file
222
Projects/ocr_pdf_service.md
Normal file
@ -0,0 +1,222 @@
|
||||
# OCR PDF Service - Service OCR en Ligne
|
||||
|
||||
**Created**: 19/11/2025
|
||||
**Status**: Conception
|
||||
**Stack**: À définir (probablement Node.js + PaddleOCR Python backend)
|
||||
|
||||
---
|
||||
|
||||
## Concept
|
||||
|
||||
Service en ligne d'OCR pour PDFs avec deux modes de sortie :
|
||||
1. **Extraction texte brut** - PDF → Texte extrait
|
||||
2. **PDF avec texte intégré** - PDF scanné → PDF searchable (texte OCR intégré dans le PDF)
|
||||
|
||||
---
|
||||
|
||||
## Use Cases
|
||||
|
||||
### Mode 1: Extraction Texte
|
||||
- Upload PDF scanné
|
||||
- Service fait OCR sur toutes les pages
|
||||
- Retourne fichier texte structuré
|
||||
|
||||
### Mode 2: PDF Searchable
|
||||
- Upload PDF scanné (images uniquement)
|
||||
- Service fait OCR + intègre texte invisible dans le PDF
|
||||
- Retourne PDF avec couche texte (Ctrl+F fonctionne, sélection texte possible)
|
||||
|
||||
---
|
||||
|
||||
## Stack Potentielle
|
||||
|
||||
**Backend OCR**:
|
||||
- PaddleOCR (déjà validé sur ClassGen - 99.97% précision chinois)
|
||||
- Support multilingue (CN/EN/FR/etc.)
|
||||
- API Python
|
||||
|
||||
**Service Web**:
|
||||
- Node.js + Express (API REST)
|
||||
- Upload handling (multipart/form-data)
|
||||
- Queue system pour jobs OCR (Redis + Bull ?)
|
||||
|
||||
**PDF Processing**:
|
||||
- PDF.js ou pdf-lib (manipulation PDF côté Node)
|
||||
- PyPDF2 ou reportlab (Python - intégration texte dans PDF)
|
||||
|
||||
**Frontend** (optionnel):
|
||||
- Simple upload form
|
||||
- Progress tracking
|
||||
- Download résultat
|
||||
|
||||
---
|
||||
|
||||
## Architecture Proposée
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ Client │
|
||||
│ (Browser) │
|
||||
└──────┬──────┘
|
||||
│ Upload PDF
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Node.js API │
|
||||
│ (Express) │
|
||||
└────────┬────────┘
|
||||
│ Enqueue job
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Job Queue │
|
||||
│ (Redis/Bull) │
|
||||
└────────┬────────┘
|
||||
│ Process
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Python Worker │
|
||||
│ (PaddleOCR) │
|
||||
└────────┬────────┘
|
||||
│ OCR Result
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ PDF Generator │
|
||||
│ (PyPDF2/etc) │
|
||||
└────────┬────────┘
|
||||
│ Output PDF
|
||||
▼
|
||||
┌─────────────────┐
|
||||
│ Storage/CDN │
|
||||
│ (Download) │
|
||||
└─────────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Features MVP
|
||||
|
||||
### Core
|
||||
- [x] Upload PDF (max size ?)
|
||||
- [x] Détection langue automatique
|
||||
- [x] OCR via PaddleOCR
|
||||
- [x] Export texte brut (.txt)
|
||||
- [x] Export PDF searchable
|
||||
|
||||
### Nice-to-Have
|
||||
- [ ] Batch processing (multiple PDFs)
|
||||
- [ ] Support images (JPG, PNG) en plus des PDFs
|
||||
- [ ] Choix manuel langue OCR
|
||||
- [ ] Preview avant download
|
||||
- [ ] API key pour usage programmatique
|
||||
- [ ] Webhook pour notification fin de job
|
||||
|
||||
---
|
||||
|
||||
## Différenciation vs Concurrence
|
||||
|
||||
**Concurrents**:
|
||||
- Adobe Acrobat (payant, lourd)
|
||||
- Online OCR services (limites, confidentialité ?)
|
||||
- Google Drive OCR (limites format)
|
||||
|
||||
**Notre avantage**:
|
||||
- **Gratuit** (ou freemium)
|
||||
- **Open source** (si tu veux)
|
||||
- **Privacy-focused** : Upload → Process → Delete (pas de stockage permanent)
|
||||
- **Multi-langue optimisé** : Chinois excellemment supporté (PaddleOCR)
|
||||
- **Deux modes** : Texte brut OU PDF searchable
|
||||
- **API publique** : Intégration dans workflows
|
||||
|
||||
---
|
||||
|
||||
## Monétisation Potentielle
|
||||
|
||||
**Freemium Model**:
|
||||
- **Free tier**: 10 PDFs/mois, max 5MB, watermark optionnel
|
||||
- **Pro tier**: 100 PDFs/mois, max 50MB, pas de watermark, API access
|
||||
- **Enterprise**: Unlimited, self-hosted option, support
|
||||
|
||||
**Alternative**:
|
||||
- Pur gratuit + donations
|
||||
- Ou pur gratuit comme portfolio piece
|
||||
|
||||
---
|
||||
|
||||
## Timeline Estimée
|
||||
|
||||
**Phase 1 - MVP (1-2 semaines)**:
|
||||
- Setup backend Python (PaddleOCR déjà validé)
|
||||
- API Node.js upload/download
|
||||
- Mode extraction texte brut
|
||||
- Interface web minimaliste
|
||||
|
||||
**Phase 2 - PDF Searchable (1 semaine)**:
|
||||
- Intégration texte dans PDF original
|
||||
- Tests qualité (alignement texte/image)
|
||||
|
||||
**Phase 3 - Polish (1 semaine)**:
|
||||
- UI/UX améliorée
|
||||
- Error handling robuste
|
||||
- Rate limiting
|
||||
- Documentation API
|
||||
|
||||
**Total**: 3-4 semaines pour version production-ready
|
||||
|
||||
---
|
||||
|
||||
## Risques & Challenges
|
||||
|
||||
**Technique**:
|
||||
- Alignement texte OCR avec position dans PDF (complexe)
|
||||
- Performance pour gros PDFs (100+ pages)
|
||||
- Gestion mémoire (PaddleOCR peut être gourmand)
|
||||
|
||||
**Business**:
|
||||
- Coût serveur (OCR = CPU-intensive)
|
||||
- Scaling si succès
|
||||
- Légal : Respecter copyright des PDFs uploadés
|
||||
|
||||
**Produit**:
|
||||
- Beaucoup de concurrence
|
||||
- Besoin USP clair (pourquoi utiliser le nôtre ?)
|
||||
|
||||
---
|
||||
|
||||
## Lien avec ClassGen
|
||||
|
||||
**Synergie**:
|
||||
- Pipeline OCR déjà validé (99.97% précision)
|
||||
- Code réutilisable (PaddleOCR setup, correction IA)
|
||||
- Même stack backend
|
||||
|
||||
**Différence**:
|
||||
- ClassGen : OCR → JSON structuré → Gamification (usage perso)
|
||||
- OCR Service : OCR → PDF/Texte → Download (usage général)
|
||||
|
||||
---
|
||||
|
||||
## Décision à Prendre
|
||||
|
||||
**Questions**:
|
||||
1. **Priorité** : Avant ou après ClassGen stable ?
|
||||
2. **Scope** : MVP simple ou service complet ?
|
||||
3. **Monétisation** : Gratuit, freemium, ou portfolio piece ?
|
||||
4. **Hébergement** : VPS, serverless, ou local d'abord ?
|
||||
|
||||
**Recommandation**:
|
||||
- Attendre ClassGen livré + utilisé 1-2 semaines
|
||||
- Valider pipeline OCR en usage réel
|
||||
- Puis décider si ce service a du sens commercialement
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
**Pattern observé** : Encore un projet de conception brillante. Attention à ne pas tomber dans le piège "design mais jamais livré".
|
||||
|
||||
**Solution** :
|
||||
- Time-box strict (4h sessions max)
|
||||
- MVP ultra-minimaliste d'abord
|
||||
- Livrer même si "pas parfait"
|
||||
- Améliorer selon feedback réel
|
||||
|
||||
**Question socratique** : Pourquoi ce projet maintenant ? Quel problème concret ça résout pour toi ou pour d'autres ? Ou c'est juste "ça serait cool" ?
|
||||
Loading…
Reference in New Issue
Block a user