واجهة برمجة تطبيقات FormRead للمعالجة من جانب الخادم

Oscar Munoz Oscar Munoz · · 2 دقيقة قراءة

معالجة النماذج من جانب الخادم

تتيح لك واجهة برمجة تطبيقات FormRead من جانب الخادم إرسال صورة نموذج ممسوحة ضوئيًا واستلام نتائج منظمة (OMR وOCR وBCR) مباشرة بصيغة JSON. بدون متصفح، بدون iframe - مجرد طلب HTTP بسيط من خادمك إلى خادمنا.

  • أرسل صورة، واحصل على النتائج بصيغة JSON في طلب واحد.
  • يدعم OMR (كشف الفقاعات) وOCR (استخراج النصوص) وBCR (قراءة الباركود وQR).
  • يتم تحميل تكوين النموذج تلقائيًا من النموذج الذي قمت بإعداده في لوحة التحكم.

متى يجب استخدام واجهة برمجة التطبيقات هذه

استخدم واجهة برمجة التطبيقات من جانب الخادم عندما تحتاج إلى معالجة آلية من خادم إلى خادم دون أي واجهة مستخدم - على سبيل المثال، معالجة دفعات من النماذج الممسوحة ضوئيًا من مجلد، أو التكامل مع خط أنابيب الخلفية الحالي لديك، أو بناء أنظمة تصحيح آلي.

إذا كنت بحاجة إلى واجهة مرئية حيث يمكن للمستخدمين إعداد النماذج ومراجعة النتائج وإجراء ضمان الجودة - فاستخدم واجهة برمجة تطبيقات تكامل Iframe بدلاً من ذلك.

المصادقة

للاستخدامات المؤسسية، يمكن استخدام API عن طريق إنشاء رمز Bearer Auth.

سجل الدخول إلى FormRead لوحة التحكم وادخل إلى خيار رمز API:

قائمة لوحة تحكم FormRead مع خيار رموز API المميز

أنشئ رموز API للسماح للخدمات الخارجية بالمصادقة مع تطبيقنا نيابة عنك:

إنشاء رمز API جديد لـ FormRead مع مربعات اختيار الأذونات

معالجة صورة نموذج

أرسل صورة نموذج ممسوحة ضوئيًا لمعالجتها. يجب أن يكون النموذج قد تم إعداده بالفعل بمناطق القراءة (OMR وOCR وBCR) عبر لوحة التحكم أو iframe. تستخدم واجهة برمجة التطبيقات تكوين النموذج المحفوظ لمعالجة الصورة.

POST /api/forms/{form_id}/process

العناوين

الاسم القيمة
Authorization Bearer YOUR_API_TOKEN
Accept application/json
Content-Type application/json or multipart/form-data

مع رفع الملف:

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --form 'image=@"/path/to/scanned-form.jpg"'

مع رابط الصورة:

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"image_url": "https://example.com/scanned-form.jpg"}'

استجابة

{
  "success": true,
  "results": {
    "OMR-0-0": "A",
    "OMR-0-1": "C",
    "OMR-0-2": "B,D",
    "OCR-1": "John Smith",
    "BCR-2": "1234567890"
  },
  "omr_details": {
    "OMR-0": {
      "questions": [
        [
          {"left": 0.12, "top": 0.22, "width": 0.02, "height": 0.02, "blackPixelsRatio": 0.72},
          {"left": 0.15, "top": 0.22, "width": 0.02, "height": 0.02, "blackPixelsRatio": 0.15}
        ]
      ]
    }
  },
  "anchor_error": false,
  "processing_time_ms": 450
}

حقول الاستجابة

الحقل النوع الوصف
success boolean ما إذا كانت المعالجة قد اكتملت بنجاح
results object أزواج مفتاح-قيمة لنتائج المناطق. المفاتيح هي أسماء المناطق (مثل OMR-0-0, OCR-1, BCR-2)
omr_details object بيانات تفصيلية على مستوى الفقاعات لمناطق OMR بما في ذلك المواقع ونسب التعبئة
anchor_error boolean صحيح إذا تعذر محاذاة ورقة النموذج (مثل عدم اكتشاف الزوايا)
processing_time_ms integer زمن المعالجة بالميلي ثانية

خيارات إدخال الصورة

يمكنك تقديم الصورة بثلاث طرق. استخدم واحدة بالضبط:

المعامل النوع الوصف
image file رفع الملف (multipart/form-data)
image_url string رابط URL عام للصورة
image_base64 string بيانات الصورة بترميز Base64

ملاحظة

يتم تحميل إعدادات النموذج (مناطق القراءة، العتبات، نقاط الارتساء) تلقائياً من النموذج الذي أعددته في لوحة تحكم FormRead. لا تحتاج إلى إرسال أي إعدادات في الطلب.

معالجة الدُفعات

لمعالجة صور متعددة لنفس النموذج في طلب واحد، مرر قائمة بعناوين URL مفصولة بفواصل في حقل image_url. تُرجع النتائج كمصفوفة بنفس الترتيب.

الطلب

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{"image_url": "https://example.com/a.jpg,https://example.com/b.jpg,https://example.com/c.jpg"}'

استجابة

{
  "results": [
    {
      "id": "0",
      "image_url": "https://example.com/a.jpg",
      "success": true,
      "results": { "OMR-0-0": "A", "OCR-1": "John Smith" },
      "anchor_error": false,
      "processing_time_ms": 430
    },
    {
      "id": "1",
      "image_url": "https://example.com/b.jpg",
      "success": true,
      "results": { "OMR-0-0": "B", "OCR-1": "Jane Doe" }
    },
    {
      "id": "2",
      "image_url": "https://example.com/c.jpg",
      "success": false,
      "error": "Failed to fetch image from URL: 404"
    }
  ],
  "total": 3
}

معلمات الدُفعة

المعامل النوع الافتراضي الوصف
image_url string — عنوان URL واحد أو أكثر لصور عامة. يُفصل بينها بفواصل للوضع الدُفعي.
details boolean false تضمين omr_details (مواضع كل فقاعة ونسب الامتلاء) في كل نتيجة دفعية. يُحذف افتراضيًا للحفاظ على صغر حجم الاستجابات.

سلوك الوضع الدفعي

  • الوضع الدفعي متاح فقط مع image_url. رفع الملفات وimage_base64 مخصصان للصور المفردة فقط.
  • فشل عنوان URL واحد لا يؤدي إلى فشل الدُفعة بأكملها — حيث يحصل هذا العنصر على "success": false وحقل error؛ وتستمر بقية العناصر.
  • تحافظ النتائج على الترتيب المُرسل عبر id (مُؤشر يبدأ من 0).
  • يُعاد omr_details دائمًا في وضع الصورة المفردة؛ أما في الوضع الدفعي فيتطلب "details": true.

الدفعة مع omr_details

curl --location 'https://formread.org/api/forms/123/process' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_TOKEN' \
  --header 'Content-Type: application/json' \
  --data '{
    "image_url": "https://example.com/a.jpg,https://example.com/b.jpg",
    "details": true
  }'

الحدود

الحد القيمة السلوك
الطلبات في الدقيقة 60 لكل رمز API. تجاوزها يُرجع خطأ HTTP 429.
مهلة الطلب الواحد 60s الطلبات التي تتجاوز 60 ثانية تُنهى مع خطأ.

تبدو استجابة 429 على النحو التالي:

{
  "message": "Too Many Attempts."
}

يُحتسب الطلب الدفعي كطلب واحد بغض النظر عن عدد عناوين URL التي يحتويها.

تحديد حجم الدفعات

  • لكل دفعة: قم بقياس processing_time_ms في استجابة عينة صورة واحدة، ثم قم بتجميع دفعة تنتهي بشكل مريح في أقل من 60 ثانية.
  • عبر الدفعات: وتيرة الطلبات للبقاء تحت 60 طلبًا في الدقيقة.
  • حجم الصورة: تقليص من جانب العميل إلى أصغر أبعاد لا تزال تعطي نتائج صحيحة. هذا هو العامل الأكبر المؤثر على وقت كل صورة.

أنواع المناطق المدعومة

النوع الوصف تنسيق النتيجة
OMR التعرف على العلامات البصرية - يكتشف الفقاعات المملوءة في أوراق الإجابات "A", "B,C"
OCR التعرف البصري على الأحرف - يستخرج النص المطبوع أو المكتوب بخط اليد "John Smith"
BCR التعرف على الرموز الشريطية ورموز QR - يقرأ الرموز الشريطية ورموز QR "1234567890"

أمثلة على الكود

إليك أمثلة كاملة بلغة Python و JavaScript لمعالجة صورة نموذج:

Python

import requests

API_URL = "https://formread.org/api/forms/{form_id}/process"
TOKEN = "YOUR_API_TOKEN"

with open("scanned-form.jpg", "rb") as f:
    response = requests.post(
        API_URL.format(form_id=123),
        headers={
            "Accept": "application/json",
            "Authorization": f"Bearer {TOKEN}",
        },
        files={"image": f},
    )

data = response.json()
print(data["results"])
# {"OMR-0-0": "A", "OMR-0-1": "C", "OCR-1": "John Smith"}

Node.js

const FormData = require('form-data');
const fs = require('fs');
const axios = require('axios');

const form = new FormData();
form.append('image', fs.createReadStream('scanned-form.jpg'));

const response = await axios.post(
  'https://formread.org/api/forms/123/process',
  form,
  {
    headers: {
      ...form.getHeaders(),
      'Accept': 'application/json',
      'Authorization': 'Bearer YOUR_API_TOKEN',
    },
  }
);

console.log(response.data.results);
// { 'OMR-0-0': 'A', 'OMR-0-1': 'C', 'OCR-1': 'John Smith' }

الأسئلة الشائعة

ماذا تفعل واجهة برمجة التطبيقات للمعالجة من جانب الخادم؟

ترسل صورة نموذج ممسوح ضوئياً في طلب HTTP POST واحد وتستقبل نتائج OMR (فقاعات) و OCR (نص) و BCR (رمز شريطي/QR) منظمة بصيغة JSON - لا حاجة لمتصفح أو iframe.

كيف أوثق الطلبات؟

مرر رمز الوصول الشخصي الخاص بك كرمز Bearer في ترويسة Authorization: Authorization: Bearer YOUR_API_TOKEN. قم بتوليد الرمز من قسم رموز API في لوحة تحكم FormRead.

هل يمكنني معالجة عدة صور في طلب واحد؟

نعم. مرر قائمة مفصولة بفواصل لعناوين URL العامة للصور في حقل image_url. تعود النتائج في مصفوفة تطابق ترتيب الإرسال، وعنوان URL الفاشل يفشل فقط في العنصر الخاص به - والباقي يستمر.

ما هي حدود المعدل والحجم؟

حتى 60 طلباً في الدقيقة لكل رمز API، مع مهلة معالجة 60 ثانية لكل طلب. الطلب المجمع يعتبر استدعاءً واحداً بغض النظر عن عدد عناوين URL التي يحتويها.

هل أحتاج إلى إرسال إعدادات النموذج مع كل طلب؟

لا. إعدادات النموذج - مناطق القراءة، العتبات، نقاط الارتساء - يتم تحميلها تلقائياً من النموذج الذي أعددته في لوحة تحكم FormRead. طلبك يحتاج فقط إلى الصورة ومعرف النموذج في مسار URL.

توقف عن تصحيح النماذج يدوياً.

ابدأ العمل مع FormRead الآن: أنشئ نموذجك، وامسح أول ورقة، واحصل على نتائج منظمة في دقائق.

ابدأ الآن — لا حاجة لبطاقة ائتمان