LoRA adapter fine-tuned on
Qwen2.5-VL-3B-Instruct for Tamil optical character recognition.
Attach to base model for inference. Merged model:
sair390/tamil-ocr-qwen25vl
1from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
2from peft import PeftModel
3from PIL import Image
4import torch
5
6# Load base model (4-bit quantized)
7base_model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
8 "unsloth/qwen2.5-vl-3b-instruct-unsloth-bnb-4bit",
9 load_in_4bit=True,
10 device_map="auto",
11)
12processor = AutoProcessor.from_pretrained("unsloth/qwen2.5-vl-3b-instruct-unsloth-bnb-4bit")
13
14# Attach LoRA adapter
15model = PeftModel.from_pretrained(base_model, "sair390/tamil-ocr-qwen25vl-lora")
16
17# Inference — use temperature=0 for deterministic OCR output
18image = Image.open("tamil_page.jpg")
19messages = [{
20 "role": "user",
21 "content": [
22 {"type": "image", "image": image},
23 {"type": "text", "text": "Read the Tamil text in this image."},
24 ],
25}]
26
27text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
28inputs = processor(text=[text], images=[image], return_tensors="pt").to(model.device)
29
30with torch.no_grad():
31 output = model.generate(
32 **inputs,
33 max_new_tokens=512,
34 temperature=0, # deterministic — best for OCR
35 do_sample=False,
36 )
37
38result = processor.decode(output[0], skip_special_tokens=True)
39print(result)