| # DotsOCR API - React Frontend + FastAPI Backend |
|
|
| ## 📚 Documentation |
|
|
| - **[Complete API Usage Guide](./API_USAGE_GUIDE.md)** - Comprehensive examples for Python, JavaScript, and React |
| - **[Quick Start Guide](./QUICKSTART.md)** - Get started in 5 minutes |
| - **[Deployment Guide](./DEPLOYMENT.md)** - Deploy to production |
| - **[Interactive API Docs](https://isseygino911-dots-ocr-parser.hf.space/docs)** - Test endpoints in your browser |
|
|
| ## Overview |
|
|
| This project provides a modern web interface for the DotsOCR document parser using: |
| - **Backend**: FastAPI (deployed on HuggingFace Spaces with GPU) |
| - **Frontend**: React + TypeScript (deployed on local Mac or Hostinger) |
|
|
| ## Features |
|
|
| ### Backend (FastAPI) |
| - RESTful API endpoints for image and PDF parsing |
| - WebSocket support for real-time progress updates |
| - Automatic API documentation (FastAPI/OpenAPI) |
| - CORS enabled for frontend access |
| - GPU-accelerated OCR processing |
|
|
| ### Frontend (React) |
| - Drag-and-drop file upload |
| - Real-time progress tracking with WebSocket |
| - Results viewer with tabs: |
| - Markdown rendered preview |
| - Raw markdown text |
| - JSON data with syntax highlighting |
| - Page navigation for PDF documents |
| - Download results as ZIP |
| - Responsive design |
|
|
| ## Quick Start |
|
|
| ### Backend (HuggingFace Spaces) |
|
|
| 1. **Push to HF Spaces:** |
| ```bash |
| git add app.py requirements.txt |
| git commit -m "FastAPI backend" |
| git push hf main |
| ``` |
|
|
| 2. **Wait for deployment** (~10-15 minutes) |
|
|
| 3. **Access API docs:** |
| ``` |
| https://isseygino911-dots-ocr-parser.hf.space/docs |
| ``` |
|
|
| ### Frontend (Local Development) |
|
|
| 1. **Navigate to frontend:** |
| ```bash |
| cd frontend |
| ``` |
|
|
| 2. **Install dependencies:** |
| ```bash |
| npm install |
| ``` |
|
|
| 3. **Configure backend URL:** |
| ```bash |
| # Edit .env.development |
| VITE_API_BASE_URL=https://isseygino911-dots-ocr-parser.hf.space |
| ``` |
|
|
| 4. **Run dev server:** |
| ```bash |
| npm run dev |
| ``` |
|
|
| 5. **Open browser:** |
| ``` |
| http://localhost:5173 |
| ``` |
|
|
| ### Frontend (Deploy to Hostinger) |
|
|
| 1. **Build production:** |
| ```bash |
| cd frontend |
| npm run build |
| ``` |
|
|
| 2. **Upload `dist/` folder to Hostinger via FTP or File Manager** |
|
|
| 3. **Access your domain:** |
| ``` |
| https://yourdomain.com |
| ``` |
|
|
| ## Project Structure |
|
|
| ``` |
| dots-ocr-parser/ |
| ├── app.py # FastAPI backend |
| ├── app_gradio_backup.py # Original Gradio version (backup) |
| ├── requirements.txt # Python dependencies |
| ├── DEPLOYMENT.md # Detailed deployment guide |
| ├── README_API.md # This file |
| │ |
| └── frontend/ # React application |
| ├── src/ |
| │ ├── api/ |
| │ │ └── client.ts # API client functions |
| │ ├── components/ |
| │ │ ├── FileUpload.tsx |
| │ │ ├── JobProgress.tsx |
| │ │ └── ResultsViewer.tsx |
| │ ├── types/ |
| │ │ └── index.ts # TypeScript types |
| │ └── App.tsx # Main app component |
| ├── .env.development # Dev environment config |
| ├── .env.production # Prod environment config |
| └── package.json # Node dependencies |
| ``` |
|
|
| ## API Endpoints |
|
|
| ### POST /api/parse/image |
| Upload and parse an image. |
|
|
| **Request:** |
| - `file`: Image file (multipart) |
| - `prompt_mode`: Parsing mode (form field) |
|
|
| **Response:** |
| ```json |
| { |
| "job_id": "abc-123-def", |
| "status": "queued" |
| } |
| ``` |
|
|
| ### POST /api/parse/pdf |
| Upload and parse a PDF. |
|
|
| **Response:** Same as image endpoint |
|
|
| ### GET /api/jobs/{job_id}/status |
| Get job status and progress. |
| |
| **Response:** |
| ```json |
| { |
| "job_id": "abc-123-def", |
| "status": "processing", |
| "progress_percent": 50.0, |
| "current_page": 5, |
| "total_pages": 10, |
| "message": "Processing page 5/10..." |
| } |
| ``` |
| |
| ### GET /api/jobs/{job_id}/results |
| Get parsed results (when completed). |
|
|
| ### GET /api/jobs/{job_id}/download |
| Download results as ZIP. |
| |
| ### WS /api/jobs/{job_id}/stream |
| WebSocket for real-time updates. |
|
|
| ## Parsing Modes |
|
|
| - **prompt_layout_all_en** (Default): Full layout detection + text recognition |
| - **prompt_layout_only_en**: Layout detection only (no text) |
| - **prompt_ocr**: Text extraction only (markdown output) |
| |
| ## Development |
| |
| ### Backend Development |
| |
| The backend is designed to run on HuggingFace Spaces with GPU. Local development on Mac is not supported due to CUDA requirement. |
| |
| To test backend changes: |
| 1. Push to HF Spaces |
| 2. Wait for rebuild |
| 3. Test via API docs at `/docs` |
| |
| ### Frontend Development |
| |
| ```bash |
| cd frontend |
| |
| # Install dependencies |
| npm install |
| |
| # Run dev server (hot reload enabled) |
| npm run dev |
| |
| # Build for production |
| npm run build |
| |
| # Preview production build |
| npm run preview |
| ``` |
| |
| ### TypeScript Types |
| |
| All API types are defined in `frontend/src/types/index.ts`. Update these if you modify the backend API. |
| |
| ## Troubleshooting |
| |
| ### CORS Errors |
| Update `allow_origins` in `app.py`: |
| ```python |
| app.add_middleware( |
| CORSMiddleware, |
| allow_origins=["https://yourdomain.com", "http://localhost:5173"], |
| ... |
| ) |
| ``` |
| |
| ### WebSocket Connection Failed |
| The frontend automatically falls back to HTTP polling if WebSocket fails. |
| |
| ### Backend Not Responding |
| - Check if HF Space is sleeping (visit URL to wake) |
| - Check HF Spaces logs for errors |
| - Verify GPU is enabled in Space settings |
| |
| ### Frontend Build Errors |
| ```bash |
| cd frontend |
| rm -rf node_modules package-lock.json |
| npm install |
| npm run build |
| ``` |
| |
| ## Performance Notes |
| |
| - **First run**: ~10 minutes (model download) |
| - **Subsequent runs**: ~30 seconds (model cached) |
| - **Image processing**: ~10-15 seconds per image |
| - **PDF processing**: ~10-15 seconds per page |
| |
| ## Tech Stack |
| |
| ### Backend |
| - Python 3.9+ |
| - FastAPI 0.104+ |
| - Uvicorn (ASGI server) |
| - PyTorch 2.4+ |
| - Transformers 4.51+ |
| - Flash Attention 2 |
| |
| ### Frontend |
| - React 18 |
| - TypeScript |
| - Vite (build tool) |
| - Axios (HTTP client) |
| - React Dropzone (file upload) |
| - React Markdown (markdown rendering) |
| - React Syntax Highlighter (JSON display) |
| |
| ## Credits |
| |
| Powered by [dots.ocr](https://github.com/rednote-hilab/dots.ocr) - A 1.7B parameter Vision-Language Model for Document Understanding. |
| |
| ## License |
| |
| See the dots.ocr repository for model license information. |
| |
| ## Next Steps |
| |
| 1. Deploy backend to HuggingFace Spaces |
| 2. Test API endpoints at `/docs` |
| 3. Run frontend locally and test integration |
| 4. Deploy frontend to Hostinger |
| 5. See [DEPLOYMENT.md](./DEPLOYMENT.md) for detailed instructions |
| |
| ## Support |
| |
| For detailed deployment instructions, see [DEPLOYMENT.md](./DEPLOYMENT.md). |
| |
| For API documentation, visit `/docs` on your deployed backend. |
| |