API OCR جافاسكريبت مفتوح المصدر لإنشاء ملفات PDF قابلة للبحث
مكتبة جافاسكريبت OCR رائدة لإنشاء ملفات PDF قابلة للبحث وتقوم بأداء OCR (التعرف الضوئي على الأحرف) وتستخرج النص من كل من الصور (PNG, JPEG) وملفات PDF.
ما هو Scribe.js؟
في العالم الرقمي اليوم، يتم حجز كمية هائلة من المعلومات القيمة داخل الصور—لقطات شاشة لرسائل الخطأ، صور مستندات، شرائح من عرض تقديمي، أو حتى ميمات بنص ذكي. كتابة هذا النص يدويًا عملية مرهقة وعرضة للأخطاء. هنا يأتي دور تقنية التعرف الضوئي على الأحرف (OCR) لإنقاذ الموقف، وتقدم Scribe.js واحدة من أكثر الطرق صديقة للمطورين لدمجها في مشاريع الويب الخاصة بك. Scribe.js هي مكتبة JavaScript مفتوحة المصدر تقوم بأداء OCR وتستخرج النص من كل من الصور وملفات PDF. على عكس العديد من حلول OCR التي تتطلب معالجة خلفية أو استدعاءات API خارجية، تعمل Scribe.js بالكامل على جانب العميل، مما يمنحك سيطرة كاملة على بياناتك ويقضي على تكاليف الخادم لمهام التعرف على النص.
Scribe.js هو عميل جافا سكريبت خفيف الوزن لواجهة برمجة تطبيقات Google Cloud Vision. جميع عمليات OCR تحدث مباشرة في متصفح المستخدم أو بيئة Node.js الخاصة بك، مما يضمن الخصوصية ويقلل من تكاليف بنية الخادم. تشمل المكتبة دعمًا لمختلف الميزات، مثل معالجة صورك مسبقًا، سير عمل موحد للصور، الكشف التلقائي، طبقة PDF، تصفية الصفحات ذات الثقة المنخفضة، تخزين محركات OCR في الذاكرة المؤقتة وما إلى ذلك. تم بناء المكتبة باستخدام جافا سكريبت حديثة بنظام ESM (ECMAScript Modules)، مما يجعل من السهل دمجها في سير عمل تطوير الويب المعاصر دون الحاجة إلى تكوينات بناء معقدة. هذا النهج الموجه للمطورين يعني أنه يمكنك بدء استخراج النص من المستندات ببضع أسطر من الشيفرة فقط.
البدء مع Scribe.js
الطريقة الموصى بها لتثبيت Scribe.js هي باستخدام npm. يرجى استخدام الأمر التالي لتثبيت سلس
تثبيت Scribe.js عبر npm
npm install scribe.js-ocr يمكنك أيضًا تثبيته يدويًا؛ قم بتحميل أحدث ملفات الإصدار مباشرةً من مستودع GitHub.
التعرف على النص من الصور
أكثر حالة استخدام أساسية لمكتبة Scribe.js هي استخراج النص من ملفات الصور. تتعامل المكتبة مع صيغ صور مختلفة ويمكنها معالجة كل من الصور الفردية ومجموعات متعددة من الصور في عملية واحدة. إليك مثالًا أساسيًا يوضح استخراج النص من عنوان URL لصورة داخل تطبيقات JavaScript. يوضح المقتطف واجهة برمجة التطبيقات البسيطة التي توفرها Scribe.js. طريقة extractText تقبل مصفوفة من عناوين URL للصور وتعيد Promise تُحلّ مع النص المُعترف به.
كيف تستخرج النص من صورة باستخدام مكتبة JavaScript؟
import scribe from 'scribe.js-ocr';
// Extract text from a single image
scribe.extractText(['https://example.com/sample-image.png'])
.then((result) => {
console.log('Extracted text:', result);
})
.catch((error) => {
console.error('OCR failed:', error);
});
إنشاء ملفات PDF قابلة للبحث عبر JavaScript
إحدى أقوى ميزات Scribe.js هي قدرتها على إضافة طبقات نصية غير مرئية إلى ملفات PDF الموجودة. تُحوِّل هذه الوظيفة ملفات PDF المستندة إلى الصور إلى مستندات قابلة للبحث دون تغيير مظهرها البصري. عندما تُضاف طبقة نصية إلى ملف PDF، يمكن للمستخدمين البحث عن كلمات أو عبارات محددة داخل المستند، تحديد النص ونسخه من ما يبدو كصورة، استخدام قارئات الشاشة وأدوات الوصول مع المستندات الممسوحة ضوئيًا، تمكين الفهرسة بواسطة محركات البحث وأنظمة إدارة المستندات، وما إلى ذلك.
كيف تنشئ مستندات PDF قابلة للبحث باستخدام مكتبة JavaScript؟
import scribe from 'scribe.js-ocr';
// Add searchable text layer to an image-based PDF
async function makeSearchablePDF(inputPdfUrl) {
try {
// First, perform OCR on the PDF
const ocrResult = await scribe.extractText([inputPdfUrl]);
// Then create a new PDF with the text layer embedded
const searchablePdf = await scribe.createSearchablePDF(
inputPdfUrl,
ocrResult
);
// The resulting PDF maintains the original appearance
// but now contains selectable, searchable text
return searchablePdf;
} catch (error) {
console.error('Failed to create searchable PDF:', error);
throw error;
}
}
كشف النص المتقدم في المستندات عبر JS
بالنسبة للصور التي تحتوي على مستندات بنص كثيف وتخطيطات معقدة (مثل صفحة كتاب ممسوحة ضوئياً أو تصدير PDF)، توفر مكتبة Scribe.js ميزة "Document Text Detection". تُقدم هذه الميزة معلومات أكثر غنىً، بما في ذلك كاشفات الفقرات والكلمات والفواصل، مما يساعد على الحفاظ على بنية المستند الأصلي. هذا مفيد للغاية للتطبيقات التي يكون فيها تخطيط وبنية المادة المصدرية مهمين، مثل معالجة النماذج والفواتير أو التخطيطات متعددة الأعمدة.
كيف تقوم بالكشف المتقدم عن النص داخل تطبيقات JavaScript؟
const Scribe = require('scribejs');
const serviceAccountKey = require('./path-to-your-key.json');
const scribe = new Scribe(serviceAccountKey);
const documentImageUrl = 'https://example.com/scanned-invoice.png';
// Use the `documentText` method for advanced detection
scribe.documentText(documentImageUrl)
.then(fullTextAnnotation => {
// The fullTextAnnotation object contains detailed data
console.log('Full Document Text:');
console.log(fullTextAnnotation.text); // The plain text of the entire document
// You can also iterate through pages, blocks, paragraphs, and words
fullTextAnnotation.pages.forEach(page => {
page.blocks.forEach(block => {
console.log('\nBlock Confidence:', block.confidence);
block.paragraphs.forEach(paragraph => {
console.log(paragraph.text);
});
});
});
})
.catch(error => {
console.error('Document OCR Error:', error);
});
معالجة دفعة متعددة للملفات عبر JavaScript
في التطبيقات الواقعية، غالبًا ما يحتاج المتخصصون في البرمجيات إلى معالجة مستندات متعددة في آن واحد. تدعم Scribe.js المعالجة الدفعية مباشرةً، مما يتيح للمستخدمين استخراج النص من صور أو ملفات PDF متعددة في عملية واحدة داخل تطبيق JavaScript. يوضح المثال التالي كيف يمكن لمطوري البرمجيات معالجة دفعة من المستندات باستخدام أوامر JavaScript.
كيف تعالج دفعة من المستندات باستخدام مكتبة JavaScript؟
import scribe from 'scribe.js-ocr';
// Process multiple documents at once
async function batchProcess(fileUrls) {
try {
// Pass an array of URLs to process multiple files
const results = await scribe.extractText(fileUrls);
// Results are returned in the same order as input
results.forEach((text, index) => {
console.log(`Document ${index + 1} text:`, text);
});
return results;
} catch (error) {
console.error('Batch processing failed:', error);
throw error;
}
}
// Process a batch of documents
const documents = [
'https://example.com/receipt1.jpg',
'https://example.com/receipt2.jpg',
'https://example.com/invoice.pdf'
];
batchProcess(documents)
.then(allText => {
console.log('All documents processed successfully');
});