larshiakzemil/glm-ocr-farsi
034
GLM-OCR Farsi
Fine-tuned GLM-OCR for Persian / Farsi OCR (full end-to-end SFT: vision + projector + language model).
Training summary
Eval loss (e2e stage)
Files
model.safetensors— best weights (checkpoint-19984)- Tokenizer / processor configs for Transformers inference
training_loss.png,training_eval_loss.png— training curves
Usage
Requires transformers ≥ 5.x (GLM-OCR / glm_ocr support).
import torch
from PIL import Image
from transformers import AutoModelForImageTextToText, AutoProcessor
model_id = "larshiakzemil/glm-ocr-farsi"
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.bfloat16 if device == "cuda" else torch.float32
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = AutoModelForImageTextToText.from_pretrained(
model_id, trust_remote_code=True, dtype=dtype, device_map=device
)
model.eval()
image = Image.open("page.jpg").convert("RGB")
messages = [{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": "Text Recognition:"},
],
}]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[text], images=[image], return_tensors="pt")
inputs = {k: v.to(device) if hasattr(v, "to") else v for k, v in inputs.items()}
with torch.inference_mode():
out = model.generate(**inputs, max_new_tokens=512, do_sample=False)
decoded = processor.decode(out[0], skip_special_tokens=True)
print(decoded.split("Text Recognition:", 1)[-1].strip())Notes
- Optimized for handwriting / document text recognition with the official GLM-OCR text prompt.
- For full document layout parsing, use the GLM-OCR SDK with this checkpoint as the recognition model.
