Skip to main content

langchain-ocr-lib

langchain-ocr-lib is the OCR processing engine behind LangChain-OCR. It provides a modular, vision-LLM-powered Chain to convert image and PDF documents into clean Markdown. Designed for direct CLI usage or integration into larger applications.

Logo

Table of Contents

  1. Overview
  2. Features
  3. Installation
    1. Prerequisites
    2. Environment Setup
  4. Usage
    1. CLI
    2. Python Module
    3. Docker
  5. Architecture
  6. Testing
  7. License

1. Overview

This package offers the core functionality to extract text from documents using vision LLMs and convert it into Markdown. It is highly configurable by environment variables and its design based on dependency injection, that allows you to easily swap out components. The package is designed to be used as a library, but it also provides a command-line interface (CLI) for easy local execution.


2. Features

  • Vision-Language OCR: Supports Ollama, vLLM and OpenAI (and other OpenAI conform providers). Other LLM providers can be easily integrated.
  • CLI Interface: Simple local execution via command line or container
  • Highly Configurable: Use environment variables to configure the OCR
  • Dependency Injection: Easily swap out components for custom implementations
  • LangChain: Integrates with LangChain
  • Markdown Output: Outputs well-formatted Markdown text

3. Installation

3.1 Prerequisites

  • Python: 3.11+
  • Poetry: Install Poetry
  • Docker: For containerized CLI usage (optional)
  • Ollama: Follow instructions here (other LLM providers can be used as well, see here)
  • Langfuse: Different options for self hosting, see here (optional, for observability)

3.2 Environment Setup

The package is published on PyPI, so you can install it directly with pip:

pip install langchain-ocr-lib

However, if you want to run the latest version or contribute to the project, you can clone the repository and install it locally.

git clone https://github.com/a-klos/langchain-ocr.git
cd langchain-ocr/langchain_ocr_lib
poetry install --with dev

You can configure the package by setting environment variables. Configuration options are shown in the .env.template file.


4. Usage

Remember that you need to pull the configured LLM model first. With Ollama, you can do this with:

ollama pull <model_name>

For example, to pull the gemma3:4b-it-q4_K_M model, run:

ollama pull gemma3:4b-it-q4_K_M

4.1 CLI

Run OCR locally from the terminal:

langchain-ocr <<input_file>> 

Supports:

  • .jpg, .jpeg, .png, and .pdf inputs

4.2 Python Module

Use the the library programmatically:

import inject

from langchain_ocr_lib.di_config import configure_di
from langchain_ocr_lib.di_binding_keys.binding_keys import PdfConverterKey
from langchain_ocr_lib.impl.converter.pdf_converter import Pdf2MarkdownConverter


configure_di() #This sets up the dependency injection

class Converter:
    _converter: Pdf2MarkdownConverter = inject.attr(PdfConverterKey)
    def convert(self, filename: str) -> str:
        return self._converter.convert2markdown(filename=filename)

converter = Converter()
markdown = converter.convert("../examples/invoice.pdf") # Adjust the file path as needed
print(markdown)

The configure_di() function sets up the dependency injection for the library. The dependencies can be easily swapped out or appended with new dependencies. See ../api/src/langchain_ocr/di_config.py for more details on how to add new dependencies.

Swapping out the dependencies can be done as follows:

import inject
from inject import Binder

from langchain_ocr_lib.di_config import lib_di_config, PdfConverterKey
from langchain_ocr_lib.impl.converter.pdf_converter import Pdf2MarkdownConverter


class MyPdfConverter(Pdf2MarkdownConverter):
    def convert(self, filename: str) -> None:
        markdown = self.convert2markdown(filename=filename)
        print(markdown)

def _api_specific_config(binder: Binder):
    binder.install(lib_di_config)  # Install all default bindings
    binder.bind(PdfConverterKey, MyPdfConverter())  # Then override PdfConverter

def configure():
    """Configure the dependency injection container."""
    inject.configure(_api_specific_config, allow_override=True, clear=True)

configure()

class Converter:
    _converter: MyPdfConverter = inject.attr(PdfConverterKey)
    def convert(self, filename: str) -> None:
        self._converter.convert(filename=filename)

converter = Converter()
converter.convert("../examples/invoice.pdf") # Adjust the file path as needed

4.3 Docker

Run OCR via Docker without local Python setup:

docker build -t ocr -f langchain_ocr_lib/Dockerfile .
docker run --net=host -it --rm -v ./examples:/app/examples:ro ocr examples/invoice.png

Metadata

Release files for langchain-ocr-lib 0.4.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for langchain-ocr-lib 0.4.1
File Size Uploaded
langchain_ocr_lib-0.4.1.tar.gz 16.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for langchain-ocr-lib 0.4.1
File Interpreter ABI Platform
langchain_ocr_lib-0.4.1-py3-none-any.whl Python 3 none any Details

Total release size: 41.1 kB

Release files / langchain_ocr_lib-0.4.1.tar.gz

Download URL langchain_ocr_lib-0.4.1.tar.gz
Size 16.1 kB
Tags Source
SHA-256 checksum
How to use checksums
3eb7660d2e215a93cbd31c25acc1b156ee9f61c9ba54095265cb0916be6c2df9
BLAKE2b-256 checksum
How to use checksums
b93ac2acd3c536b86039200e4a56899dac9b7f45dfd7f48ce8380d380f1ef736
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.11.5 Linux/6.8.0-57-generic

Release files / langchain_ocr_lib-0.4.1-py3-none-any.whl

Download URL langchain_ocr_lib-0.4.1-py3-none-any.whl
Size 25.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
860852cf5c0e4031579c5fa52ac4f5d115df49f57567fa450f5eded8a97b348a
BLAKE2b-256 checksum
How to use checksums
abd91b984980255a8c59ec9d54b2e3d5dd75687d7d0d3a3816bf76ef276c1b1d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/2.1.2 CPython/3.11.5 Linux/6.8.0-57-generic

Release history Release notifications | RSS feed

This release

0.4.1 This release

2 release files

0.4.0

2 release files

0.3.3

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page