/// <summary>
/// 批改操作
/// </summary>
public AnswerCard DoCorrect(Stream AnserCardFile)
{
AnswerCard anserCard=new AnswerCard();
try
{
//RasterImage crrentImages;
// Create the Auto Forms Engine
AutoFormsEngine autoEngine;
RasterCodecs formsCodec=new RasterCodecs();
//Create a collection of OCR Engines
IOcrEngine ocrEngine;
//Create the repository of master forms
DiskMasterFormsRepository formsRepository;
//Create an OCR Engine
using (ocrEngine = OcrEngineManager.CreateEngine(OcrEngineType.Advantage, false))
{ ocrEngine.Startup(formsCodec, null,null, null); // Load the first page as RasterImage
RasterImage rasterImage = formsCodec.Load(AnserCardFile);
//ocrEngine.CreatePage(rasterImage, OcrImageSharingMode.AutoDispose);
// Create an OCR page from this image, transform ownership of the RasterImage object
//using (IOcrPage ocrPage = ocrEngine.CreatePage(rasterImage, OcrImageSharingMode.AutoDispose))
//{
// Auto-preprocess it
//ocrPage.AutoPreprocess(OcrAutoPreprocessPageCommand.All, null); // Create an OCR document
using (IOcrDocument ocrDocument = ocrEngine.DocumentManager.CreateDocument())
{
// Add this image to the document
IOcrPage ocrPage = ocrDocument.Pages.AddPage(rasterImage, null);
BarcodeEngine barcodeEngine = new BarcodeEngine();
// Auto-preprocess it
ocrPage.AutoPreprocess(OcrAutoPreprocessPageCommand.All, null);
// Point repository to directory with existing master forms
formsRepository = new DiskMasterFormsRepository(formsCodec, masterFormsFolder);
autoEngine = new AutoFormsEngine(formsRepository, ocrEngine, null, AutoFormsRecognitionManager.Default | AutoFormsRecognitionManager.Ocr, , , true);
// Recognize (Classify) the form
AutoFormsRunResult runResult = autoEngine.Run(ocrPage.GetRasterImage(OcrPageType.Current), null, null, null);
//AutoFormsRunResult runResult = autoEngine.Run(rasterImage, null, null, null);
//AutoFormsRunResult runResult = autoEngine.Run(AnserCardFile, null);
if (runResult != null)
{
//Recognition was successful
anserCard = AnswerHandle(runResult);
}
}
autoEngine.Dispose();
formsCodec.Dispose();
//rasterImage.Dispose();
if (ocrEngine != null && ocrEngine.IsStarted)
ocrEngine.Shutdown();
}
return anserCard;
}
catch (Exception ex)
{
return null;
}
}

校正方案可使用

  private void DoDeskew(IOcrEngine ocrEngine, string Filename, string Savename)
{
// Load the first page as RasterImage
RasterImage image = ocrEngine.RasterCodecsInstance.Load(Filename, );
// 准备命令
DeskewCommand command = new DeskewCommand();
//图像的倾斜校正
command.Flags = DeskewCommandFlags.DeskewImage | DeskewCommandFlags.DoNotFillExposedArea;
command.Run(image);
// 创建一个RasterCodecs类的新实例
RasterCodecs codecs = new RasterCodecs();
codecs.Options.Jpeg2000.Save.UseSopMarker =true;
// 将图像保存
codecs.Save(
image,
Savename,
RasterImageFormat.TifLzw,
,
,
,
,
CodecsSavePageMode.Overwrite);
image.Dispose();
codecs.Dispose();
}

LeadTools答题卡识别方案的更多相关文章

  1. 浅谈PHP答题卡识别(一)

    最近期末考试考完了,我们也要放寒假了.于是突发奇想,想用PHP写一个答题卡识别程序.已经实现了一些,现分享给大家. 具体的步骤如下: 上传答题卡=>图片二值化(已实现)=>寻找定位点(已实 ...

  2. 机器学习进阶-案例实战-答题卡识别判 1.cv2.getPerspectiveTransform(获得投射变化后的H矩阵) 2.cv2.warpPerspective(H获得变化后的图像) 3.cv2.approxPolyDP(近似轮廓) 4.cv2.threshold(二值变化) 7.cv2.countNonezeros(非零像素点个数)6.cv2.bitwise_and(与判断)

    1.H = cv2.getPerspectiveTransform(rect, transform_axes) 获得投射变化后的H矩阵 参数说明:rect表示原始的位置左上,右上,右下,左下, tra ...

  3. 【4opencv】识别复杂的答题卡1(主要算法)

    一.问题提出 由于GPY进行了纠偏,所以在采集的时候,就已经获得了质量较高的答题卡图片 下一步就是需要从这张图片中,识别出人眼识别出来的那些信息,并且将这个过程尽可能地鲁棒化,提高识别的准确率. 二. ...

  4. 识别简单的答题卡(Bubble sheet multiple choice scanner and test grader using OMR, Python and OpenCV——jsxyhelu重新整编)

    该博客转自www.pyimagesearch.com,进行了相关修改补充. Over the past few months I've gotten quite the number of reque ...

  5. opencv 识别答题卡

    参考这个网站,然后自己 找了张图片试了一下 http://blog.csdn.net/cp562090732/article/details/47804003 // test.cpp : 定义控制台应 ...

  6. jquery css3问卷答题卡翻页动画效果

    这个选项调查的特效以选项卡的形式,每答完一道题目自动切换到下一条,颇具特色.使用jQuery和CSS3,适合HTML5浏览器. 效果展示 http://hovertree.com/texiao/jqu ...

  7. 答题卡作文模块的一种方法-VSTO

    在开始做之前,首先百度了Word有没有简单的生成方法,果然有--页面布局->稿纸设置->方格式稿纸 效果如下图所示.很规范,但是不是答题卡所需要的,因为这样会把所有页面都设置为这样的稿纸. ...

  8. Android实现选择题答题(包括单选、多选和答题卡)

    在线答题demo,具体代码是一年多前完成的,比较简单,不再贴出,请参见Github. 主要功能: 单选:点击选项直接进入下一题.多选:选择多个选项,向右滑动进入下一题.答题卡:点击题号重新进入答题界面 ...

  9. WPF -- 一种圆形识别方案

    本文介绍一种圆形的识别方案. 识别流程 判断是否为封闭图形: 根据圆的方程,取输入点集中的1/6.3/6.5/6处的三个点,求得圆的方程,获取圆心及半径: 取点集中的部分点,计算点到圆心的距离与半径的 ...

随机推荐

  1. .net c#通过Exif获取图片信息(参数)

    简介 想要获取图片的信息,例如快门速度.ISO值等等,我们可以通过读取Exif中存储的信息.Exif(Exchangeable Image File)是存储在JPEG格式照片头部的一段信息,相机和手机 ...

  2. CSS3之响应式布局

    在没有C3的时候,响应式布局是通过js来实现的. 开始研究响应式web设计,CSS3 Media Queries是入门. Media Queries,其作用就是允许添加表达式用以确定媒体的环境情况,以 ...

  3. X11 五子棋

    #include <X11/Xlib.h> #include <stdlib.h> #include <X11/keysym.h> #include <cst ...

  4. 扯蛋css

    使网页旋转代码: javascript:window.i=1;setInterval(function(){i++;document.body.style.cssText+="-webkit ...

  5. nl2br()与nl2p()函数,php在字符串中的新行(\n)之前插入换行符

    使用情景 很多场合我们只是简单用textarea获取用户的长篇输入,而没有用编辑器.用户输入的换行以“\n”的方式入库,输出的时候有时候会没有换行,一大片文字直接出来了.这个时候可以根据库里的“\n” ...

  6. Django之模型管理器filter处理问题

    今天上班第一天,恭祝所有朋友新年快乐!! 最近在github上发现一个还不错的基于Django的开源博客项目,不过也许是版本原因,其中代码存在着些许问题,今天主要记录下其中的模型处理方法的部分. 这段 ...

  7. matlab,xls转换为mat文件

    b=xlsread('iris_data.xls');save iris_data.mat b

  8. 微信小程序文档解读(一)--api提供支持有哪些

    本文重点在于小程序API提供的微信功能支持及获取用户信息的解读,具体的用法和调用不在本文讨论范围之内,文章基于20161222版文档解读 API官方文档原文链接 小程序API官方定义: 框架提供丰富的 ...

  9. pageoffice razor pageofficelink方式调用js实现操作文档

    用官方的开发者帮助文档即可,在后台实例化时一定要将pageofficecontrol控件的id属性定义,然后在前台通过定义的id属性来调用相应的方法

  10. 解决gstreamer无法播放的bug

    0 ls 1 ./start.sh 2 ps 3 kill 366 4 cd /usr/app/services/ 5 ./start.sh 6 cd ../ 7 ls 8 cd res/ 9 ls ...