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.
Table of Contents
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.pdfinputs
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)
| File | Size | Uploaded | |
|---|---|---|---|
| langchain_ocr_lib-0.4.1.tar.gz | 16.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|