واجهة برمجة تطبيقات FormRead للمعالجة من جانب الخادم
معالجة النماذج من جانب الخادم
تتيح لك واجهة برمجة تطبيقات FormRead من جانب الخادم إرسال صورة نموذج ممسوحة ضوئيًا واستلام نتائج منظمة (OMR وOCR وBCR) مباشرة بصيغة JSON. بدون متصفح، بدون iframe - مجرد طلب HTTP بسيط من خادمك إلى خادمنا.
- أرسل صورة، واحصل على النتائج بصيغة JSON في طلب واحد.
- يدعم OMR (كشف الفقاعات) وOCR (استخراج النصوص) وBCR (قراءة الباركود وQR).
- يتم تحميل تكوين النموذج تلقائيًا من النموذج الذي قمت بإعداده في لوحة التحكم.
متى يجب استخدام واجهة برمجة التطبيقات هذه
استخدم واجهة برمجة التطبيقات من جانب الخادم عندما تحتاج إلى معالجة آلية من خادم إلى خادم دون أي واجهة مستخدم - على سبيل المثال، معالجة دفعات من النماذج الممسوحة ضوئيًا من مجلد، أو التكامل مع خط أنابيب الخلفية الحالي لديك، أو بناء أنظمة تصحيح آلي.
إذا كنت بحاجة إلى واجهة مرئية حيث يمكن للمستخدمين إعداد النماذج ومراجعة النتائج وإجراء ضمان الجودة - فاستخدم واجهة برمجة تطبيقات تكامل Iframe بدلاً من ذلك.
المصادقة
للاستخدامات المؤسسية، يمكن استخدام API عن طريق إنشاء رمز Bearer Auth.
سجل الدخول إلى FormRead لوحة التحكم وادخل إلى خيار رمز API:
أنشئ رموز API للسماح للخدمات الخارجية بالمصادقة مع تطبيقنا نيابة عنك:
معالجة صورة نموذج
أرسل صورة نموذج ممسوحة ضوئيًا لمعالجتها. يجب أن يكون النموذج قد تم إعداده بالفعل بمناطق القراءة (OMR وOCR وBCR) عبر لوحة التحكم أو iframe. تستخدم واجهة برمجة التطبيقات تكوين النموذج المحفوظ لمعالجة الصورة.
العناوين
| الاسم | القيمة |
|---|---|
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.