---
license: apache-2.0
language:
- ott
- tr
- ar
pipeline_tag: image-to-text
tags:
- ocr
- ottoman
- qwen
- vllm
- vision-language
metrics:
- accuracy
- cer
---
# Azra 1-Mini (0.8B) — Ottoman Turkish OCR Model
**Azra 1-Mini 0.8b** is a lightweight, high-performance Vision-Language OCR model specialized in Ottoman Turkish text transcription across both **Nesih** (printed/calligraphic) and **Rika/Riqa** (handwritten) scripts.
Despite having only **0.8 billion parameters**, Azra 1-Mini achieves state-of-the-art accuracy on Ottoman Turkish OCR tasks, outperforming significantly larger proprietary models.
> ⚠️ **Important Note on Input Resolution & Segmentation:**
> This model has been fine-tuned and optimized specifically for **line-level text images (satır bazlı görüntüler)**. It may not achieve optimal accuracy directly on full-page images without prior text line cropping/segmentation.
---
## 📊 Benchmark Results & Performance Comparison
The model was evaluated against leading proprietary Vision-Language models on standard Ottoman Turkish test sets using character accuracy (`100% - CER`).
### 1. Nesih Script Test Set (Printed / Calligraphic)
| Model | Success Rate (%) | Rank |
| :--- | :---: | :---: |
| **Gemini 3.1 Pro** | **82.82%** | 👑 1st |
| **Azra 1-Mini 0.8b** | **80.23%** | 🥈 2nd |
| **Qwen 3.8 Max** | 74.26% | 🥉 3rd |
### 2. Rika Script Test Set (Handwritten)
| Model | Success Rate (%) | Rank |
| :--- | :---: | :---: |
| **Azra 1-Mini 0.8b** | **67.08%** | 👑 **1st (Winner)** |
| **Gemini 3.1 Pro** | 58.46% | 🥈 2nd |
| **Qwen 3.8 Max** | 54.99% | 🥉 3rd |
> 🌟 **Key Highlight:** Azra 1-Mini 0.8b achieves **1st place on the handwritten Rika dataset (67.08%)**, significantly outperforming both Gemini 3.1 Pro and Qwen 3.8 Max while running efficiently at sub-billion parameter scale.
---
## 📷 Qualitative Results & Sample Transcriptions
Below are top qualitative predictions generated by **Azra 1-Mini 0.8b** from the evaluation test sets:
### 1. Nesih Script Samples (Printed / Calligraphic)
| Image | Ground Truth (GT) | Model Prediction (Azra 1-Mini) | CER |
| :---: | :--- | :--- | :---: |
|
| `امّا اری وابدار ونازک اولور هر اعجک زمان غرسی` | `امّا اری وابدار ونازک اولور هر اعجک زمان غرسی` | **0.00%** |
|
| `هلاک ایدر ازایسه علاج ایله خلاص اولور` | `هلاک ایدر ازایسه علاج ایله خلاص اولور` | **0.00%** |
|
| `یافوجی ایچنه دوشرلر اوّل التنه وافرد وکلمش خردل` | `یافوجی ایچنه دوشرلر اوّل التنه وافرد وکلمش خردل` | **0.00%** |
|
| `اغزی محکم باغلنوب اول بوداق اکلوب یره کوملسه وقت` | `اغزی محکمه باغلنوب اول بوداق اکلوب یره کوملسه وقت` | **2.08%** |
|
| `دکمک زماندر دیمش یعنی آیک نقصانی زمانی که اوّل` | `دکک زماندر دیمش یعنی آیک نقصانی زمانی که اوّل` | **2.17%** |
### 2. Rika Script Samples (Handwritten)
| Image | Ground Truth (GT) | Model Prediction (Azra 1-Mini) | CER |
| :---: | :--- | :--- | :---: |
|
| `دیمک طلب و دیانت بزدن، دین، شریعت، هدایت اللهدندر و بو هدایت ایکی` | `دیک طلب و دیانت بزدن، دین، شریعت، هدایت اللهدندر۔ و بوهدایت ایکی` | **4.62%** |
|
| `ایتمک دون بنی تنویر ایدن کونشک یارین تنویر ایدهمیهجکنی ادعا ایتمک کبی قانون استقرایی انکاردر۔` | `ایتمک دوند بنی تنویر ایدن کونشک یارین تنویر ایدرمهجیکنی ادعا ایتمک کبی قانون استقرالی انکاردر۔` | **5.38%** |
|
| `ایمانده نه قدر بیوک بر سعادت و نعمت؛ و نه قدر بیوک بر لذت و راحت بولوندیغنی اڭلامق` | `ایمانده نه قدر یوک بر سعادت ونعمت و نه قدر یوک بر لذت و راحت بولوندیغی اشلامم` | **8.54%** |
|
| `”الله تعالی ابراهیم علیه السلامه وحی ایدوب دیدی که: اسماعیل حقندهکی دعاکی قبول ایتدم و اونی` | `"الله تعالی ابراهیم علمه السلام دحی ایدوب دیدی کی: اسماعیل حقندهکی دعاک قبول ایتدم واولی` | **8.79%** |
|
| `بوراده مطلوب اولمامق لازم کلیر، فی الواقع "الصراط المستقیم" نظم جلیلی بزه علی الاطلاق` | `بوراده مطلوب اولاسون لازم کلیر۔ فی الواقع "الصراط المستقیم" نظام جلیلی بزه علی الاطام` | **9.41%** |
---
## 🚀 Usage Guide (`transformers`)
Below is the standard, native PyTorch & Hugging Face `transformers` implementation using `AutoProcessor` and `Qwen3_5ForConditionalGeneration`:
```python
import os
import torch
from PIL import Image
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
from qwen_vl_utils import process_vision_info
# Device & dtype settings
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32
model_id = "OttomanNLP/Azra-1-Mini-0.8b"
print("[INFO] Loading model and processor...")
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
model = Qwen3_5ForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=dtype,
device_map="auto" if device == "cuda" else None,
trust_remote_code=True
)
model.eval()
print("[INFO] Model loaded successfully!")
def extract_text(image_path: str, prompt: str = "Görseldeki Osmanlıca metni transkribe et:") -> str:
"""Extract Ottoman text from a line image"""
if not os.path.exists(image_path):
return f"File not found: {image_path}"
image = Image.open(image_path).convert("RGB")
# Adjust dimensions to multiples of 64
w, h = image.size
new_w = ((w + 63) // 64) * 64
new_h = ((h + 63) // 64) * 64
if (new_w, new_h) != (w, h):
image = image.resize((new_w, new_h), Image.Resampling.LANCZOS)
messages = [{
"role": "user",
"content": [
{"type": "image", "image": image},
{"type": "text", "text": prompt}
]
}]
text_input = processor.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
image_inputs, _ = process_vision_info(messages)
inputs = processor(
text=[text_input],
images=image_inputs,
padding=True,
return_tensors="pt"
).to(device)
with torch.inference_mode():
generated_ids = model.generate(
**inputs,
max_new_tokens=512,
do_sample=False,
repetition_penalty=1.2,
no_repeat_ngram_size=3,
pad_token_id=processor.tokenizer.pad_token_id,
eos_token_id=processor.tokenizer.eos_token_id,
)
input_len = inputs.input_ids.shape[1]
output_text = processor.batch_decode(
generated_ids[:, input_len:],
skip_special_tokens=True,
clean_up_tokenization_spaces=False
)[0]
return output_text.strip()
if __name__ == "__main__":
image_path = "sample_line.png" # Path to line-level image
text = extract_text(image_path)
print("📝 Transcribed Text:\n", text)
```
---
## 🏷️ Model Details
- **Developed by:** OttomanNLP
- **Authors:** Gökhan Usta, Oğuz Alpoğlu, Fatih Günaydın
- **Model Type:** Vision-Language Model (VLM) for OCR
- **Language(s):** Ottoman Turkish (Osmanlıca)
- **Base Architecture:** Qwen3.5-Vision
- **Parameters:** ~0.8B
- **License:** Apache-2.0
---
## 📚 Citation
If you use this model or dataset in your research, please cite our paper:
```bibtex
@article{usta2026cross,
title={Cross-Lingual Transfer Learning and Autonomous Data Bootstrapping for VLM-Based Ottoman Turkish Handwritten Text Recognition},
author={Usta, G{\"o}khan and Alpo{\u{g}}lu, O{\u{g}}uz and G{\"u}nayd{\i}n, Fatih},
journal={Research Square (Preprint)},
year={2026},
doi={10.21203/rs.3.rs-10418926/v1},
note={Under Review at International Journal on Document Analysis and Recognition (IJDAR)}
}
```
**APA:**
> Usta, G., Alpoğlu, O., & Günaydın, F. (2026). *Cross-Lingual Transfer Learning and Autonomous Data Bootstrapping for VLM-Based Ottoman Turkish Handwritten Text Recognition*. Research Square Preprint. DOI: [10.21203/rs.3.rs-10418926/v1](https://doi.org/10.21203/rs.3.rs-10418926/v1)
---
## 📄 License & Attribution
This model is released under the **Apache 2.0 License**. Free for commercial and research use.