API جاوااسکریپت OCR منبع باز برای ایجاد PDFهای قابل جستجو
یک کتابخانه پیشرو جاوااسکریپت OCR برای ایجاد PDFهای قابل جستجو که OCR (تشخیص نوری کاراکتر) را انجام میدهد و متن را از هر دو تصویر (PNG، JPEG) و فایلهای PDF استخراج میکند.
Scribe.js چیست؟
در دنیای دیجیتال امروز، مقدار عظیمی از اطلاعات ارزشمند درون تصاویر گرفتار شده است — اسکرینشاتهای پیامهای خطا، عکسهای اسناد، اسلایدهای یک ارائه، یا حتی میمهای با متن هوشمند. تبدیل دستی این متن به صورت نوشتاری کاری خستهکننده و پرخطا است. اینجاست که فناوری تشخیص نوری کاراکتر (OCR) به کمک میآید و Scribe.js یکی از دوستانهترین راهها برای ادغام آن در پروژههای وب شما را ارائه میدهد. Scribe.js یک کتابخانهٔ متنباز جاوااسکریپت است که OCR را انجام میدهد و متن را از هر دو تصویر و فایلهای PDF استخراج میکند. برخلاف بسیاری از راهحلهای OCR که نیاز به پردازش سمت سرور یا تماس با APIهای خارجی دارند، Scribe.js بهصورت کامل در سمت کلاینت اجرا میشود و کنترل کامل بر دادههای شما را فراهم میکند و هزینههای سرور برای وظایف شناسایی متن را حذف مینماید.
Scribe.js یک کلاینت جاوااسکریپت سبک وزن برای Google Cloud Vision API است. تمام عملیات OCR مستقیماً در مرورگر کاربر یا محیط Node.js شما انجام میشود، که حریم خصوصی را تضمین کرده و هزینههای زیرساخت سرور را کاهش میدهد. این کتابخانه پشتیبانی از ویژگیهای مختلفی را شامل میشود، مانند پیشپردازش تصاویر، جریان کاری یکپارچه برای تصاویر، تشخیص خودکار، لایهبندی PDF، فیلتر کردن صفحات با اطمینان پایین، کش کردن موتورهای OCR و غیره. کتابخانه با استفاده از JavaScript مدرن ESM (ماژولهای ECMAScript) ساخته شده است، که ادغام آن را در جریانهای کاری توسعه وب معاصر بدون نیاز به پیکربندیهای ساخت پیچیده آسان میکند. این رویکرد مبتنی بر توسعهدهنده به این معنی است که میتوانید با تنها چند خط کد، استخراج متن از اسناد را آغاز کنید.
شروع کار با Scribe.js
روش پیشنهادی برای نصب Scribe.js استفاده از npm است. لطفاً برای نصب روان، دستور زیر را استفاده کنید
نصب Scribe.js از طریق npm
npm install scribe.js-ocr همچنین میتوانید بهصورت دستی نصب کنید؛ فایلهای آخرین نسخه را مستقیماً از مخزن GitHub دانلود کنید.
تشخیص متن از تصاویر
مهمترین مورد استفاده از کتابخانه Scribe.js استخراج متن از فایلهای تصویری است. این کتابخانه فرمتهای مختلف تصویر را پشتیبانی میکند و میتواند هم تصاویر تکتک و هم دستههای متعدد تصویر را در یک عملیات پردازش کند. در اینجا یک مثال پایهای آورده شده است که استخراج متن از یک URL تصویر را در برنامههای JavaScript نشان میدهد. این قطعه کد API سادهای که Scribe.js ارائه میدهد را به نمایش میگذارد. متد extractText یک آرایه از URLهای تصاویر را میپذیرد و یک Promise برمیگرداند که با متن شناساییشده حل میشود.
چگونه متن را از یک تصویر با استفاده از کتابخانه جاوااسکریپت استخراج کنیم؟
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های قابل جستجو با جاوااسکریپت
یکی از قدرتمندترین ویژگیهای Scribe.js توانایی افزودن لایههای متن نامرئی به فایلهای PDF موجود است. این قابلیت PDFهای مبتنی بر تصویر را به اسناد قابل جستجو تبدیل میکند بدون اینکه ظاهر بصری آنها تغییر کند. هنگامی که یک لایه متن به PDF اضافه میشود، کاربران میتوانند کلمات یا عبارات خاص را در داخل سند جستجو کنند، متن را از چیزی که به نظر میرسد تصویر باشد انتخاب و کپی کنند، از خوانندگان صفحهای و ابزارهای دسترسپذیری با اسناد اسکنشده استفاده کنند، امکان ایندکس شدن توسط موتورهای جستجو و سیستمهای مدیریت اسناد را فراهم آورند و غیره.
چگونه اسناد PDF قابل جستجو را با استفاده از کتابخانه جاوااسکریپت ایجاد کنیم؟
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 ویژگی "تشخیص متن سند" را ارائه میدهد. این اطلاعات بسیار غنیتری فراهم میکند، از جمله تشخیص پاراگراف، کلمه و شکست، که به حفظ ساختار سند اصلی کمک میکند. این برای برنامههایی که در آن طرح و ساختار مواد منبع مهم است، مانند پردازش فرمها، فاکتورها یا طرحهای چندستونی، بسیار مفید است.
چگونه تشخیص پیشرفته متن را در برنامههای جاوااسکریپت انجام دهیم؟
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);
});
پردازش دستهای چندین فایل با جاوااسکریپت
در برنامههای واقعی، متخصصان نرمافزار اغلب نیاز دارند تا چندین سند را بهصورت همزمان پردازش کنند. Scribe.js بهصورت پیشفرض از پردازش دستهای پشتیبانی میکند و به کاربران اجازه میدهد متن را از چندین تصویر یا PDF در یک عملیات داخل برنامه 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');
});