استخراج قائمة الطعام من صورة
تقرأ هذه الأداة صورة قائمة طعام — مطبوعة أو مكتوبة بخط اليد — وتستخرج اسم كل طبق ووصفه وسعره في قائمة نصية منظمة. تناسب أصحاب المطاعم والمقاهي الذين يريدون تحويل قائمة ورقية أو قديمة إلى نص رقمي دون إعادة كتابتها طبقًا طبقًا.
شغّلها أونلاين
شغّل هذه المهمة على خوادمنا باستخدام حسابك. الأدوات المجانية تعمل داخل متصفحك، أما هذه فتُخصم من رصيدك في KIT حسب السعر الموضّح أعلاه.
من ورقة أو لوحة إلى قائمة منظمة
سواء كانت القائمة مطبوعة على ورق فاخر أو مكتوبة بخط اليد على لوحة صغيرة، تتعرّف الأداة على اسم كل طبق وسعره، وتربط الوصف الملحق به إن وُجد، وترتّب الأصناف تحت أقسامها — مقبلات، أطباق رئيسة، مشروبات — كما ظهرت في الأصل. الناتج نص منظم يصلح للنشر على موقع أو تطبيق توصيل دون إعادة الطباعة يدويًا. هذا يوفر ساعات من إعادة الكتابة اليدوية على صاحب المطعم أو من يكلَّفه بتحديث القائمة، خصوصًا حين يكون المصدر الوحيد المتاح صورة قديمة أو لوحة أسعار معلّقة على الجدار دون نسخة رقمية أصلًا.
قوائم بالعربية والإنجليزية معًا
أغلب قوائم المطاعم في الخليج ثنائية اللغة: اسم الطبق بالعربية وسعره أو وصفه بالإنجليزية في السطر نفسه، أو العكس. تقرأ الأداة القائمة كاملة بلغتيها معًا، وتحافظ على الربط الصحيح بين اسم كل طبق وسعره، بدل أن تخلط الأسعار بين الأصناف المتجاورة كما تفعل أدوات OCR العامة. هذا الترابط الدقيق بين الاسم والسعر هو ما يفشل فيه كثير من أدوات القراءة الضوئية العامة عند قوائم كثيفة العناصر، فتُسند سعرًا لطبق مجاور بالخطأ، بينما تحافظ هذه الأداة على الترتيب الأصلي سطرًا بسطر.
الخطوة التالية: قائمة رقمية يصل إليها الزبون برمز
بعد استخراج الأصناف والأسعار كنص، يسهل بناء قائمة رقمية يفتحها الزبون على هاتفه بمجرد مسح رمز على الطاولة، بدل قائمة ورقية تحتاج طباعة جديدة كل مرة يتغيّر فيها سعر أو يُضاف طبق. يبقى تحديث الأسعار مسألة تعديل نص، لا إعادة تصميم كاملة. هذا يفيد خصوصًا في مواسم تتغير فيها الأسعار بوتيرة أسرع، كموسم رمضان أو عروض الصيف، حين يحتاج صاحب المطعم تحديث قائمته أكثر من مرة دون تحمل تكلفة طباعة جديدة في كل مرة.
السعر والتشغيل
تكلفة الاستخراج $0.010 لكل طلب و$0.0575 عن كل صورة، بالدولار الأمريكي ودون اشتراك. تعمل الأداة من هذه الصفحة، وتتوفر أيضًا عبر الـAPI لمن يدير أكثر من فرع ويحتاج تحديث قوائم متعددة دفعة واحدة. تدفع فقط عن الصور التي ترفعها فعليًا، فمطعم بقائمة واحدة يدفع أقل من سلسلة تدير عشرات الفروع بقوائم مختلفة، دون أي رسوم اشتراك ثابتة تُحتسب بصرف النظر عن الاستخدام الفعلي.
حالات الاستخدام
رقمنة قائمة مقهى قديمة
يحوّل خالد العتيبي، صاحب مقهى صغير في الرياض، قائمة أسعار ورقية قديمة إلى نص رقمي بعد تعديل بعض الأسعار يدويًا على النسخة المطبوعة.
تحديث قائمة بعد رفع الأسعار
تستخرج مؤسسة النخيل للمقاولات — التي تدير كافتيريا داخلية لموظفيها — قائمة الأصناف الحالية من صورة لوحة الأسعار، لتحديث السجل الداخلي بعد تعديل بعض الأسعار.
تمهيد قائمة لعميل أجنبي
تستخرج نورة القحطاني نص قائمة مطعمها بالعربية أولًا كخطوة تمهيدية، قبل ترجمتها لاحقًا إلى الإنجليزية لعملاء زائرين.
الأسئلة الشائعة
هل تقرأ القوائم المكتوبة بخط اليد؟
نعم، لكن دقة القراءة تعتمد على وضوح الخط؛ كلما كانت الكتابة منتظمة ازدادت دقة الأصناف والأسعار المستخرجة.
هل تربط كل سعر بالطبق الصحيح تلقائيًا؟
نعم، تحافظ الأداة على الترابط بين اسم الطبق وسعره كما ظهر في القائمة الأصلية، حتى في القوائم ثنائية اللغة.
هل الأداة مجانية؟
لا، هذه وظيفة مدفوعة بسعر $0.010 للطلب و$0.0575 للصورة، بالدولار الأمريكي، تدفع فقط عمّا تستخرجه.
أين تذهب صورة القائمة بعد المعالجة؟
تُستخدم فقط لاستخراج النص منها ثم تُحذف؛ لا نحتفظ بنسخة منها.
هل تعمل من الجوال؟
نعم، صوّر القائمة بكاميرا جوالك وارفعها مباشرة من المتصفح.
ما الحد الأقصى لحجم الصورة؟
25 ميغابايت للصورة الواحدة.
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/ocr/menu \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"image":"https://ejemplo.com/imagen.jpg"}'const res = await fetch("https://api.kit.forhosting.com/ocr/menu", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"image": "https://ejemplo.com/imagen.jpg"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/ocr/menu",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"image": "https://ejemplo.com/imagen.jpg"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/ocr/menu", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"image":"https://ejemplo.com/imagen.jpg"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"image":"https://ejemplo.com/imagen.jpg"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/ocr/menu", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"image": "https://ejemplo.com/imagen.jpg"
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "ocr.menu",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الحدود
max_mb | 25 |
max_pages | 10 |
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
422 | task_failed | لم تنجح معالجة المهمة، ولن تُحتسب عليك؛ أعد المحاولة أو راسلنا مباشرة. |