کتابخانهٔ رایگان جاوااسکریپت برای استخراج متن از تصاویر و فرمهای اسکنشده
کتابخانهٔ متنباز تشخیص نوری کاراکتر (OCR) به زبان جاوااسکریپت برای استخراج متن از تصاویر و اسناد اسکنشدهٔ سیاه‑و‑سفید با پشتیبانی از پیشپردازش تصویر و قالبها در وب یا برنامههای Node.js.
در دنیای دیجیتال مدرن، فناوری تشخیص نوری کاراکتر (OCR) نقش حیاتی در تبدیل تصاویر اسکنشده، یادداشتهای دستنویس یا اسناد چاپی به دادههای قابل ویرایش و جستجو ایفا میکند. برای توسعهدهندگان جاوااسکریپتی که به دنبال راهحل سبک وزن و متنباز هستند، Guten OCR گزینهٔ جذابی ارائه میدهد. این موتور OCR مبتنی بر جاوااسکریپت با تمرکز بر سادگی طراحی شده است و برای ادغام ویژگیهای OCR مستقیماً در برنامههای مبتنی بر مرورگر یا Node.js ایدهآل است. ویژگیهای مهمی در این کتابخانه گنجانده شدهاند، از جمله تشخیص کاراکتر با استفاده از قالبها، آستانهگذاری و باینریسازی تصویر، تقسیمبندی کاراکتر، مطابقت قالب و ترکیب متن، پشتیبانی از پایهٔ کد مدولار و غیره. این کتابخانه بر تشخیص متن چاپی از اسناد اسکنشدهٔ سیاه‑و‑سفید متمرکز است و برای متون قالببندیشدهٔ خوب مانند کتابها یا فرمها مناسبترین است.
Guten OCR یک موتور OCR متنباز به زبان جاوااسکریپت است که توسط Gutenye ایجاد شده است. برخلاف ابزارهای OCR سنگین که نیاز به وابستگیهای خارجی یا تنظیمات گسترده دارند، Guten OCR کاملاً به جاوااسکریپت نوشته شده و میتواند در مرورگر وب یا روی سرور با Node.js اجرا شود. این کتابخانه از تکنیکهای پایهٔ پردازش تصویر برای تقسیم کاراکترها و شناسایی آنها با استفاده از یک سیستم تشخیص الگوی کاراکتر بهره میبرد. اگرچه هنوز نمیتواند با موتورهای تجاری OCR مانند Tesseract در زمینهٔ پشتیبانی از چندزبانگی یا متن دستنویس رقابت کند، سادگی و قابلیت هکپذیری آن آن را به گزینهٔ فوقالعادهای برای پروژههای آموزشی، اثبات مفهوم یا ویژگیهای OCR جاسازیشده در برنامههای وب سفارشی تبدیل میکند. برخلاف Tesseract یا سایر موتورهای بزرگ، Guten OCR بهطور عمدی سبک وزن و متمرکز است—که آن را نقطهٔ شروع عالی برای کسانی میسازد که میخواهند نحوهٔ کار OCR را از زیرساختها درک کنند.
شروع کار با Guten OCR
روش پیشنهادی برای نصب Guten OCR استفاده از Brew است. لطفاً برای نصب روان از دستور زیر استفاده کنید
نصب Guten OCR از طریق Brew
brew install git-lfs نصب Guten OCR از طریق GitHub
git clone git@github.com:gutenye/ocr.git همچنین میتوانید بهصورت دستی نصب کنید؛ فایلهای آخرین نسخه را مستقیماً از مخزن GitHub دانلود کنید.
پیشپردازش تصویر قبل از عملیات OCR
کتابخانهٔ متنباز Guten OCR بهصورت کامل با جاوااسکریپت نوشته شده و برای هر دو محیط مرورگر و Node.js سازگار است. این کتابخانه شامل توابع پیشپردازش تصویر داخلی برای بهبود دقت تشخیص است. از باینریسازی تصویر (تبدیل به سیاه‑و‑سفید)، کاهش نویز، اصلاح انحراف و موارد دیگر پشتیبانی میکند. مثال زیر نشان میدهد چگونه توسعهدهندگان میتوانند چندین مرحلهٔ پیشپردازش تصویر را قبل از انجام عملیات OCR بر روی تصاویر اعمال کنند.
چگونه پیشپردازش تصویر را قبل از عملیات OCR با کتابخانهٔ جاوااسکریپت اعمال کنیم؟
const { preprocess } = require('guten-ocr');
// Apply multiple preprocessing steps
const processedImage = preprocess(imageData, [
'grayscale', // Convert to grayscale
'binarize', // Convert to black and white
'deskew', // Correct skew
'denoise' // Reduce noise
]);
// Then perform OCR on the processed image
ocr.recognize(processedImage).then(/* ... */);
تشخیص کاراکتر با استفاده از قالبها
کتابخانهٔ جاوااسکریپت Guten OCR پشتیبانی کامل از انجام عملیات OCR با استفاده از قالبها را در برنامههای جاوااسکریپتی فراهم میکند. در هستهٔ Guten OCR یک سیستم مطابقت قالب وجود دارد. بهجای آموزش یک مدل یادگیری ماشین، از الگوهای پیشتعریفشدهٔ کاراکتر استفاده میکند. این باعث میشود سیستم سریعتر و سادهتر باشد، اما نسبت به سازگاری فونت و چیدمان حساستر است. برای انجام این کار کتابخانه هر کاراکتر (A–Z, a–z, 0–9 و غیره) را در یک بوم (canvas) رندر میکند و سپس ماتریس باینری هر کاراکتر بهعنوان قالب مرجع ذخیره میشود. هنگام تحلیل یک تصویر، کتابخانه بخشهای تصویر را با این قالبها مقایسه میکند تا بهترین تطبیق را پیدا کند. این کار با ترکیبی از اسکن خطوط عمودی و افقی برای یافتن جعبههای محدود انجام میشود.
تقسیمبندی کاراکتر با کتابخانهٔ OCR
کتابخانهٔ متنباز جاوااسکریپت Guten OCR به توسعهدهندگان امکان تقسیمبندی کاراکتر را بهراحتی میدهد. پس از باینریسازی تصویر، گام بعدی تقسیم کاراکترهای جداگانه است. Guten OCR ردیفها و ستونها را اسکن میکند تا نواحی پر از پیکسلهای سیاه را شناسایی کرده و بهعنوان کاراکترهای احتمالی جدا کند. مثال زیر نشان میدهد چگونه توسعهدهندگان میتوانند با استفاده از کتابخانهٔ OCR جاوااسکریپت تقسیمبندی کاراکتر را انجام دهند.
چگونه تقسیمبندی کاراکتر را با کتابخانهٔ جاوااسکریپت انجام دهیم؟
const segment = require('guten-ocr/segment');
const boxes = segment(binarized); // returns array of [x, y, width, height]