Azra-1-Mini-0.8b / README.md
Gustaaaa's picture
Upload folder using huggingface_hub
7c1c429 verified
|
Raw
History Blame Contribute Delete
9.86 kB
metadata
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 Banner

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:

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:

@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


📄 License & Attribution

This model is released under the Apache 2.0 License. Free for commercial and research use.