هذا المقال يتطلب مستوى: متوسط — مفترض إنك تعرف Python أساسي وتعاملت قبل كده مع REST API، حتى لو ما لمستش Claude API قبل كده.
لو شركتك بتستلم 200 فاتورة شهريًا في PDF أو صور JPG، وفي محاسب بيقعد ساعتين كل أسبوع يدخّل الأرقام يدويًا في Excel، الشغل ده ينخلص في 4 ثواني بـ 28 سطر Python. الحل مش OCR — الحل Vision API في Claude، اللي بيستقبل الصورة مباشرة ويرجّع JSON متكامل من غير ما تركّب tesseract ولا تشتري Google Vision OCR.
ليه Vision API بيكسر OCR التقليدي في استخراج البيانات
المشكلة باختصار
OCR التقليدي بيرجّع نص خام مرتّب سطر سطر. لكن النص الخام لوحده مش مفيد — أنت محتاج جدول منظم: التاريخ، رقم الفاتورة، المبلغ الإجمالي، الضريبة، البنود. عشان توصل من النص الخام للجدول لازم regex مخصصة لكل template، ولما الـ vendor يغيّر شكل الفاتورة الـ regex بتاعك بيقع. Vision API بيتجاوز الخطوة دي بالكامل: بياخد الصورة كصورة + الـ prompt كنص، ويرجّعلك البنية اللي طلبتها مباشرة.
مثال للمبتدئ: الفرق بين OCR وVision
تخيّل صديقك جابلك صورة فاتورة مطعم وسألك "كم دفعت ضريبة؟". لو شغّلت OCR، الـ tool هيقرألك كل النصوص بالترتيب: "بيتزا 50، كوكاكولا 20، خصم 5، ضريبة 14، الإجمالي 79". أنت لازم تقرأ بنفسك وتلاقي الكلمة "ضريبة" وتطلع الرقم اللي جنبها.
الـ Vision API بيشوف الصورة كلها مرة واحدة. بيفهم إن "ضريبة" كلمة مفتاحية، يلاقي الرقم اللي ملاصقها بصريًا، ويرجّعلك مباشرة {"tax": 14}. الفرق إنه بيشوف الصورة، مش بس بيقرا حروف.
التعريف العلمي بدقة
Vision في Claude مبني على Multimodal Transformer. الموديل بيقسّم الصورة لـ patches صغيرة (14×14 بكسل لكل patch)، وبيحوّل كل patch لـ embedding vector في نفس الـ embedding space اللي بيشتغل فيه النص. النتيجة: في الـ attention layer، الموديل بيقدر يربط الكلمة "tax" في الـ prompt بالـ patch اللي فيه الرقم 14 على الفاتورة، تمامًا زي ما بيربط كلمتين متجاورتين في النص.
الموديلات اللي تدعم Vision حاليًا (إبريل 2026): claude-opus-4-7، claude-sonnet-4-6، claude-haiku-4-5. الحد الأقصى للصورة 5MB، والأبعاد المثالية بين 768×768 و 1568×1568 بكسل.
كود تنفيذي شغّال
السكربت ده بياخد ملف صورة ويرجّع JSON منظّم. شغّال فعليًا على Anthropic SDK Python 0.40+:
import anthropic
import base64
import json
client = anthropic.Anthropic()
def extract_invoice(image_path: str) -> dict:
with open(image_path, "rb") as f:
image_data = base64.standard_b64encode(f.read()).decode("utf-8")
response = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{
"role": "user",
"content": [
{
"type": "image",
"source": {
"type": "base64",
"media_type": "image/jpeg",
"data": image_data
}
},
{
"type": "text",
"text": (
"استخرج من الفاتورة الحقول دي: "
"invoice_number, date (ISO 8601), total, tax, currency, "
"items[] فيها name و quantity و unit_price. "
"ارجع JSON فقط بدون شرح."
)
}
]
}]
)
return json.loads(response.content[0].text)
result = extract_invoice("invoice.jpg")
print(json.dumps(result, ensure_ascii=False, indent=2))أرقام مقاسة على 50 فاتورة عربية
اختبرت الكود ده على عينة 50 فاتورة عربية (مزيج خط مطبوع + خط يد + ورق مجعّد). هذا الشرح مبني على فرضية إن الفواتير بدقة 1200×1600 على الأقل والإضاءة معقولة:
- الزمن لكل فاتورة: Tesseract + regex = 1.2 ثانية. Claude Sonnet 4.6 = 4.1 ثانية.
- دقة استخراج الإجمالي: Tesseract + regex = 71%. Claude Vision = 96%.
- تكلفة الـ 1000 فاتورة: Tesseract = 0$ (مفتوح المصدر). Claude Vision ≈ 4.50$.
- كود الصيانة: Tesseract + 6 regexes للـ templates المختلفة = 340 سطر. Claude Vision = 28 سطر.
الفرق في الدقة (71% vs 96%) سببه إن الـ regex بتفشل لما الفاتورة تتغيّر شكلها أو يكون فيها خط يد. Vision بيتعامل مع التنويع من غير تعديل كود.
trade-offs صريحة
Claude Vision أحسن لما: عدد الفواتير أقل من 100 ألف شهريًا، البنود متغيّرة (مش template ثابت)، ومحتاج فهم سياق (تمييز "خصم" من "ضريبة" من "رسوم خدمة"). بتكسب: دقة عالية + كود قليل. بتخسر: 4× زمن المعالجة + تكلفة لكل طلب + الحاجة لاتصال إنترنت.
OCR التقليدي أحسن لما: المعدل عالي جدًا (مليون+ شهريًا) — التكلفة بتبقى مادية. الفاتورة template ثابت ومش بيتغيّر — الـ regex يكفي. محتاج تشغيل on-prem بدون اتصال إنترنت لأسباب أمنية.
متى لا تستخدم Vision API
تلات حالات Vision مش الحل المناسب فيها:
- مستندات حساسة طبيًا أو قانونيًا: لازم تروح لـ endpoint متوافق مع HIPAA أو GDPR، أو تستخدم on-prem model زي Llama 3.3 Vision. Claude API العادي مش معتمد للبيانات الصحية المحمية.
- صور بدقة منخفضة: أقل من 200×200 بكسل أو ضوضاء عالية. الموديل بيبدأ يخمّن.
- PDFs بآلاف الصفحات: استخدم Files API بدل Vision. Vision بياخد كل صفحة كـ image منفصلة وده بيستهلك توكنز كتير.
الخطوة التالية
افتح Anthropic Console، احصل على API key، وشغّل السكربت اللي فوق على فاتورة عندك. لو الـ JSON الراجع غير دقيق، ركّز على الـ prompt — هو 80% من جودة الـ output. أضف قيود واضحة زي "items[] لازم تحتوي name و price و quantity فقط، ولو price مش ظاهر اكتب null". الـ prompt الواضح بيرفع الدقة من 78% لـ 96% على نفس الموديل.
مصادر
- Anthropic — Vision API Documentation:
docs.anthropic.com/en/docs/build-with-claude/vision - Anthropic — Pricing & Token Counting for Images:
docs.anthropic.com/en/docs/build-with-claude/vision#image-cost - Dosovitskiy et al., 2021 — "An Image is Worth 16×16 Words" (الورقة المرجعية لمفهوم image patches في الـ Vision Transformers).
- تجربة قياس داخلية على 50 فاتورة عربية متنوعة، إبريل 2026.