Document Question Answering
Transformers
PyTorch
English
document-processing
ocr
ner
text-classification
information-extraction
invoice
receipt
form
Instructions to use mrrobot2610/IDP-Machine-learning with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use mrrobot2610/IDP-Machine-learning with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("document-question-answering", model="mrrobot2610/IDP-Machine-learning")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("mrrobot2610/IDP-Machine-learning", device_map="auto") - Notebooks
- Google Colab
- Kaggle
|
Download TECHNICAL_ARCHITECTURE.md from mrrobot2610/IDP-Machine-learning: direct link, hf CLI and curl.
- Browser
- Download file 6.29 kB
-
https://huggingface.co/mrrobot2610/IDP-Machine-learning/resolve/main/TECHNICAL_ARCHITECTURE.md
- Command line
-
hf download hf://mrrobot2610/IDP-Machine-learning/TECHNICAL_ARCHITECTURE.md
-
curl -L -o TECHNICAL_ARCHITECTURE.md https://huggingface.co/mrrobot2610/IDP-Machine-learning/resolve/main/TECHNICAL_ARCHITECTURE.md
6.29 kB
| # Technical Architecture & Implementation Guide | |
| This document provides a deep dive into the internal workings of the IDP (Intelligent Document Processing) system. It explains the "how" and "why" behind the implementation decisions. | |
| ## 1. System Architecture | |
| The system follows a modern decoupled architecture: | |
| ```mermaid | |
| graph TD | |
| User[User] -->|Uploads File| Frontend[Next.js Frontend] | |
| Frontend -->|POST /process| API[FastAPI Backend] | |
| subgraph "Inference Pipeline" | |
| API -->|Raw Image/PDF| Preprocessor[Preprocessing Module] | |
| Preprocessor -->|Cleaned Image| OCR[OCR Engine] | |
| OCR -->|Raw Text + BBoxes| Classifier[Document Classifier] | |
| OCR -->|Raw Text| NER[NER Model] | |
| Classifier -->|Doc Type| PostProcessor[Post-Processing] | |
| NER -->|Entities| PostProcessor | |
| OCR -->|Text + BBoxes| PostProcessor | |
| PostProcessor -->|Structured JSON| API | |
| end | |
| API -->|JSON Response| Frontend | |
| Frontend -->|Render| UI[Results Display] | |
| ``` | |
| ## 2. Component Deep Dive | |
| ### A. Frontend (`/frontend`) | |
| Built with **Next.js 14** (App Router), **React 18**, and **Tailwind CSS**. | |
| * **`app/page.tsx`**: The main entry point. It manages the global state for `result`, `loading`, and `isSystemOnline`. It uses a polling mechanism (`setInterval`) to check the backend health status every 30 seconds. | |
| * **`components/DocumentUpload.tsx`**: Handles file selection and drag-and-drop. | |
| * **Auto-Processing**: As soon as a valid file is selected, it automatically triggers the upload. | |
| * **Validation**: Checks file size (<10MB) and type (PDF, PNG, JPEG). | |
| * **`components/ResultsDisplay.tsx`**: Renders the JSON response. | |
| * **Dynamic Badges**: Uses `getDocTypeStyle` to color-code document types (Purple for Invoice, Pink for Receipt, Blue for Bank Statement). | |
| * **Confidence Indicators**: Color-codes confidence scores (Green > 80%, Yellow > 60%, Red < 60%). | |
| * **Styling**: Uses `globals.css` for custom animations (`animate-fade-in-up`) and utility classes (`glass-panel`, `bento-card`). | |
| ### B. Backend API (`api_server.py`) | |
| Built with **FastAPI**. | |
| * **Endpoints**: | |
| * `GET /health`: Simple status check. | |
| * `POST /process`: The core endpoint. Accepts `multipart/form-data`. | |
| * **File Handling**: Uses `tempfile` to safely store uploaded files temporarily for processing, ensuring they are cleaned up afterwards. | |
| * **CORS**: Configured to allow requests from the frontend (localhost or production domain). | |
| ### C. Inference Pipeline (`inference_pipeline.py`) | |
| The heart of the system. It orchestrates the flow of data through various ML models. | |
| #### 1. Preprocessing (`preprocessing.py`) | |
| Before OCR, images are cleaned to improve accuracy: | |
| * **Resizing**: Images are resized to a standard width (2048px) to maintain aspect ratio. | |
| * **Denoising**: `cv2.fastNlMeansDenoising` removes grain/noise. | |
| * **Thresholding**: Adaptive thresholding converts images to binary (black/white) for clearer text. | |
| * **Deskewing**: Detects text orientation and rotates the image to be horizontal. | |
| #### 2. OCR Engine (`ocr_engine.py`) | |
| * **Engine**: Uses **EasyOCR** (or PaddleOCR) to extract text and bounding boxes. | |
| * **Output**: Returns a list of text lines with their coordinates and confidence scores. | |
| #### 3. Classification (`classifier_model.py` & `demo_mode.py`) | |
| Determines if the document is an Invoice, Receipt, Bank Statement, etc. | |
| * **Model**: Uses a fine-tuned **MiniLM** transformer model. | |
| * **Demo Mode / Heuristics**: If the model isn't loaded, it falls back to smart keyword matching: | |
| * *Invoice*: Contains "invoice". | |
| * *Bank Statement*: Contains "account statement", "summary", etc. | |
| * *Receipt*: Contains "receipt", "total". | |
| * **Refinement**: Even with a trained model, we use `_refine_classification` in the pipeline to override the model if strong keywords are present (e.g., correcting "Receipt" to "Invoice" if the word "Invoice" is clearly visible). | |
| #### 4. NER (Named Entity Recognition) (`ner_model.py`) | |
| Extracts specific fields like Dates, Amounts, and IDs. | |
| * **Model**: **DistilBERT** fine-tuned for token classification. | |
| * **Tags**: Uses BIO tagging (e.g., `B-DATE`, `I-DATE`) to identify the start and continuation of entities. | |
| #### 5. Post-Processing (`postprocessing.py`) | |
| Cleans up and validates the raw ML outputs. | |
| * **Regex Fallbacks**: If NER misses a field (like a date), regex patterns (`\d{2}/\d{2}/\d{4}`) attempt to find it in the raw text. | |
| * **Validation**: Checks if extracted values make sense (e.g., is the "Total" actually a number?). | |
| * **Normalization**: Converts dates to `YYYY-MM-DD` and amounts to standard float format (removing currency symbols). | |
| * **Confidence Scoring**: Combines Model Confidence + OCR Confidence to give a final reliability score. | |
| ## 3. Data Flow Example | |
| 1. **Upload**: User uploads `invoice.pdf`. | |
| 2. **Conversion**: `PDFtoImageConverter` converts it to `invoice.png`. | |
| 3. **Preprocess**: Image is deskewed and binarized. | |
| 4. **OCR**: Text "Invoice #123" is detected at `[100, 100]`. | |
| 5. **Classify**: Model sees "Invoice" -> Classifies as `INVOICE` (Conf: 0.98). | |
| 6. **NER**: Model identifies "123" as `INVOICE_NUMBER`. | |
| 7. **Post-Process**: | |
| * `INVOICE_NUMBER` "123" is validated. | |
| * Date "Jan 1, 2024" is normalized to `2024-01-01`. | |
| 8. **Response**: JSON returned to frontend. | |
| 9. **Display**: Frontend shows "Invoice" badge and lists extracted fields. | |
| ## 4. Key Technologies & Libraries | |
| * **PyTorch**: Deep learning framework for Classifier and NER. | |
| * **Transformers (Hugging Face)**: Model architecture (DistilBERT, MiniLM). | |
| * **OpenCV**: Image manipulation. | |
| * **EasyOCR**: Optical Character Recognition. | |
| * **NumPy**: Numerical operations. | |
| * **Uvicorn**: ASGI server for FastAPI. | |
| ## 5. Customization | |
| * **Adding New Doc Types**: | |
| 1. Update `classifier_model.py` labels. | |
| 2. Add keywords to `_refine_classification` in `inference_pipeline.py`. | |
| 3. Add field extraction logic to `postprocessing.py`. | |
| 4. Update `ResultsDisplay.tsx` in frontend to handle new badge types. | |
| * **Tuning Accuracy**: | |
| * Adjust `ocr_confidence_threshold` in `api_server.py`. | |
| * Add more regex patterns in `postprocessing.py`. | |