تشخیص علامت نوری (OMR) یک فرآیند الکترونیکی است که امکان خواندن و ضبط داده های علامت گذاری شده توسط افراد در یک نوع خاص از فرم سند را فراهم می کند. این فرم سند می تواند یک آزمایش یا نظرسنجی باشد که شامل ورودی های حباب یا مربعی است که توسط کاربران پر شده است. ما می توانیم به راحتی عملیات OMR را بر روی تصاویر اسکن شده این گونه فرم های نظرسنجی، پرسشنامه ها یا برگه های آزمایشی انجام دهیم و ورودی های کاربر را به صورت برنامه ریزی شده بخوانیم. در این مقاله نحوه انجام OMR و استخراج داده ها از یک تصویر در جاوا را یاد می گیریم.
موضوعات زیر در این مقاله پوشش داده خواهد شد:
- Java OMR API برای استخراج داده ها از تصویر
- استخراج داده ها از یک تصویر
- [انجام OMR و استخراج دادهها از چندین تصویر3
- Extract Data OMR with Threshold
- استخراج داده های OMR با محاسبه مجدد
Java OMR API برای استخراج داده از تصویر
برای انجام عملیات OMR و استخراج داده ها از فرمت های تصویر پشتیبانی شده، از Aspose.OMR for Java API استفاده خواهیم کرد. این امکان طراحی، ایجاد و شناسایی برگههای پاسخ، آزمونها، مقالات MCQ، آزمونها، فرمهای بازخورد، نظرسنجیها و برگههای رأی را فراهم میکند.
کلاس OmrEngine از API، ایجاد قالب و پردازش تصویر را انجام می دهد. متد getTemplateProcessor(String templatePath) این کلاس نمونه TemplateProcessor را برای پردازش الگوها و تصاویر ایجاد می کند. ما می توانیم یک تصویر را با استفاده از روش recognizeImage(String imagePath) تشخیص دهیم. تمام عناصر OMR را به عنوان یک نمونه کلاس RecognitionResult برمی گرداند. متد getCsv() این کلاس یک رشته CSV با نتایج تشخیص تولید میکند. روش Recalculate(RecognitionResult result, int recognitionThreshold) نتیجه شناسایی را با استفاده از پارامترهای دقیق تنظیم شده به روز می کند.
لطفاً یا JAR API را دانلود کنید یا پیکربندی pom.xml زیر را در یک برنامه جاوا مبتنی بر Maven اضافه کنید.
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>http://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-omr</artifactId>
<version>19.12</version>
</dependency>
استخراج داده ها از یک تصویر در جاوا
برای انجام عملیات OMR به الگوی آماده شده OMR (.omr) به همراه تصویر فرم ها/برگ های پر شده توسط کاربر نیاز داریم. با دنبال کردن مراحل زیر میتوانیم یک عملیات OMR را روی یک تصویر انجام دهیم و دادهها را استخراج کنیم:
- ابتدا یک نمونه از کلاس OmrEngine ایجاد کنید.
- در مرحله بعد، متد getTemplateProcessor() را فراخوانی کرده و شی کلاس TemplateProcessor را مقداردهی اولیه کنید. مسیر فایل قالب OMR را به عنوان آرگومان می گیرد.
- سپس، با فراخوانی متد ()recognitionImage با مسیر تصویر به عنوان آرگومان، شی RecognitionResult را دریافت کنید.
- پس از آن، با استفاده از متد getCsv() نتایج شناسایی را به عنوان رشته های CSV دریافت کنید.
- در نهایت، نتیجه CSV را به عنوان یک فایل CSV در دیسک محلی ذخیره کنید.
نمونه کد زیر نحوه استخراج داده های OMR را از یک تصویر با فرمت CSV با استفاده از جاوا نشان می دهد.
// این مثال کد نحوه انجام OMR را روی یک تصویر و استخراج داده ها نشان می دهد
// مسیر فایل قالب OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// مسیر فایل تصویری
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// موتور OMR را راه اندازی کنید
OmrEngine engine = new OmrEngine();
// پردازشگر قالب را دریافت کنید
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// تشخیص تصویر
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// نتایج را در CSV دریافت کنید
String csvResult = result.getCsv();
// فایل CSV را ذخیره کنید
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
لطفا قالب OMR را دانلود کنید که در این پست وبلاگ استفاده شده است.
OMR را انجام دهید و داده ها را از چندین تصویر استخراج کنید
ما میتوانیم عملیات OMR را روی چندین تصویر انجام دهیم و با دنبال کردن مراحلی که قبلا ذکر شد، دادهها را در یک فایل CSV جداگانه برای هر تصویر استخراج کنیم. با این حال، ما باید مراحل # 3، 4، و 5 را برای همه تصاویر یک به یک تکرار کنیم.
نمونه کد زیر نحوه استخراج داده های OMR را از چندین تصویر با استفاده از جاوا نشان می دهد.
// این مثال کد نشان می دهد که چگونه می توان OMR را روی چندین تصویر انجام داد و داده ها را استخراج کرد
// مسیر پوشه کاری
String folderPath = "C:\\Files\\OMR\\";
// مسیر فایل قالب OMR
String templatePath = folderPath + "Sheet.omr";
// مسیر فایل تصویری
String[] UserImages = new String[] { "Sheet1.png", "Sheet2.png" };
// موتور OMR را راه اندازی کنید
OmrEngine engine = new OmrEngine();
// پردازشگر قالب را دریافت کنید
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// تصاویر را یک به یک در یک حلقه پردازش کنید
for (int i = 0; i < UserImages.length; i++)
{
String image = UserImages[i];
String imagePath = folderPath + image;
// تشخیص تصویر
RecognitionResult result = templateProcessor.recognizeImage(imagePath);
// نتایج را در CSV دریافت کنید
String csvResult = result.getCsv();
// فایل CSV را ذخیره کنید
PrintWriter wr = new PrintWriter(new FileOutputStream(folderPath + "Sheet_" + i + ".csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
}
استخراج داده های OMR با Threshold در جاوا
بسته به نیاز می توانیم عملیات OMR را با مقدار آستانه (0 تا 100) انجام دهیم. هر چه مقدار آستانه بالاتر باشد API را در برجسته کردن پاسخ ها سخت تر می کند. لطفاً برای انجام OMR با آستانه، مراحلی که قبلا ذکر شد را دنبال کنید. با این حال، ما فقط نیاز داریم که متد overloadedknownImage(string, int32) را در مرحله 3 فراخوانی کنیم. این روش مسیر فایل تصویر و مقدار آستانه را به عنوان آرگومان می گیرد.
نمونه کد زیر نحوه اجرای OMR با مقدار آستانه را با استفاده از جاوا نشان می دهد.
// این مثال کد نحوه انجام OMR با therashold و استخراج داده ها از یک تصویر را نشان می دهد
// مسیر فایل قالب OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// مسیر فایل تصویری
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// مقدار آستانه
int CustomThreshold = 40;
// موتور OMR را راه اندازی کنید
OmrEngine engine = new OmrEngine();
// پردازشگر قالب را دریافت کنید
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// تشخیص تصویر
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// نتایج را در CSV دریافت کنید
String csvResult = result.getCsv();
// فایل CSV را ذخیره کنید
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_threshold.csv"), true);
wr.println(csvResult);
System.out.println(csvResult);
استخراج داده های OMR با محاسبه مجدد در جاوا
در موارد خاص، ممکن است نیاز به محاسبه مجدد نتایج OMR با مقادیر آستانه متفاوت داشته باشیم. برای این منظور، میتوانیم API را طوری پیکربندی کنیم که با استفاده از متد TemplateProcessor.recalculate() بهطور خودکار دوباره محاسبه شود. این اجازه می دهد تا یک تصویر را چندین بار با تغییر تنظیمات آستانه پردازش کنید تا به نتیجه دلخواه برسید. با دنبال کردن مراحل زیر می توانیم عملیات OMR را با محاسبه مجدد انجام دهیم:
- ابتدا یک نمونه از کلاس OmrEngine ایجاد کنید.
- در مرحله بعد، متد getTemplateProcessor() را فراخوانی کرده و شی کلاس TemplateProcessor را مقداردهی اولیه کنید. مسیر فایل قالب OMR را به عنوان آرگومان می گیرد.
- سپس، با فراخوانی متد ()recognitionImage با مسیر تصویر به عنوان آرگومان، شی RecognitionResult را دریافت کنید.
- در مرحله بعد، تشخیص صادرات به عنوان یک رشته CSV با استفاده از متد getCsv() نتیجه میگیرد.
- سپس، نتیجه CSV را به عنوان یک فایل CSV در دیسک محلی ذخیره کنید.
- سپس متد recalculate() را فراخوانی کنید. شی RecognitionResult و مقدار آستانه را به عنوان آرگومان می گیرد.
- پس از آن، تشخیص صادرات به عنوان یک رشته CSV با استفاده از متد getCsv() نتیجه میگیرد.
- در نهایت، نتیجه CSV را به عنوان یک فایل CSV در دیسک محلی ذخیره کنید.
نمونه کد زیر نحوه انجام OMR با روش محاسبه مجدد با استفاده از جاوا را نشان می دهد.
// مسیر فایل قالب OMR
String templatePath = "C:\\Files\\OMR\\Sheet.omr";
// مسیر فایل تصویری
String imagePath = "C:\\Files\\OMR\\Sheet1.png";
// مقدار آستانه
int CustomThreshold = 40;
// موتور OMR را راه اندازی کنید
OmrEngine engine = new OmrEngine();
// پردازشگر قالب را دریافت کنید
TemplateProcessor templateProcessor = engine.getTemplateProcessor(templatePath);
// تشخیص تصویر
RecognitionResult result = templateProcessor.recognizeImage(imagePath, CustomThreshold);
// نتایج را در CSV دریافت کنید
String csvResult = result.getCsv();
// فایل CSV را ذخیره کنید
PrintWriter wr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1.csv"), true);
wr.println(csvResult);
// دوباره محاسبه کنید
// می توانید مقدار آستانه جدیدی را در اینجا اعمال کنید
templateProcessor.recalculate(result, CustomThreshold);
// نتایج محاسبه شده مجدد را در CSV دریافت کنید
csvResult = result.getCsv();
// فایل CSV حاصل دوباره محاسبه شده را ذخیره کنید
PrintWriter finalWr = new PrintWriter(new FileOutputStream("C:\\Files\\OMR\\Sheet1_recalculated.csv"), true);
finalWr.println(csvResult);
مجوز رایگان دریافت کنید
شما می توانید یک مجوز موقت رایگان دریافت کنید تا کتابخانه را بدون محدودیت ارزیابی امتحان کنید.
نتیجه
در این مقاله یاد گرفتیم که چگونه:
- انجام عملیات OMR روی تصاویر.
- استخراج داده ها در قالب CSV به صورت برنامه نویسی.
- هنگام انجام OMR روی تصاویر، تنظیمات آستانه را اعمال کنید.
- محاسبه مجدد نتایج OMR در یک فرآیند خودرویی با استفاده از جاوا.
علاوه بر این، با استخراج دادهها از یک تصویر در جاوا، میتوانید با استفاده از مستندات درباره Aspose.OMR for Java API اطلاعات بیشتری کسب کنید. در صورت وجود هرگونه ابهامی، لطفاً با ما در [تالار گفتمان پشتیبانی رایگان18 تماس بگیرید.