c#
VB
c++
Java
该类包含创建、比较和对齐表单的表单识别引擎。
公共类FormRecognitionEngine
公共类FormRecognitionEngine
公共类FormRecognitionEngine
公共ref类FormRecognitionEngine
该类用于创建主窗体和表单、比较窗体与主窗体,以及计算窗体与指定主窗体的对齐方式。
重要的是:不同的OCR引擎在形式对齐和识别方面可能有细微的差异。因此,建议使用相同的Leadtools.Ocr.OcrEngineType在生成主表单以及识别和处理表单时。
这个例子展示了一个表单识别和处理应用程序的完整框架。
使用Leadtools;
使用Leadtools.Barcode;
使用Leadtools.Codecs;
使用Leadtools.Forms.Common;
使用Leadtools.Ocr;
使用Leadtools.Forms.Processing;
使用Leadtools.Forms.Recognition;
使用Leadtools.Forms.Recognition.Barcode;
使用Leadtools.Forms.Recognition.Ocr;
///该类包含所有主表单信息。
类MasterForm
{
公共RasterImage形象;
公共FormRecognitionAttributes属性;
公共FormRecognitionProperties性质;
公共FormPages ProcessingPages;
///这个构造函数将所有MasterForm成员初始化为0 /null/Empty。
公共MasterForm ()
{
形象=零;
属性=零;
属性= FormRecognitionProperties.Empty;
ProcessingPages =零;
}
}
///这个类包含所有MyForm信息。MyForm是将由应用程序识别和处理的填充表单。
类MyForm
{
公共字符串文件名;
公共RasterImage形象;
公共FormRecognitionAttributes属性;
公共MasterForm主宰;
公共FormRecognitionResult结果;
公共IList < PageAlignment >对齐;
公共FormPages ProcessingPages;
///这个构造函数将所有MyForm成员初始化为0 /null/Empty。
公共MyForm ()
{
文件名=零;
形象=零;
属性=零;
主=零;
结果=零;
对齐=零;
}
}
///TestForms是一个类,它具有识别和处理未知表单所需的所有方法。一旦创建了它的实例,就应该首先调用StartUp来初始化
///OCR和条形码引擎,除了构建主表单集。接下来,调用Run方法来识别和处理特定的表单。最后,调用ShutDown方法
///一旦程序终止。
类TestForms
{
FormRecognitionEngine RecognitionEngine;
FormProcessingEngine ProcessingEngine;
BarcodeEngine FormsBarcodeEngine;
IOcrEngine FormsOcrEngine;
列表< MasterForm >形态层组;
保龄球RecognizeFirstPageOnly;
保龄球LoadFromScanner;
RasterCodecs FormsCodec;
//===========================================================================
///此方法从扫描仪加载图像。
公共RasterImage LoadImageScanner (int数)
{
/ / TODO
返回零;
}
///该方法从扫描仪加载图像进行识别。
公共RasterImage LoadRecognitionImageScanner ()
{
/ / TODO
返回零;
}
///此方法从文件中加载图像。
公共RasterImage LoadImageFile (字符串文件名,int珍宝,intlastPage)
{
//该方法加载图像并验证所有页面是否已加载。
RasterImage image = FormsCodec。加载(fileName, 1, CodecsLoadByteOrder.)Bgr, firstPage, lastPage);
返回形象;
}
//===========================================================================
///此方法从文件中加载图像以进行识别。
公共RasterImage LoadRecognitionImageFile (字符串文件名)
{
RasterImage形象;
如果(RecognizeFirstPageOnly)
image = LoadImageFile(fileName, 1,1);
其他的
image = LoadImageFile(fileName, 1, -1);
返回形象;
}
///该方法加载图像进行识别。
公共RasterImage LoadRecognitionImage (字符串文件名)
{
RasterImage形象;
如果(RecognizeFirstPageOnly)
image = LoadRecognitionImageScanner();
其他的
image = LoadRecognitionImageFile(fileName);
返回形象;
}
//===========================================================================
///此方法创建一个表单属性对象用于识别。
公共FormRecognitionAttributes CreateForm ()
{
FormRecognitionAttributes属性= RecognitionEngine。CreateForm (零);
RecognitionEngine.CloseForm(属性);
返回属性;
}
///此方法将页面添加到表单属性对象以进行识别。
公共无效AddPageToForm(RasterImage图像,FormRecognitionAttributes属性)
{
RecognitionEngine.OpenForm(属性);
RecognitionEngine。AddFormPage(属性、图片零);
RecognitionEngine.CloseForm(属性);
}
///此方法从表单属性对象中删除页面以进行识别。
公共无效DeletePageFromForm (intpagenumber, FormRecognitionAttributes form)
{
RecognitionEngine.OpenForm(形式);
RecognitionEngine。DeleteFormPage(形式,pagenumber);
RecognitionEngine.CloseForm(形式);
}
///此方法创建表单及其页面以供识别。
公共无效CreateFormForRecognition (MyForm形式)
{
的形式。属性= CreateForm();
intsaveCurrentPageIndex = form.Image.Page;
为(intI = 0;i < form.Image.PageCount;我+ +)
{
form.Image.Page = i + 1;//页面索引是一个基于1的索引,从1开始,而不是0
AddPageToForm(形式。图像,的形式。属性);
}
form.Image.Page = saveCurrentPageIndex;
}
//===========================================================================
///此方法创建主表单识别属性对象。
公共FormRecognitionAttributes CreateMasterForm (字符串名称)
{
FormRecognitionAttributes属性= RecognitionEngine。CreateMasterForm(名称、Guid。空的,零);
RecognitionEngine.CloseMasterForm(属性);
返回属性;
}
///此方法将页面添加到主表单识别属性对象。
公共无效AddPageToMasterForm(RasterImage图像,FormRecognitionAttributes属性)
{
RecognitionEngine.OpenMasterForm(属性);
RecognitionEngine。AddMasterFormPage(属性、图片零);
RecognitionEngine.CloseMasterForm(属性);
}
///此方法从主表单识别属性对象中删除页面。
公共无效DeletePageFromMasterForm (intpagenumber, FormRecognitionAttributes form)
{
RecognitionEngine.OpenMasterForm(形式);
RecognitionEngine。DeleteMasterFormPage(形式,pagenumber);
RecognitionEngine.CloseMasterForm(形式);
}
///此方法为识别目的创建主表单及其页面。
公共无效CreateMasterFormForRecognition (字符串名称,MasterForm表格)
{
的形式。属性= CreateMasterForm(name);
intsaveCurrentPageIndex = form.Image.Page;
为(intI = 0;i < form.Image.PageCount;我+ +)
{
form.Image.Page = i + 1;//页面索引是基于1的,从1开始而不是0
AddPageToMasterForm(形式。形象,form.Attributes);
}
form.Image.Page = saveCurrentPageIndex;
}
//===========================================================================
///此方法使用所有页面将表单与主表单进行比较。
FormRecognitionResult CompareForm(FormRecognitionAttributes master, FormRecognitionAttributes form)
{
返回RecognitionEngine。CompareForm (主,形式,零);
}
///此方法将表单的第一页与主表单的第一页进行比较。
(FormRecognitionAttributes master, FormRecognitionAttributes form)
{
PageRecognitionResult resultPage = RecognitionEngine。ComparePage(master, 1, form, 1);
FormRecognitionResult result =新FormRecognitionResult ();
结果。信心= resultpage .信心;
结果。LargestConfidencePageNumber = 1;
result.PageResults.Add (resultPage);
结果。Reason = FormRecognitionReason.Success;
返回结果;
}
///该方法根据比较结果识别表单的类型。
公共intIdentifyForm (FormRecognitionResult[]结果)
{
intmaxIndex = 0;
maxIndex = 0;
为(intI = 1;i < results.Length;我+ +)
{
如果(结果[maxIndex]。信心< results[i].Confidence)
maxIndex = i;
}
如果(结果[maxIndex]。信心< 30)
maxIndex = -1;/ /不匹配
返回maxIndex;
}
///此方法识别未知表单的类型。
公共无效RecognizeForm (MyForm形式)
{
CreateFormForRecognition(形式);
FormRecognitionResult[] results =新FormRecognitionResult [FormSet.Count];
为(intI = 0;i < FormSet.Count;我+ +)
{
如果(RecognizeFirstPageOnly)
results[i] = CompareFirstPage(FormSet[i].)属性,form.Attributes);
其他的
results[i] = CompareForm(FormSet[i].)属性,form.Attributes);
}
intindex = IdentifyForm(结果);
如果(索引>= 0)
{
的形式。Master = FormSet[index];
的形式。结果=结果[索引];
}
其他的
{
的形式。主=零;
的形式。结果=零;
}
}
//===========================================================================
///如果需要,此方法将加载图像以进行处理。
保龄球LoadProcessingImage (MyForm形式)
{
intcount = form.Master.Properties.Pages - form.Image.PageCount;
如果(count == 0)
返回假;
RasterImage形象;
如果(LoadFromScanner)
image = loadimagscaner (count);
其他的
image = LoadImageFile(form。文件名,form.Image。PageCount + 1, form.Image.PageCount + count);
form.Image。AddPages(image, 1, count);
返回真正的;
}
//===========================================================================
///此方法计算已识别表单的对齐方式。
公共无效AlignForm (MyForm形式,保龄球calculateAlignment)
{
如果(calculateAlignment)
{
CreateFormForRecognition(形式);
的形式。对齐= recogntionengine . getformalignment (form.Master. align)属性的形式。属性,零);
}
其他的
{
的形式。对齐=新列表< PageAlignment > ();
为(intI = 0;i < form. result . pagerresults . count;我+ +)
form.Alignment.Add (form.Result.PageResults[我].Alignment);
}
}
//===========================================================================
///该方法处理已识别的表单。
公共无效ProcessForm (MyForm形式)
{
的形式。ProcessingPages = form.Master.ProcessingPages;
ProcessingEngine.Pages.Clear ();
ProcessingEngine.Pages.AddRange (form.ProcessingPages);
ProcessingEngine.Process(形式。形象,form.Alignment);
}
//===========================================================================
///该方法识别未知表单,然后对其进行处理。
公共无效RunFormRecognitionAndProcessing (MyForm形式)
{
的形式。图像=LoadRecognitionImage (的形式。文件名);
RecognizeForm(形式);
如果(形式。主==零)
{
控制台。WriteLine (“未知的形式”);
返回;
}
保龄球calculatealign = LoadProcessingImage(form);
AlignForm(形式,calculateAlignment);
ProcessForm(形式);
PrintOutResults(形式);
}
//===========================================================================
///此方法加载指定的主表单属性对象、字段和图像。
公共MasterForm LoadMasterForm (字符串attributesFileName,字符串fieldsFileName,字符串imageFileName)
{
字节[] formData;
MasterForm form =新MasterForm ();
formData = File.ReadAllBytes(attributesFileName);
的形式。属性=新FormRecognitionAttributes ();
form.Attributes.SetData (formData);
的形式。属性= recogntionengine . getformproperties (form.Attributes);
ProcessingEngine.LoadFields (fieldsFileName);
的形式。ProcessingPages =新FormPages ();
form.ProcessingPages.AddRange (ProcessingEngine.Pages);
的形式。图像=FormsCodec.Load(imageFileName, 1, CodecsLoadByteOrder.Bgr, 1, -1);
返回形式;
}
///此方法将主窗体属性对象保存到指定的文件名。
公共无效SaveMasterFormAttributes (MasterForm形式,字符串attributesFileName)
{
字节[] formData = form.Attributes.GetData();
文件。WriteAllBytes (attributesFileName formData);
}
///此方法将主表单字段保存到指定的文件名。
公共无效SaveMasterFormFields (MasterForm形式,字符串fieldsFileName)
{
ProcessingEngine.Pages.Clear ();
ProcessingEngine.Pages.AddRange (form.ProcessingPages);
ProcessingEngine.SaveFields (fieldsFileName);
}
//===========================================================================
///此方法构建表单集。
公共无效BuildFormsSet ()
{
形态层组=新列表< MasterForm > ();
MasterForm Form107 = LoadMasterForm(
Path.Combine (LEAD_VARS.ImagesDir@”形式\ MasterForm集\ OCR \ ffc - 107. - bin”),
Path.Combine (LEAD_VARS.ImagesDir@”形式\ MasterForm集\ OCR \ ffc - 107. - xml”),
Path.Combine (LEAD_VARS.ImagesDir@”形式\ MasterForm集\ OCR \气管无名动脉瘘管的ffc - 107.”));
FormSet.Add (Form107);
MasterForm Form180 = LoadMasterForm(
Path.Combine (LEAD_VARS.ImagesDir@”形式\ \ OCR \ MasterForm集科幻- 180. - bin”),
Path.Combine (LEAD_VARS.ImagesDir@”形式\ \ OCR \ MasterForm集科幻- 180. - xml”),
Path.Combine (LEAD_VARS.ImagesDir@”形式\ MasterForm集\ OCR \气管无名动脉瘘管的科幻- 180.”));
FormSet.Add (Form180);
MasterForm Form3881 = LoadMasterForm(
Path.Combine (LEAD_VARS.ImagesDir@”形式\ \ OCR \ MasterForm集科幻- 3881. - bin”),
Path.Combine (LEAD_VARS.ImagesDir@”形式\ \ OCR \ MasterForm集科幻- 3881. - xml”),
Path.Combine (LEAD_VARS.ImagesDir@”形式\ MasterForm集\ OCR \气管无名动脉瘘管的科幻- 3881.”));
FormSet.Add (Form3881);
}
//===========================================================================
///该方法打印图像场结果
公共无效PrintOutImage (ImageFormField字段)
{
Console.WriteLine ();
控制台。WriteLine (“***图像字段”);
ImageFormFieldResult result = field。结果作为ImageFormFieldResult;
FormsCodec.Save(结果。图像,Path.Combine (LEAD_VARS.ImagesDir“ImageField.tif”), RasterImageFormat.Tif, 1);
}
///该方法打印条形码字段结果。
公共无效PrintOutBarcode (BarcodeFormField字段)
{
Console.WriteLine ();
控制台。WriteLine (“***条码字段”);
BarcodeFormFieldResult result = field。结果作为BarcodeFormFieldResult;
foreach(BarcodeFieldData条形码在result.BarcodeData)
{
控制台。WriteLine (" *-条码类型:"+ barcode.Symbology);
控制台。WriteLine (-条码数据:+ barcode.GetData ());
}
}
///该方法打印OMR现场结果。
公共无效PrintOutOmr (OmrFormField字段)
{
Console.WriteLine ();
控制台。WriteLine (“*** Omr字段”);
OmrFormFieldResult result = field。结果作为OmrFormFieldResult;
控制台。WriteLine (“检查过了吗?”[1 = yes, 0 = No] = "+ result.Text);
}
///此方法打印文本字段结果。
公共无效PrintOutText (TextFormField字段)
{
Console.WriteLine ();
控制台。WriteLine ("***文本框");
TextFormFieldResult result = field。结果作为TextFormFieldResult;
控制台。WriteLine (“文本:“+ result.Text);
}
///该方法打印处理结果。
公共无效PrintOutResults (MyForm形式)
{
如果(form.Result。信心< 30)
{
控制台。WriteLine (“没有找到匹配”);
返回;
}
控制台。WriteLine ("======================= 类型 ===========================");
控制台。WriteLine (“表单类型是:”+ form.Master.Properties.Name);
控制台。WriteLine (“信心=”+ form.Result.Confidence);
Console.WriteLine ();
控制台。WriteLine ("==================== 字段的结果 =======================");
为(intpageIndex = 0;pageIndex < form.ProcessingPages.Count;pageIndex + +)
{
Console.WriteLine ();
控制台。WriteLine (“=====Page #”+ form.ProcessingPages [pageIndex]。PageNumber +“= = = = =”);
Console.WriteLine ();
foreach(FormField字段在form.ProcessingPages [pageIndex])
{
如果(字段是ImageFormField)
PrintOutImage(字段作为ImageFormField);
其他的如果(字段是BarcodeFormField)
PrintOutBarcode(字段作为BarcodeFormField);
其他的如果(字段是OmrFormField)
PrintOutOmr(字段作为OmrFormField);
其他的如果(字段是TextFormField)
PrintOutText(字段作为TextFormField);
}
}
}
//===========================================================================
///此方法启动OCR引擎。
私人无效StartUpOcrEngine ()
{
试一试
{
FormsOcrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead);
FormsOcrEngine。启动(FormsCodec零,零, LEAD_VARS.OcrLEADRuntimeDir);
}
抓exp(异常)
{
Console.WriteLine (exp.Message);
}
}
///这个方法会关闭OCR引擎。
私人无效ShutDownOcrEngine ()
{
FormsOcrEngine.Shutdown ();
FormsOcrEngine.Dispose ();
}
///此方法启动Barcode引擎。
私人无效StartUpBarcodeEngine ()
{
试一试
{
FormsBarcodeEngine =新BarcodeEngine ();
}
抓exp(异常)
{
Console.WriteLine (exp.Message);
}
}
///此方法设置对象管理器。
公共无效SetObjectManagers (保龄球enableDefault,保龄球enableOcr,保龄球enableBarcode)
{
如果(RecognitionEngine = =零)
返回;
如果(enableDefault)
{
defaultObjectManager defaultObjectManager =新DefaultObjectsManager ();
RecognitionEngine.ObjectsManagers.Add (defaultObjectManager);
}
如果(enableOcr)
{
oc罗比jectmanager oc罗比jectmanager =新OcrObjectsManager (FormsOcrEngine);
ocrObejectManager。引擎= FormsOcrEngine;
RecognitionEngine.ObjectsManagers.Add (ocrObejectManager);
}
如果(enableBarcode)
{
barcodeObjectManager barcodeObjectManager =新BarcodeObjectsManager (FormsBarcodeEngine);
barcodeObjectManager。引擎= FormsBarcodeEngine;
RecognitionEngine.ObjectsManagers.Add (barcodeObjectManager);
}
}
///此方法启动所有引擎。
公共无效StartUpEngines ()
{
StartUpOcrEngine ();
StartUpBarcodeEngine ();
RecognitionEngine =新FormRecognitionEngine ();
SetObjectManagers (假,真正的,假);
ProcessingEngine =新FormProcessingEngine ();
ProcessingEngine。光学字符识别引擎= FormsOcrEngine;
ProcessingEngine。BarcodeEngine=FormsBarcodeEngine;
}
///这种方法会关闭所有引擎。
公共无效ShutDownEngines ()
{
ShutDownOcrEngine ();
}
///此方法启动一个RasterCodec对象,初始化一个表单Codec,启动所有引擎,并构建表单集。
公共无效启动()
{
/ / 1)
FormsCodec =新RasterCodecs ();
/ / 2)
StartUpEngines ();
/ / 3)
RecognizeFirstPageOnly =假;
LoadFromScanner =假;
/ / 4)
BuildFormsSet ();
}
///此方法关闭所有引擎,处理所有图像,并关闭RasterCodec。
公共无效ShutDown ()
{
/ / 1)
ShutDownEngines ();
/ / 2)
foreach(MasterForm主在形态层组)
master.Image.Dispose ();
/ / 3)
FormsCodec.Dispose ();
}
///此方法对存储在具有传递fileName的文件中的未知表单启动识别过程。
公共无效运行(字符串文件名)
{
MyForm form =新MyForm ();
的形式。文件名=文件名;
RunFormRecognitionAndProcessing(形式);
如果(形式。图像!=零)
form.Image.Dispose ();
}
}
类程序
{
///程序的主入口。
静态无效主要(字符串[]参数)
{
如果(args = =零| |参数。长度== 0)
返回;
TestForms test =新TestForms ();
test.StartUp ();
test.Run (args [0]);
test.ShutDown ();
}
}
静态类LEAD_VARS
{
公共常量字符串ImagesDir =@“C: \ LEADTOOLS21 \ Resources \图片”;
公共常量字符串OcrLEADRuntimeDir =@“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”;
}
进口Leadtools
进口Leadtools。条形码
进口Leadtools。编解码器
进口Leadtools.Forms.Common
进口Leadtools。光学字符识别
进口Leadtools.Forms.Processing
进口Leadtools.Forms.Recognition
进口Leadtools.Forms.Recognition.Barcode
进口Leadtools.Forms.Recognition.Ocr
“‘这个类包含所有主表单信息。
朋友类MasterForm
公共图像作为RasterImage
公共属性作为FormRecognitionAttributes
公共属性作为FormRecognitionProperties
公共ProcessingPages作为FormPages
这个构造函数将所有MasterForm成员初始化为0 /null/Empty。
公共子新()
形象=没有什么
属性=没有什么
属性= FormRecognitionProperties。空
ProcessingPages =没有什么
结束子
结束类
“‘这个类包含我的所有表单信息。My Form是将由应用程序识别和处理的已填充的表单。
朋友类MyForm
公共文件名作为字符串
公共图像作为RasterImage
公共属性作为FormRecognitionAttributes
公共主作为MasterForm
公共结果作为FormRecognitionResult
公共对齐作为IList (PageAlignment)
公共ProcessingPages作为FormPages
这个构造函数将所有MyForm成员初始化为0 /null/Empty。
公共子新()
文件名=没有什么
形象=没有什么
属性=没有什么
主=没有什么
结果=没有什么
对齐=没有什么
结束子
结束类
TestForms是一个类,它拥有识别和处理未知表单所需的所有方法。一旦创建了它的实例,StartUp就应该是
'首先调用来初始化Ocr和条形码引擎,除了构建主窗体集,然后应该调用Run方法来识别和
'处理一个特定的形式,最后应在程序终止时调用ShutDown方法。
朋友类TestForms
私人RecognitionEngine作为FormRecognitionEngine
私人ProcessingEngine作为FormProcessingEngine
私人FormsBarcodeEngine作为BarcodeEngine
私人FormsOcrEngine作为IOcrEngine
私人形态层组作为列表(MasterForm)
私人RecognizeFirstPageOnly作为布尔
私人LoadFromScanner作为布尔
私人FormsCodec作为RasterCodecs
'===========================================================================
这个方法从扫描仪加载图像。
公共函数LoadImageScanner (按值传递数作为整数)作为RasterImage
“待办事项
返回没有什么
结束函数
该方法从扫描仪加载图像用于识别目的。
公共函数LoadRecognitionImageScanner ()作为RasterImage
“待办事项
返回没有什么
结束函数
这个方法从文件中加载图像。
公共函数LoadImageFile (按值传递文件名作为字符串,按值传递珍宝作为整数,按值传递lastPage作为整数)作为RasterImage
加载图片,并验证我们加载了所有的页面
昏暗的图像作为RasterImage = FormsCodec。加载(fileName, 1, CodecsLoadByteOrder.)Bgr, firstPage, lastPage)
返回图像
结束函数
'===========================================================================
这个方法从文件中加载图像用于识别。
公共函数LoadRecognitionImageFile (按值传递文件名作为字符串)作为RasterImage
昏暗的图像作为RasterImage
如果RecognizeFirstPageOnly然后
image = LoadImageFile(fileName, 1,1)
其他的
image = LoadImageFile(fileName, 1, -1)
结束如果
返回图像
结束函数
这个方法为识别目的加载图像。
公共函数LoadRecognitionImage (按值传递文件名作为字符串)作为RasterImage
昏暗的图像作为RasterImage
如果RecognizeFirstPageOnly然后
image = LoadRecognitionImageScanner()
其他的
image = LoadRecognitionImageFile(fileName)
结束如果
返回图像
结束函数
'===========================================================================
这个方法创建了一个表单属性用于识别。
公共函数CreateForm ()作为FormRecognitionAttributes
昏暗的属性作为FormRecognitionAttributes = RecognitionEngine。CreateForm (没有什么)
RecognitionEngine.CloseForm(属性)
返回属性
结束函数
“这种方法添加一个页面来表单属性以进行识别。
公共子AddPageToForm (按值传递图像作为RasterImage,按值传递属性作为FormRecognitionAttributes)
RecognitionEngine.OpenForm(属性)
RecognitionEngine。AddFormPage(属性、图片没有什么)
RecognitionEngine.CloseForm(属性)
结束子
此方法从表单属性中删除页面以进行识别。
公共子DeletePageFromForm (按值传递pagenumber作为整数,按值传递形式作为FormRecognitionAttributes)
RecognitionEngine.OpenForm(形式)
RecognitionEngine。pagenumber DeleteFormPage(形式)
RecognitionEngine.CloseForm(形式)
结束子
“这种方法创建了一个带有页面的表单以供识别。
公共子CreateFormForRecognition (按值传递形式作为MyForm)
的形式。属性= CreateForm()
昏暗的saveCurrentPageIndex作为整数= form.Image.Page
昏暗的我作为整数= 0
做而i < form.Image.PageCount
form.Image.Page = i + 1'页面索引是基于1的,从1开始,而不是0
AddPageToForm(形式。图像,的形式。属性)
I += 1
循环
form.Image.Page = saveCurrentPageIndex
结束子
'===========================================================================
'此方法创建主表单识别属性。
公共函数CreateMasterForm (按值传递名字作为字符串)作为FormRecognitionAttributes
昏暗的属性作为FormRecognitionAttributes = RecognitionEngine。CreateMasterForm(名称、Guid。空的,没有什么)
RecognitionEngine.CloseMasterForm(属性)
返回属性
结束函数
'此方法将页面添加到主表单识别属性。
公共子AddPageToMasterForm (按值传递图像作为RasterImage,按值传递属性作为FormRecognitionAttributes)
RecognitionEngine.OpenMasterForm(属性)
RecognitionEngine。AddMasterFormPage(属性、图片没有什么)
RecognitionEngine.CloseMasterForm(属性)
结束子
'此方法从主表单识别属性中删除页面。
公共子DeletePageFromMasterForm (按值传递pagenumber作为整数,按值传递形式作为FormRecognitionAttributes)
RecognitionEngine.OpenMasterForm(形式)
RecognitionEngine。pagenumber DeleteMasterFormPage(形式)
RecognitionEngine.CloseMasterForm(形式)
结束子
“这种方法创建一个主表单,其中包含用于识别的页面。
公共子CreateMasterFormForRecognition (按值传递名字作为字符串,按值传递形式作为MasterForm)
的形式。属性= CreateMasterForm(name)
昏暗的saveCurrentPageIndex作为整数= form.Image.Page
昏暗的我作为整数= 0
做而i < form.Image.PageCount
form.Image.Page = i + 1'页面索引是基于1的,从1开始,而不是0
AddPageToMasterForm(形式。形象,form.Attributes)
I += 1
循环
form.Image.Page = saveCurrentPageIndex
结束子
'===========================================================================
此方法使用所有页面将表单与主表单进行比较。
私人函数CompareForm (按值传递主作为FormRecognitionAttributes,按值传递形式作为FormRecognitionAttributes)作为FormRecognitionResult
返回RecognitionEngine。CompareForm (主,形式,没有什么)
结束函数
'此方法将表单的第一页与主表单的第一页进行比较。
私人函数CompareFirstPage (按值传递主作为FormRecognitionAttributes,按值传递形式作为FormRecognitionAttributes)作为FormRecognitionResult
昏暗的resultPage作为PageRecognitionResult = RecognitionEngine。ComparePage(master, 1, form, 1)
昏暗的结果作为FormRecognitionResult =新FormRecognitionResult ()
结果。信心= resultPage。信心
结果。LargestConfidencePageNumber = 1
result.PageResults.Add (resultPage)
结果。Reason = FormRecognitionReason。成功
返回结果
结束函数
该方法根据比较结果确定表单的类型。
公共函数IdentifyForm (按值传递结果作为FormRecognitionResult ())作为整数
昏暗的maxIndex作为整数= 0
maxIndex = 0
昏暗的我作为整数= 1
做而I <结果。长度
如果结果(maxIndex)。信心< results(i).Confidence然后
maxIndex = i
结束如果
I += 1
循环
如果结果(maxIndex)。信心< 30然后
maxIndex = -1“不匹配
结束如果
返回maxIndex
结束函数
“这种方法可以识别未知形式的类型
公共子RecognizeForm (按值传递形式作为MyForm)
CreateFormForRecognition(形式)
昏暗的结果作为FormRecognitionResult () =新FormRecognitionResult(形态层组。数- 1) {}
昏暗的我作为整数= 0
做而i < FormSet。数
如果RecognizeFirstPageOnly然后
results(i) = CompareFirstPage(FormSet(i)。属性、form.Attributes)
其他的
results(i) = CompareForm(FormSet(i))。属性、form.Attributes)
结束如果
I += 1
循环
昏暗的指数作为整数= IdentifyForm(结果)
如果索引>= 0然后
的形式。Master = FormSet(index)
的形式。结果=结果(索引)
其他的
的形式。主=没有什么
的形式。结果=没有什么
结束如果
结束子
'===========================================================================
如果需要,此方法将加载图像用于处理目的。
私人函数LoadProcessingImage (按值传递形式作为MyForm)作为布尔
昏暗的数作为整数= form.Master.Properties.Pages - form.Image.PageCount
如果数= 0然后
返回假
结束如果
昏暗的图像作为RasterImage
如果LoadFromScanner然后
image = loadimagscaner (数)
其他的
image = LoadImageFile(form。文件名,form.Image。PageCount + 1, form.Image.PageCount +数)
结束如果
form.Image。AddPages(图片1数)
返回真正的
结束函数
'===========================================================================
这个方法计算已识别表单的对齐方式。
公共子AlignForm (按值传递形式作为MyForm,按值传递calculateAlignment作为布尔)
如果calculateAlignment然后
CreateFormForRecognition(形式)
的形式。对齐= recogntionengine . getformalignment (form.Master. align)属性的形式。属性,没有什么)
其他的
的形式。对齐=新PageAlignment列表()()
昏暗的我作为整数= 0
做而i < form.Result.PageResults。数
form.Alignment.Add (form.Result.PageResults(我).Alignment)
I += 1
循环
结束如果
结束子
'===========================================================================
这种方法处理已识别的形式。
公共子ProcessForm (按值传递形式作为MyForm)
的形式。ProcessingPages = form.Master.ProcessingPages
ProcessingEngine.Pages.Clear ()
ProcessingEngine.Pages.AddRange (form.ProcessingPages)
ProcessingEngine.Process(形式。形象,form.Alignment)
结束子
'===========================================================================
“这种方法识别未知的形式,然后对其进行处理。
公共子RunFormRecognitionAndProcessing (按值传递形式作为MyForm)
的形式。图像=LoadRecognitionImage (的形式。文件名)
RecognizeForm(形式)
如果的形式。主是没有什么然后
控制台。WriteLine (“未知的形式”)
返回
结束如果
昏暗的calculateAlignment作为布尔= LoadProcessingImage(形式)
calculateAlignment AlignForm(形式)
ProcessForm(形式)
PrintOutResults(形式)
结束子
'===========================================================================
此方法加载指定的主表单属性、字段和图像。
公共函数LoadMasterForm (按值传递attributesFileName作为字符串,按值传递fieldsFileName作为字符串,按值传递imageFileName作为字符串)作为MasterForm
昏暗的formData作为字节()
昏暗的形式作为MasterForm =新MasterForm ()
formData = File.ReadAllBytes(attributesFileName)
的形式。属性=新FormRecognitionAttributes
form.Attributes.SetData (formData)
的形式。属性= recogntionengine . getformproperties (form.Attributes)
ProcessingEngine.LoadFields (fieldsFileName)
的形式。ProcessingPages =新FormPages ()
form.ProcessingPages.AddRange (ProcessingEngine.Pages)
的形式。图像=FormsCodec.Load(imageFileName, 1, CodecsLoadByteOrder.Bgr, 1, -1)
返回形式
结束函数
" '此方法将主表单属性保存到指定的文件名。
公共子SaveMasterFormAttributes (按值传递形式作为MasterForm,按值传递attributesFileName作为字符串)
昏暗的formData作为字节() = form.Attributes.GetData()
文件。WriteAllBytes (attributesFileName formData)
结束子
" '此方法将主表单字段保存到指定的文件名。
公共子SaveMasterFormFields (按值传递形式作为MasterForm,按值传递fieldsFileName作为字符串)
ProcessingEngine.Pages.Clear ()
ProcessingEngine.Pages.AddRange (form.ProcessingPages)
ProcessingEngine.SaveFields (fieldsFileName)
结束子
'===========================================================================
'此方法构建表单集。
公共子BuildFormsSet ()
形态层组=新MasterForm列表()()
昏暗的Form107作为MasterForm = LoadMasterForm(Path.Combine(LEAD_VARS.ImagesDir,“形式\ MasterForm集\ OCR \ ffc - 107. - bin”),
Path.Combine (LEAD_VARS.ImagesDir“形式\ MasterForm集\ OCR \ ffc - 107. - xml”),
Path.Combine (LEAD_VARS.ImagesDir“形式\ MasterForm集\ OCR \气管无名动脉瘘管的ffc - 107.”))
FormSet.Add (Form107)
昏暗的Form180作为MasterForm = LoadMasterForm(Path.Combine(LEAD_VARS.ImagesDir,“形式\ \ OCR \ MasterForm集科幻- 180. - bin”),
Path.Combine (LEAD_VARS.ImagesDir“形式\ \ OCR \ MasterForm集科幻- 180. - xml”),
Path.Combine (LEAD_VARS.ImagesDir“形式\ MasterForm集\ OCR \气管无名动脉瘘管的科幻- 180.”))
FormSet.Add (Form180)
昏暗的Form3881作为MasterForm = LoadMasterForm(Path.Combine(LEAD_VARS.ImagesDir,“形式\ \ OCR \ MasterForm集科幻- 3881. - bin”),
Path.Combine (LEAD_VARS.ImagesDir“形式\ \ OCR \ MasterForm集科幻- 3881. - xml”),
Path.Combine (LEAD_VARS.ImagesDir“形式\ MasterForm集\ OCR \气管无名动脉瘘管的科幻- 3881.”))
FormSet.Add (Form3881)
结束子
'===========================================================================
这种方法打印图像字段结果
公共子PrintOutImage (按值传递场作为ImageFormField)
Console.WriteLine ()
控制台。WriteLine (“***图像字段”)
昏暗的结果作为ImageFormFieldResult = TryCast(字段。因此,ImageFormFieldResult)
FormsCodec.Save(结果。图像,Path.Combine (LEAD_VARS.ImagesDir“ImageField.tif”), RasterImageFormat.Tif, 1)
结束子
这种方法打印条形码字段结果
公共子PrintOutBarcode (按值传递场作为BarcodeFormField)
Console.WriteLine ()
控制台。WriteLine (“***条码字段”)
昏暗的结果作为BarcodeFormFieldResult = TryCast(字段。因此,BarcodeFormFieldResult)
为每一个条形码作为BarcodeFieldData在结果。条形码Data
控制台。WriteLine (" *-条码类型:"& barcode.Symbology)
控制台。WriteLine (-条码数据:)
Console.WriteLine (barcode.GetData ())
下一个条形码
结束子
“这种方法可以打印出Omr油田的结果
公共子PrintOutOmr (按值传递场作为OmrFormField)
Console.WriteLine ()
控制台。WriteLine (“*** Omr字段”)
昏暗的结果作为OmrFormFieldResult = TryCast(字段。因此,OmrFormFieldResult)
控制台。WriteLine (“检查过了吗?”[1 = yes, 0 = No] = "& result.Text)
结束子
'此方法打印文本字段结果
公共子PrintOutText (按值传递场作为TextFormField)
Console.WriteLine ()
控制台。WriteLine ("***文本框")
昏暗的结果作为TextFormFieldResult = TryCast(字段。因此,TextFormFieldResult)
控制台。WriteLine (“文本:“& result.Text)
结束子
这种方法打印处理结果
公共子PrintOutResults (按值传递形式作为MyForm)
如果form.Result.Confidence < 30然后
控制台。WriteLine (“没有找到匹配”)
返回
结束如果
控制台。WriteLine ("======================= 类型 ===========================")
控制台。WriteLine (“表单类型是:”& form.Master.Properties.Name)
控制台。WriteLine (“信心=”& form.Result.Confidence)
Console.WriteLine ()
控制台。WriteLine ("==================== 字段的结果 =======================")
昏暗的pageIndex作为整数= 0
做而pageIndex < form.ProcessingPages。数
Console.WriteLine ()
控制台。WriteLine (“=====Page #”& form.ProcessingPages (pageIndex)。PageNumber &“= = = = =”)
Console.WriteLine ()
为每一个场作为FormField在form.ProcessingPages (pageIndex)
如果TypeOf场是ImageFormField然后
PrintOutImage (TryCast(字段,ImageFormField))
ElseIfTypeOf场是BarcodeFormField然后
PrintOutBarcode (TryCast(字段,BarcodeFormField))
ElseIfTypeOf场是OmrFormField然后
PrintOutOmr (TryCast(字段,OmrFormField))
ElseIfTypeOf场是TextFormField然后
PrintOutText (TryCast(字段,TextFormField))
结束如果
下一个场
pageIndex += 1
循环
结束子
'===========================================================================
这个方法会启动Ocr引擎
私人子StartUpOcrEngine ()
试一试
FormsOcrEngine = OcrEngineManager.CreateEngine(ocrengintype . lead)
FormsOcrEngine。启动(FormsCodec没有什么,没有什么LEAD_VARS.OcrLEADRuntimeDir)
抓经验值作为异常
Console.WriteLine (exp.Message)
结束试一试
结束子
这个方法会关闭Ocr引擎
私人子ShutDownOcrEngine ()
FormsOcrEngine.Shutdown ()
FormsOcrEngine.Dispose ()
结束子
这个方法会启动条形码引擎
私人子StartUpBarcodeEngine ()
试一试
FormsBarcodeEngine =新BarcodeEngine ()
抓经验值作为异常
Console.WriteLine (exp.Message)
结束试一试
结束子
这个方法设置对象管理器。
公共子SetObjectManagers (按值传递enableDefault作为布尔,按值传递enableOcr作为布尔,按值传递enableBarcode作为布尔)
如果RecognitionEngine是没有什么然后
返回
结束如果
如果enableDefault然后
昏暗的defaultObjectManager作为DefaultObjectsManager =新DefaultObjectsManager ()
RecognitionEngine.ObjectsManagers.Add (defaultObjectManager)
结束如果
如果enableOcr然后
昏暗的ocrObejectManager作为OcrObjectsManager =新OcrObjectsManager (FormsOcrEngine)
ocrObejectManager。Engine = FormsOcrEngine
RecognitionEngine.ObjectsManagers.Add (ocrObejectManager)
结束如果
如果enableBarcode然后
昏暗的barcodeObjectManager作为BarcodeObjectsManager =新BarcodeObjectsManager (FormsBarcodeEngine)
barcodeObjectManager。Engine = FormsBarcodeEngine
RecognitionEngine.ObjectsManagers.Add (barcodeObjectManager)
结束如果
结束子
“‘这种方法可以启动所有引擎。
公共子StartUpEngines ()
StartUpOcrEngine ()
StartUpBarcodeEngine ()
RecognitionEngine =新FormRecognitionEngine ()
SetObjectManagers (假,真正的,假)
ProcessingEngine =新FormProcessingEngine ()
ProcessingEngine。光学字符识别Engine = FormsOcrEngine
ProcessingEngine。BarcodeEngine=FormsBarcodeEngine
结束子
“‘这种方法会关闭所有引擎。
公共子ShutDownEngines ()
ShutDownOcrEngine ()
结束子
'此方法启动RasterCodec,初始化Form Codec,启动所有引擎,并构建表单集
公共子启动()
1)
FormsCodec =新RasterCodecs ()
2)
StartUpEngines ()
3)
RecognizeFirstPageOnly =假
LoadFromScanner =假
4)
BuildFormsSet ()
结束子
这种方法会关闭引擎,处理所有图像,并关闭RasterCodec。
公共子ShutDown ()
1)
ShutDownEngines ()
2)
为每一个主作为MasterForm在形态层组
master.Image.Dispose ()
下一个主
3)
FormsCodec.Dispose ()
结束子
“’这一切都是从识别和处理存储在字段中的未知形式开始的,该字段具有传递的fileName。
公共子运行(按值传递文件名作为字符串)
昏暗的形式作为MyForm =新MyForm ()
的形式。文件名=文件名
RunFormRecognitionAndProcessing(形式)
如果不的形式。图像是没有什么然后
form.Image.Dispose ()
结束如果
结束子
结束类
朋友类程序
“‘程序的主要入口。
共享子主要(按值传递arg游戏作为字符串())
如果arg游戏是没有什么OrElsearg游戏。长度= 0然后
返回
结束如果
昏暗的测验作为TestForms =新TestForms ()
test.StartUp ()
test.Run (args (0))
test.ShutDown ()
结束子
结束类
公共NotInheritable类LEAD_VARS
公共常量ImagesDir作为字符串=“C: \ LEADTOOLS21 \ Resources \图片”
公共常量OcrLEADRuntimeDir作为字符串=“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”
结束类
帮助收藏
光栅net|C API|c++类库|HTML5 JavaScript
文档net|C API|c++类库|HTML5 JavaScript
医疗net|C API|c++类库|HTML5 JavaScript
医疗网络查看器net
188宝金博怎么下载
支持的平台上
.NET、Java、Android和iOS/macOS程序集
C API/ c++类库
HTML5 JavaScript库
您的邮件已发送给技术支持!应该有人联系!如果你的事情很紧急,请回来聊天。
聊天时间:
周一至周五,美国东部时间上午8:30至下午6:00
感谢您的反馈!
请再次填写表格,开始新的聊天。
所有代理目前都离线。
聊天时间:
星期一至星期五
美国东部时间上午8:30 -下午6点
如需与我们联系,请填写此表格,我们将通过电子邮件与您联系。