Image-Text-to-Text
PaddleOCR
GGUF
English
Chinese
multilingual
ERNIE4.5
PaddlePaddle
image-to-text
ocr
document-parse
layout
table
formula
chart
seal
spotting
conversational
Instructions to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- PaddleOCR
How to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with PaddleOCR:
# See https://www.paddleocr.ai/latest/version3.x/pipeline_usage/PaddleOCR-VL.html to installation from paddleocr import PaddleOCRVL pipeline = PaddleOCRVL(pipeline_version="JamePeng2023/PaddleOCR-VL-1.5-GGUF") output = pipeline.predict("path/to/document_image.png") for res in output: res.print() res.save_to_json(save_path="output") res.save_to_markdown(save_path="output") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16 # Run inference directly in the terminal: llama cli -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16 # Run inference directly in the terminal: llama cli -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16 # Run inference directly in the terminal: ./llama-cli -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16 # Run inference directly in the terminal: ./build/bin/llama-cli -hf JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
Use Docker
docker model run hf.co/JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
- LM Studio
- Jan
- vLLM
How to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "JamePeng2023/PaddleOCR-VL-1.5-GGUF" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "JamePeng2023/PaddleOCR-VL-1.5-GGUF", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
- Ollama
How to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with Ollama:
ollama run hf.co/JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
- Unsloth Desktop
- Docker Model Runner
How to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with Docker Model Runner:
docker model run hf.co/JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
- Lemonade
How to use JamePeng2023/PaddleOCR-VL-1.5-GGUF with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull JamePeng2023/PaddleOCR-VL-1.5-GGUF:BF16
Run and chat with the model
lemonade run user.PaddleOCR-VL-1.5-GGUF-BF16
List all available models
lemonade list
- Atomic Chat
The PaddleOCR-VL is now supported in llama-cpp-python. This project provides a test GGUF file.
llama-cpp-python: https://github.com/JamePeng/llama-cpp-python
Code example:
from llama_cpp import Llama
from llama_cpp.llama_chat_format import PaddleOCRChatHandler
import base64
import os
# Model and multimodal projection paths
MODEL_PATH = r"path/to/PaddleOCR-VL-1.5-BF16.gguf"
MMPROJ_PATH = r"path/to/mmproj-BF16.gguf"
# Initialize the Llama model with vision support
llm = Llama(
model_path=MODEL_PATH,
chat_handler=PaddleOCRChatHandler(
clip_model_path=MMPROJ_PATH,
),
n_gpu_layers=-1, # Use all available GPU layers
n_ctx = 0, # Context window size
n_batch=2048,
)
# Comprehensive MIME type mapping (updated as of 2025)
# Based on Pillow 10.x+ "Fully Supported" (Read & Write) formats
# Reference: IANA official media types + common real-world usage
# See: https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html
_IMAGE_MIME_TYPES = {
# Most common formats
'.png': 'image/png',
'.jpg': 'image/jpeg',
'.jpeg': 'image/jpeg',
'.gif': 'image/gif',
'.webp': 'image/webp',
# Next-generation formats
'.avif': 'image/avif',
'.jp2': 'image/jp2',
'.j2k': 'image/jp2',
'.jpx': 'image/jp2',
# Legacy / Windows formats
'.bmp': 'image/bmp',
'.ico': 'image/x-icon',
'.pcx': 'image/x-pcx',
'.tga': 'image/x-tga',
'.icns': 'image/icns',
# Professional / Scientific imaging
'.tif': 'image/tiff',
'.tiff': 'image/tiff',
'.eps': 'application/postscript',
'.dds': 'image/vnd-ms.dds',
'.dib': 'image/dib',
'.sgi': 'image/sgi',
# Portable Map formats (PPM/PGM/PBM)
'.pbm': 'image/x-portable-bitmap',
'.pgm': 'image/x-portable-graymap',
'.ppm': 'image/x-portable-pixmap',
# Miscellaneous / Older formats
'.xbm': 'image/x-xbitmap',
'.mpo': 'image/mpo',
'.msp': 'image/msp',
'.im': 'image/x-pillow-im',
'.qoi': 'image/qoi',
}
def image_to_base64_data_uri(
file_path: str,
*,
fallback_mime: str = "application/octet-stream"
) -> str:
"""
Convert a local image file to a base64-encoded data URI with the correct MIME type.
Supports 20+ image formats (PNG, JPEG, WebP, AVIF, HEIC, SVG, BMP, ICO, TIFF, etc.).
Args:
file_path: Path to the image file on disk.
fallback_mime: MIME type used when the file extension is unknown.
Returns:
A valid data URI string (e.g., data:image/webp;base64,...).
Raises:
FileNotFoundError: If the file does not exist.
OSError: If reading the file fails.
"""
if not os.path.isfile(file_path):
raise FileNotFoundError(f"Image file not found: {file_path}")
extension = os.path.splitext(file_path)[1].lower()
mime_type = _IMAGE_MIME_TYPES.get(extension, fallback_mime)
if mime_type == fallback_mime:
print(f"Warning: Unknown extension '{extension}' for '{file_path}'. "
f"Using fallback MIME type: {fallback_mime}")
try:
with open(file_path, "rb") as img_file:
encoded_data = base64.b64encode(img_file.read()).decode("utf-8")
except OSError as e:
raise OSError(f"Failed to read image file '{file_path}': {e}") from e
return f"data:{mime_type};base64,{encoded_data}"
# ========================
# Main image processing & inference section
# ========================
# 1. List of image paths you want to analyze (supports mixed formats)
image_paths = [
r'path/to/image.jpg',
]
# 2. Container for message content (each image + final text prompt)
user_content = []
# 3. Convert every image to a properly formatted data URI message
for path in image_paths:
data_uri = image_to_base64_data_uri(path)
user_content.append({
"type": "image_url",
"image_url": {"url": data_uri}
})
PROMPTS = {
"ocr": "OCR:",
"table": "Table Recognition:",
"formula": "Formula Recognition:",
"chart": "Chart Recognition:",
"spotting": "Spotting:",
"seal": "Seal Recognition:",
}
# 4. Append the text instruction (appears after all images in the message)
user_content.append({
"type": "text",
"text": PROMPTS['ocr'] # You can change the prompt as needed
})
# 5. Perform chat completion with vision
response = llm.create_chat_completion(
messages=[
# {"role": "system", "content": "You are a highly accurate vision-language assistant. Provide detailed, precise, and well-structured image descriptions."},
{"role": "user", "content": user_content}
],
max_tokens=2048,
)
# 6. Print the model's reply
print(response["choices"][0]["message"]["content"])
- Downloads last month
- 169
Hardware compatibility
Log In to add your hardware
8-bit
16-bit
Model tree for JamePeng2023/PaddleOCR-VL-1.5-GGUF
Base model
PaddlePaddle/PaddleOCR-VL-1.5