/swift-ocr-llm-powered-pdf-to-markdown

An open-source OCR API that leverages OpenAI's powerful language models with optimized performance techniques like parallel processing and batching to deliver high-quality text extraction from complex PDF documents. Ideal for businesses seeking efficient document digitization and data extraction solutions.

Primary LanguagePythonOtherNOASSERTION

Swift OCR: LLM Powered Fast OCR โšก

๐ŸŒŸ Features

  • Flexible Input Options: Accepts PDF files via direct upload or by specifying a URL.
  • Advanced OCR Processing: Utilizes OpenAI's GPT-4 Turbo with Vision model for accurate text extraction.
  • Performance Optimizations:
    • Parallel PDF Conversion: Converts PDF pages to images concurrently using multiprocessing.
    • Batch Processing: Processes multiple images in batches to maximize throughput.
    • Retry Mechanism with Exponential Backoff: Ensures resilience against transient failures and API rate limits.
  • Structured Output: Extracted text is formatted using Markdown for readability and consistency.
  • Robust Error Handling: Comprehensive logging and exception handling for reliable operations.
  • Scalable Architecture: Asynchronous processing enables handling multiple requests efficiently.

๐Ÿ“น Demo

video.mp4

Demo video showcasing the conversion of NASA's Apollo 17 flight documents, which include unorganized, horizontally and vertically oriented pages, into well-structured Markdown format without any issues.

Here's a single, comprehensive section on cost comparison for your README:

Cost Comparison and Value Proposition

Our solution offers an optimal balance of affordability, accuracy, and advanced features:

Cost Breakdown

  • Average token usage per image: ~1200
  • Total tokens per page (including prompt): ~1500
  • [GPT4O] Input token cost: $5 per million tokens
  • [GPT4O] Output token cost: $15 per million tokens

For 1000 documents:

  • Estimated total cost: $15

Cost Optimization Options

  1. Utilizing GPT4 mini: Reduces cost to ~$8 per 1000 documents
  2. Implementing batch API: Further reduces cost to ~$4 per 1000 documents

Market Comparison

This solution is significantly more affordable than alternatives:

  • Our cost: $15 per 1000 documents
  • CloudConvert: ~$30 per 1000 documents (PDFTron mode, 4 credits required)

While cost-effectiveness is a major advantage, our solution also provides:

  • Superior accuracy and consistency
  • Precise table generation
  • Output in easily editable markdown format

This combination of affordability and advanced features makes solution stand out in the document processing market. It's not just about being cheaper; it's about providing excellent value through reliability, flexibility, and high-quality output.

๐Ÿ› ๏ธ Installation

Prerequisites

Steps

  1. Clone the Repository

    git clone https://github.com/yigitkonur/llm-openai-ocr.git
    cd llm-openai-ocr
  2. Create a Virtual Environment

    python3 -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
  3. Install Dependencies

    pip install -r requirements.txt
  4. Configure Environment Variables

    Create a .env file in the root directory and add the following variables:

    OPENAI_API_KEY=your_openai_api_key
    AZURE_OPENAI_ENDPOINT=your_azure_openai_endpoint
    OPENAI_DEPLOYMENT_ID=your_openai_deployment_id
    OPENAI_API_VERSION=your_openai_api_version  # Default is "gpt-4o"
    BATCH_SIZE=10  # Optional: Default is 1
    MAX_CONCURRENT_OCR_REQUESTS=5  # Optional: Default is 5
    MAX_CONCURRENT_PDF_CONVERSION=4  # Optional: Default is 4

    Note: Replace your_openai_api_key, your_azure_openai_endpoint, and your_openai_deployment_id with your actual OpenAI credentials.

  5. Run the Application

    uvicorn main:app --reload

    The API will be available at http://127.0.0.1:8000.

๐ŸŽฏ Usage

API Endpoint

POST /ocr

Request Parameters

  • file: (Optional) Upload a PDF file.
  • ocr_request.url: (Optional) URL of the PDF to process.

You must provide either a file or a URL, not both.

Example Using curl

Uploading a PDF File:

curl -X POST "http://127.0.0.1:8000/ocr" -F "file=@/path/to/your/document.pdf"

Providing a PDF URL:

curl -X POST "http://127.0.0.1:8000/ocr" -F "ocr_request={\"url\": \"https://example.com/document.pdf\"}" -H "Content-Type: application/json"

Response

  • 200 OK

    {
      "text": "Extracted and formatted text from the PDF."
    }
  • Error Responses

    • 400 Bad Request: Invalid input parameters.
    • 422 Unprocessable Entity: Validation errors.
    • 500 Internal Server Error: Processing errors.

๐Ÿงฐ Configuration

All configurations are managed via environment variables. Ensure you have a .env file set up with the necessary variables as described in the Installation section.

Key Configuration Variables

  • OPENAI_API_KEY: Your OpenAI API key.
  • AZURE_OPENAI_ENDPOINT: The endpoint for Azure OpenAI service.
  • OPENAI_DEPLOYMENT_ID: Deployment ID for the OpenAI model.
  • OPENAI_API_VERSION: API version for OpenAI (default: "gpt-4o").
  • BATCH_SIZE: Number of images to process per OCR request (default: 1).
  • MAX_CONCURRENT_OCR_REQUESTS: Maximum number of concurrent OCR requests (default: 5).
  • MAX_CONCURRENT_PDF_CONVERSION: Maximum number of concurrent PDF page conversions (default: 4). Here's the revised license section with the requested changes:

๐Ÿ“œ License (thx for issue)

Please note that PyMuPDF requires changing the license to GNU AGPL v3.0. You can fork this project, implement pdf2image, and use it freely. While I don't have any particular interest in licensing, I am legally obligated to add this information.

GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007

Copyright (C) 2024 YiฤŸit Konur

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.