flexicapture处理器只识别文档的第一页

时间:2014-06-04 10:07:55

标签: java abbyy

我使用flexicapture处理器来识别我的文档。我的情况是我的文档有多个页面,即文档有多个图像,每个图像都需要识别。

我按照以下程序来完成我的一般任务,即文档中的一个图像或文档中的多个图像;

  1. 创建处理器
  2. 添加文档定义文件或afl文件
  3. 将识别作为IDocument document = processor.RecognizeNextDocument(); 但是当它返回一个文档,文档时,它只有一个页面,这是文档的第一页,为什么会这样呢?
  4. 在另一种情况下,如果我使用项目代替处理器,IProject,使用以下程序

    1. 创建项目
    2. 从项目project.getBatches(),
    3. 获取批次
    4. 将文档(包含多个页面)添加到批处理
    5. 认出他们 我所有页面的文件信息,IDocuments documents = batch.getDocuments(),
    6. 我如何才能实现与处理器相同的任务?我希望处理器识别文档中的所有页面并返回包含其中所有页面的文档。 ?

      如果有什么不清楚,请询问更多信息。 请尽快回复...... 代码:1使用flexicapture处理器 / **  *  * /

      / **  * @author Nitin  *  * /

      import java.sql.BatchUpdateException;
      
      import com.abbyy.FCEngine.*;
      
      public class FlexicaputreVerificationUsingProcessor {
      private static Object verificationWorkSet(Object object) {
          // TODO Auto-generated method stub
          return null;
      }
      private static void trace( String txt ) 
      {
          System.out.println( txt );
      }
      
      static private String samplesFolder;
      static private String projectFolder;
      static private String serialNumber;
      static private String dllPath;
      
      static {
      
          samplesFolder = "C:\\ProgramData\\ABBYY\\SDK\\10\\FlexiCapture Engine\\Samples\\";
          projectFolder = "C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest" ; 
      
          try {
      
              java.io.FileInputStream file = new java.io.FileInputStream( samplesFolder + "SampleConfig\\SamplesConfig.txt" );
      
              java.io.BufferedReader reader = new java.io.BufferedReader( new java.io.InputStreamReader( file ) );
      
              serialNumber = reader.readLine();
      
              dllPath = reader.readLine();
      
              file.close();
      
          } catch( java.io.IOException e ) {
               System.out.println( e.getMessage() );
               e.printStackTrace();
          }
      }
      
      
      /**
       * @param args
       */
      public static void main(String[] args) {
      
          // Load Engine 
          try {
                  trace("Loading engine");
                  IEngineLoader engineLoader= Engine.CreateEngineOutprocLoader();
                  IEngine engine = engineLoader.Load(serialNumber,dllPath);
      
                  try {
      
                      // Create and configure FlexiCaptureProcessor
                      trace("Creating and configureing FlexiCaptureProcessor");
                      IFlexiCaptureProcessor processor = engine.CreateFlexiCaptureProcessor();
                      processor.AddDocumentDefinitionFile( projectFolder + "\\Document_Definition_1.fcdot" );
      
                      trace("Adding images/pdf to processor");
                      final int fileCount = 1 ; 
      
                      processor.AddImageFile(projectFolder + "\\don't upload to big .pdf");
      
                      engine.EnableRecognitionVariants( true );
      
                      trace("Creating Document collection");
                      IDocumentsCollection documentsCollection = engine.CreateDocumentsCollection();
      
                      trace( "Reconizing Images/pdfs..." );
                      int totalErrors = 0 ; 
                      for ( int iterator = 0 ; iterator<fileCount; iterator++ ){
                          trace("Recongnizing image/pdf number: " +(iterator+1));
                          IDocument document = processor.RecognizeNextDocument(); 
      
                          trace("Getting last processing error for checksum");
                          IProcessingError lastProcessingError = processor.GetLastProcessingError() ;
      
                          if ( lastProcessingError !=null)
                          {
                              String errormsg = lastProcessingError.MessageText(); 
                              totalErrors++;
      
                              trace("Error occured while recognizeing document, Document number: "+(iterator+1)+ " with Error msg: "+errormsg);
                              //since we are not handling error (right now) so moving to next document for recognization  
                              processor.ResumeProcessing(false);
      
                          }else {
                              trace("No error occured while recognization of document number : "+(iterator+1));
                          }
                          trace("Adding documents in Documents collection");
                          documentsCollection.Add(document);
      
                      }
      
                      if ( totalErrors == fileCount){
                          trace("Facing Error for all document while recongnization");
                          return ; 
                      }
      
                      trace("Creaing Verification session");
      
                      try {
      
                          IVerificationSession verificationSession = engine.CreateVerificationSession(documentsCollection) ; 
      
                          try {
      
                              //enabling context verification
                              verificationSession.getOptions().setVerifyFields(true); 
      
                              //disabling group verification 
                              verificationSession.getOptions().setVerifyBaseSymbols(false);
                              verificationSession.getOptions().setVerifyExtraSymbols(false);
      
                              try {
                                  trace("Get NextWork Set");
                                  IVerificationWorkSet verificationWorkSet =  verificationSession.NextWorkSet();
      
                                  if ( verificationWorkSet == null){
                                      trace("first verificationWork set is null");
                                  }else {
      
                                      //process each work set in Verification session
                                      trace("Processing Work Set");
                                      while ( verificationWorkSet != null ){
      
                                          try{
                                              trace("Geting Verification group");
                                              //get next group for verification 
                                              IVerificationGroup verificationGroup = verificationWorkSet.NextGroup(); 
      
                                              if ( verificationGroup == null ){
                                                  trace("First verification group is null");
                                              }else {
                                                  trace("processing each group of a workset");
                                                  //processing each group of a work set
                                                  while ( verificationGroup!= null){
                                                      int verificationObjectInAGroupCount =  verificationGroup.getCount(); 
                                                      trace("Total number of verification object: " +verificationObjectInAGroupCount);
      
                                                      for ( int iterator = 0; iterator<verificationObjectInAGroupCount; iterator++){
                                                          trace ( "getting and Processing "+(iterator +1 ) + " verification object of A group");
      
                                                          //getting verification object 
                                                          IVerificationObject verificationObject = verificationGroup.getElement(iterator);
                                                          if ( verificationObject == null){
                                                              trace("verification object is null");
                                                          }else {
                                                              if ( verificationObject.getType() == VerificationObjectTypeEnum.VOT_Group ) {
                                                                  IGroupVerificationObject groupVerificationObject = verificationObject.AsGroupVerificationObject(); 
      
                                                                  if ( groupVerificationObject == null){
                                                                      System.out.println("group verification object is null ");
                                                                  }
      
      
                                                              }else if ( verificationObject.getType() == VerificationObjectTypeEnum.VOT_Context) {
                                                                  IContextVerificationObject  contextVerificationObject = verificationObject.AsContextVerificationObject(); 
      
      
      
      
                                                                  if ( contextVerificationObject == null){
                                                                      trace("ContextVerification object is null");
                                                                  }else {
                                                                      IField field = contextVerificationObject.getField(); 
                                                                      if ( field == null){
                                                                          trace("field getting null");
                                                                      }else {
                                                                          System.out.println(" field full name: " +field.getFullName() + "\n Name: " +field.getName());
      
                                                                          IFieldValue fieldValue = field.getValue();
                                                                          if ( fieldValue == null){
                                                                              trace("Field Value is Null");
                                                                              }else {
      
                                                                          trace ( "getting text from field value");
                                                                              IText text = fieldValue.getAsText() ; 
                                                                              if ( text == null){
                                                                                  trace("text getting null in field value");
                                                                              }else {
      
      
                                                                                  int wordCount = text.getRecognizedWordsCount() ; 
                                                                                  trace("recognized word count: "+wordCount);
      
                                                                                  //getting words from text 
                                                                                  for ( int wordIndex = 0 ; wordIndex<wordCount; wordIndex++ ){
                                                                                      trace ("processing word number :" +wordIndex);
      
                                                                                      IRecognizedWordInfo recognizedWordInfo = engine.CreateRecognizedWordInfo()  ; 
      
                                                                                      if ( recognizedWordInfo == null){
                                                                                          trace("Can't create recognizedWordInfo object using engine");
                                                                                      }else {
                                                                                          text.GetRecognizedWord(wordIndex, -1, recognizedWordInfo);
      
                                                                                          //getting characters from word
                                                                                          for (int characterIndex = 0 ; characterIndex<recognizedWordInfo.getText().length(); characterIndex++ ){
                                                                                              trace("processing character number : " +characterIndex);
      
                                                                                              IRecognizedCharacterInfo recognizedCharacterInfo = engine.CreateRecognizedCharacterInfo(); 
                                                                                              if ( recognizedCharacterInfo == null) {
                                                                                                  trace("can't create recognizedCharacterInfo object");
                                                                                              }else {
                                                                                                  recognizedWordInfo.GetRecognizedCharacter(characterIndex, -1, recognizedCharacterInfo);
      
                                                                                                  System.out.println(" Character: " + recognizedCharacterInfo.getCharacter());
                                                                                                  System.out.println(" Confidence level : " +recognizedCharacterInfo.getCharConfidence());
                                                                                              }
                                                                                          }
                                                                                      }
                                                                                  }
                                                                              }
                                                                              System.out.println(" Field Value : " +fieldValue.getAsString());
                                                                          }
                                                                      }
                                                                  }
                                                              }
                                                          }
                                                      }
      
                                                      trace("Geting next Verification group");
                                                      verificationGroup = verificationWorkSet.NextGroup();
                                                  }
      
                                              }
      
                                          }catch (Exception e){
                                              trace("Exception occured in getting next work group");
                                              e.printStackTrace();
                                          }
      
                                          trace("Get next worksets");
                                          //get next work set
                                          verificationWorkSet =  verificationSession.NextWorkSet();
      
                                      }
                                  }
      
                              }catch (Exception e){
      
                                  e.printStackTrace();
                              }
      
      
                          }finally {
                              trace("closing Verification object");
                              verificationSession.Close();
                          }
      
                      } catch (Exception e) {
                          trace("Exception occured in creating verification sessions");
                      }
      
      
      
                  }catch (Exception e){
                      trace ("Exception occured in");
                  }
      
          }catch (Exception e) {
                  // TODO: handle exception
      
                  e.printStackTrace();
          }
          finally {
                  trace("unloading Engine");
                  Engine.Unload();
              }
      
      
      
      }
      

      }

      代码:2使用项目

      import java.io.File;
      import java.io.IOException;
      import java.sql.BatchUpdateException;
      
      import com.abbyy.FCEngine.*;
      
      public class VerificationStep {
      //same as above
      
          public static void main( String[] args ) 
          {
              // Load Engine 
              try {
                      trace("Loading engine");
                      IEngineLoader engineLoader= Engine.CreateEngineOutprocLoader();
                      IEngine engine = engineLoader.Load(serialNumber,dllPath);
      
                      try{
                          IProject project = engine.OpenProject( projectFolder + "\\flexitest.fcproj" );
      
                          try {
                              IBatch batch = null ; 
                              trace( "Creating Batch..." );
                              IBatches batchs = project.getBatches(); 
                              if (batchs == null || batchs.getCount() == 0){
                                  batch = project.getBatches().AddNew("TestBatch");
                              }
                              batch = batchs.getElement(0);
                              assert(batch == null);
      
                              try{
                                  trace("opening batch");
                                  batch.Open();
      
                                  trace( "Adding pdfs..." );
                           batch.AddImage(projectFolder + "\\don't upload to big .pdf");
      
                                  trace( "Reconizing pdfs..." );
                                  batch.Recognize(null, RecognitionModeEnum.RM_ReRecognizeAll,null);
      
                                  trace("Creating Verification object");
                                  try {   
                                      IVerificationSession verificationSession = project.StartVerification(null); 
      
                                      try {
      
                                          //enabling context verification
                                          verificationSession.getOptions().setVerifyFields(true); 
      
                                          //disabling group verification 
                                          verificationSession.getOptions().setVerifyBaseSymbols(false);
                                          verificationSession.getOptions().setVerifyExtraSymbols(false);
      
                                          try {
                                              trace("Get NextWork Set");
                                              IVerificationWorkSet verificationWorkSet =  verificationSession.NextWorkSet();
      
                                              if ( verificationWorkSet == null){
                                                  trace("first verificationWork set is null");
                                              }else {
      
                                                  //process each work set in Verification session
                                                  trace("Processing Work Set");
                                                  while ( verificationWorkSet != null ){
      
                                                      try{
                                                          trace("Geting Verification group");
                                                          //get next group for verification 
                                                          IVerificationGroup verificationGroup = verificationWorkSet.NextGroup(); 
      
                                                          if ( verificationGroup == null ){
                                                              trace("First verification group is null");
                                                          }else {
                                                              trace("processing each group of a workset");
                                                              //processing each group of a work set
                                                              while ( verificationGroup!= null){
                                                                  int verificationObjectInAGroupCount =  verificationGroup.getCount(); 
                                                                  trace("Total number of verification object: " +verificationObjectInAGroupCount);
      
                                                                  for ( int iterator = 0; iterator<verificationObjectInAGroupCount; iterator++){
                                                                      trace ( "getting and Processing "+(iterator +1 ) + " verification object of A group");
      
                                                                      //getting verification object 
                                                                      IVerificationObject verificationObject = verificationGroup.getElement(iterator);
                                                                      if ( verificationObject == null){
                                                                          trace("verification object is null");
                                                                      }else {
                                                                          if ( verificationObject.getType() == VerificationObjectTypeEnum.VOT_Group ) {
                                                                              IGroupVerificationObject groupVerificationObject = verificationObject.AsGroupVerificationObject(); 
      
                                                                              if ( groupVerificationObject == null){
                                                                                  System.out.println("group verification object is null ");
                                                                              }
      
      
                                                                          }else if ( verificationObject.getType() == VerificationObjectTypeEnum.VOT_Context) {
                                                                              IContextVerificationObject  contextVerificationObject = verificationObject.AsContextVerificationObject(); 
      
      
      
                                                                              if ( contextVerificationObject == null){
                                                                                  trace("ContextVerification object is null");
                                                                              }else {
                                                                                  IField field = contextVerificationObject.getField(); 
                                                                                  if ( field == null){
                                                                                      trace("field getting null");
                                                                                  }else {
                                                                                      System.out.println(" field full name: " +field.getFullName() + "\n Name: " +field.getName());
      
                                                                                      IFieldValue fieldValue = field.getValue();
                                                                                      if ( fieldValue == null){
                                                                                          trace("Field Value is Null");
                                                                                          }else {
                                                                                              trace ( "getting text from field value");
                                                                                          IText text = fieldValue.getAsText() ; 
                                                                                          if ( text == null){
                                                                                              trace("text getting null in field value");
                                                                                          }else {
      
                                                                                              int wordCount = text.getRecognizedWordsCount() ; 
                                                                                              trace("recognized word count: "+wordCount);
      
                                                                                              //getting words from text 
                                                                                              for ( int wordIndex = 0 ; wordIndex<wordCount; wordIndex++ ){
                                                                                                  trace ("processing word number :" +wordIndex);
      
                                                                                                  IRecognizedWordInfo recognizedWordInfo = engine.CreateRecognizedWordInfo()  ; 
      
                                                                                                  if ( recognizedWordInfo == null){
                                                                                                      trace("Can't create recognizedWordInfo object using engine");
                                                                                                  }else {
                                                                                                      text.GetRecognizedWord(wordIndex, -1, recognizedWordInfo);
      
                                                                                                      //getting characters from word
                                                                                                      for (int characterIndex = 0 ; characterIndex<recognizedWordInfo.getText().length(); characterIndex++ ){
                                                                                                          trace("processing character number : " +characterIndex);
      
                                                                                                          IRecognizedCharacterInfo recognizedCharacterInfo = engine.CreateRecognizedCharacterInfo(); 
                                                                                                          if ( recognizedCharacterInfo == null) {
                                                                                                              trace("can't create recognizedCharacterInfo object");
                                                                                                          }else {
                                                                                                              recognizedWordInfo.GetRecognizedCharacter(characterIndex, -1, recognizedCharacterInfo);
      
                                                                                                              System.out.println(" Character: " + recognizedCharacterInfo.getCharacter());
                                                                                                              System.out.println(" Confidence level : " +recognizedCharacterInfo.getCharConfidence());
                                                                                                          }
                                                                                                      }
                                                                                                  }
                                                                                              }
                                                                                          }
                                                                                          System.out.println(" Field Value : " +fieldValue.getAsString());
                                                                                      }
                                                                                  }
                                                                              }
                                                                          }
                                                                      }
                                                                  }
      
                                                                  verificationGroup = verificationWorkSet.NextGroup();
                                                              }
      
                                                          }
      
                                                      }catch (Exception e){
      
                                                          e.printStackTrace();
                                                      }
      
                                                     //get next work set
                                                      verificationWorkSet =  verificationSession.NextWorkSet();
      
                                                  }
                                              }
      
                                          }catch (Exception e){
      
                                              e.printStackTrace();
                                          }
      
      
                                      }finally {
                                         verificationSession.Close();
                                      }
                                  }catch (Exception e){
      
                                      e.printStackTrace();
                                  }
      
      
                                  trace ("Getting Documents");
                                  IDocuments documents = batch.getDocuments(); 
      
                                  trace ("Getting Fields and printing");
                                  for ( int j = 0 ; j < documents.getCount(); j++){
                                      trace ("Getting documnets:" +(j+1));
      
                                      IDocument document = documents.getElement(j);
                                      IDocumentDefinition definition = document.getDocumentDefinition();
                                      assert( definition != null );
                                      assert( document.getPages().getCount() == 1 );
      
      
                                      trace( "DocumentType: " + document.getDocumentDefinition().getName() );
      
                                      try {
                                          trace("opening document");
                                          document.Open(true);
                                          IFields fields = document.getSections().Item( 0 ).getChildren();
      
                                          for( int i = 0; i < fields.getCount(); i++ ) {
                                              IField field = fields.getElement( i );
                                              trace( field.getName() + ": " + 
                                                                      ( field.getValue() != null ? field.getValue().getAsString() : "." ) );
                                          }
                                      }finally {
                                          trace("closing document");
                                          document.Close(true);
                                      }
                                  }
                              }finally {
                                      trace("Closing Batch");
                                      batch.Close();
                              }
      
                      }catch (Exception e){
                              System.out.println("Exception in creating Batch");
                              e.printStackTrace();
                      }
                      finally {
                          trace("closing project");
      
                          project.Close();
                      }
      
                      }catch (Exception e){
                          System.out.println("Exception occured while loading project");
                          e.printStackTrace();
                      }
      
              }catch (Exception e) {
                      // TODO: handle exception
                      System.out.println("Exception occured while loading engine");
                      e.printStackTrace();
              }
              finally {
                      trace("unloading Engine");
                      Engine.Unload();
      
                  }
      
          }
      
      
      
      
      }
      

1 个答案:

答案 0 :(得分:1)

最后我得到了我的解决方案,实际上它正确识别,我正在以错误的方式处理它们......