←选择平台

FormRecognitionEngine类

总结

该类包含创建、比较和对齐表单的表单识别引擎。

语法
c#
VB
c++
Java
公共FormRecognitionEngine
公共FormRecognitionEngine
公共FormRecognitionEngine
公共ref类FormRecognitionEngine
讲话

该类用于创建主窗体和表单、比较窗体与主窗体,以及计算窗体与指定主窗体的对齐方式。

重要的是:不同的OCR引擎在形式对齐和识别方面可能有细微的差异。因此,建议使用相同的Leadtools.Ocr.OcrEngineType在生成主表单以及识别和处理表单时。

例子

这个例子展示了一个表单识别和处理应用程序的完整框架。

c#
VB
使用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方法///一旦程序终止。TestFormsFormRecognitionEngine 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开始,而不是0AddPageToForm(形式。图像,的形式。属性);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开始而不是0AddPageToMasterForm(形式。形象,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昏暗的作为整数= 0i < form.Image.PageCountform.Image.Page = i + 1'页面索引是基于1的,从1开始,而不是0AddPageToForm(形式。图像,的形式。属性)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昏暗的作为整数= 0i < form.Image.PageCountform.Image.Page = i + 1'页面索引是基于1的,从1开始,而不是0AddPageToMasterForm(形式。形象,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 = 1result.PageResults.Add (resultPage)结果。Reason = FormRecognitionReason。成功返回结果结束函数该方法根据比较结果确定表单的类型。公共函数IdentifyForm (按值传递结果作为FormRecognitionResult ())作为整数昏暗的maxIndex作为整数= 0maxIndex = 0昏暗的作为整数= 1I <结果。长度如果结果(maxIndex)。信心< results(i).Confidence然后maxIndex = i结束如果I += 1循环如果结果(maxIndex)。信心< 30然后maxIndex = -1“不匹配结束如果返回maxIndex结束函数“这种方法可以识别未知形式的类型公共RecognizeForm (按值传递形式作为MyForm)CreateFormForRecognition(形式)昏暗的结果作为FormRecognitionResult () =FormRecognitionResult(形态层组。- 1) {}昏暗的作为整数= 0i < 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列表()()昏暗的作为整数= 0i < form.Result.PageResults。form.Alignment.Add (form.Result.PageResults(我).Alignment)I += 1循环结束如果结束'===========================================================================这种方法处理已识别的形式。公共ProcessForm (按值传递形式作为MyForm)的形式。ProcessingPages = form.Master.ProcessingPagesProcessingEngine.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)的形式。属性=FormRecognitionAttributesform.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作为整数= 0pageIndex < form.ProcessingPages。Console.WriteLine ()控制台。WriteLine (“=====Page #”& form.ProcessingPages (pageIndex)。PageNumber &“= = = = =”Console.WriteLine ()每一个作为FormFieldform.ProcessingPages (pageIndex)如果TypeOfImageFormField然后PrintOutImage (TryCast(字段,ImageFormField))ElseIfTypeOfBarcodeFormField然后PrintOutBarcode (TryCast(字段,BarcodeFormField))ElseIfTypeOfOmrFormField然后PrintOutOmr (TryCast(字段,OmrFormField))ElseIfTypeOfTextFormField然后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 = FormsOcrEngineRecognitionEngine.ObjectsManagers.Add (ocrObejectManager)结束如果如果enableBarcode然后昏暗的barcodeObjectManager作为BarcodeObjectsManager =BarcodeObjectsManager (FormsBarcodeEngine)barcodeObjectManager。Engine = FormsBarcodeEngineRecognitionEngine.ObjectsManagers.Add (barcodeObjectManager)结束如果结束“‘这种方法可以启动所有引擎。公共StartUpEngines ()StartUpOcrEngine ()StartUpBarcodeEngine ()RecognitionEngine =FormRecognitionEngine ()SetObjectManagers (真正的ProcessingEngine =FormProcessingEngine ()ProcessingEngine。光学字符识别Engine = FormsOcrEngineProcessingEngine。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 ()结束结束公共NotInheritableLEAD_VARS公共常量ImagesDir作为字符串“C: \ LEADTOOLS21 \ Resources \图片”公共常量OcrLEADRuntimeDir作为字符串“C: \ LEADTOOLS21 \ Bin \常见\ OcrLEADRuntime”结束
需求

目标平台

Leadtools.Forms.Recognition组装
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。