Pregunta

Estoy usando el procesador Flexicapture para reconocer mi documento. Tengo un caso en el que tengo un documento con múltiples páginas I.E. Un documento tiene varias imágenes y cada imagen es necesario reconocer.

Estoy siguiendo por debajo del procedimiento para lograr mi tarea general, ya sea una imagen en el documento o una imagen múltiple en un documento;

  1. Crear un procesador
  2. Añadir archivo de definición de documento o archivo AFL
  3. Ejecutar el reconocimiento como documento de idocument= procesador.recognizeNextDocument (); Pero cuando devuelva un documento, documento, tiene una sola página, que es la primera página del documento, ¿por qué es así?
  4. En el otro caso, si usa el procesador de proyectos, iProject, con el siguiente procedimiento

    1. Crear un proyecto
    2. obtener lotes del proyecto Project.GetBatches (),
    3. Agregar un documento (que tiene múltiples pages) a lote
    4. reconocerlos Todas las páginas son información de documentos, documentos de idocumentos= batch.getdocuments (),
    5. ¿Cómo puedo lograr la misma tarea con el procesador? Quiero que el procesador reconozca todas las páginas en un documento y devuelva un documento con todas las páginas. ?

      Si algo no está claro, PLS solicite más información. Por favor contesta lo más pronto posible... Código: 1 Uso del procesador 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();
              }
      
      
      
      }
      

      }

      Código: 2 Uso del proyecto

      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();
      
                  }
      
          }
      
      
      
      
      }
      

¿Fue útil?

Solución

Finalmente tengo mi solución, en realidad reconoce correctamente, me estoy manejando de manera incorrecta ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top