2014-01-17 57 views
0

我正在嘗試使用flexicapture SDK進行驗證步驟。 當我試圖從IText對象獲取識別字數時,它返回0(零)。 int wordCount = text.getRecognizedWordsCount();
是的wordCount零這裏...
Flexicapture 10 SDK驗證步驟問題

Work flow as below: 
1.Load the engine 
2.create project 
3.creating and adding images in batch obtained from project (project.getBatches().AddNew("TestBatch")) 
4.Recognize batch using batch object (batch.Recognize(null, RecognitionModeEnum.RM_ReRecognizeAll,null)) 
5. Start verification session 
6. enable context verification and disable group verification 
7. Get work set from session 
8. FOR ALL Work Set: get verification group 
9. FOR ALL Verification group: get verification object 
10. FOR each verification object: Get Fields (under context verification) 
11. obtained IField object 
12. get IFieldValue object from Field object 
13. Get IText object (IText text = fieldValue.getAsText() ) 
14. get recognized word count (int wordCount = text.getRecognizedWordsCount()) 
      here i'm getting 0 as result (wordCount = 0) 

PLS提出了一些解決方案; 我的主要任務是獲取每個fieldValue,對於每個單詞或每個角色我們都需要置信度級別。

// © ABBYY. 2012. 

//樣本代碼是ABBYY的產權,專有權利被保留。

//

//開發商被允許納入樣本分成了自己的應用程序,並在

修改ABBYY和開發者之間的許可協議//條款。

import java.io.File; 
import java.io.IOException; 
import java.sql.BatchUpdateException; 

import com.abbyy.FCEngine.*; 

public class VerificationStep { 


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

    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 + "\\test1.jpg"); 
          batch.AddImage(projectFolder + "\\13-2-600MP0053-02012-DR-ME-0004_A_2.pdf"); 
          //batch.AddImage(projectFolder + "\\15-2-600MP0053-02012-DR-ME-0006_A_2.pdf"); 
          /*batch.AddImage(projectFolder + "\\16-2-600MP0053-02012-DR-ME-0017_A_2.pdf"); 
          batch.AddImage(projectFolder + "\\17-2-600MP0053-02012-DR-ME-0018_A_21.pdf"); 
          batch.AddImage(projectFolder + "\\18-2-600MP0053-02012-DR-ME-0019_A_2.pdf"); 
          */ 
          /*batch.AddImage(projectFolder + "\\02.tif"); 

          batch.AddImage(projectFolder + "\\01.tif");*/ 
          //batch.AddImage(projectFolder + "\\03.tif"); 
          //batch.AddImage(projectFolder + "\\04.tif"); 


          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 { 

                        System.out.println("suspicious: " +fieldValue.getIsSuspicious()); 
                        System.out.println("need valid: " +fieldValue.getIsValid()); 
                        System.out.println("is verifi: " +fieldValue.getIsVerified()); 
                        System.out.println("need verifi: " +fieldValue.getNeedsVerification()); 


                        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){ 
             System.out.println("Exception durring getting next Work Set"); 
             e.printStackTrace(); 
            } 


           }finally { 
            trace("closing Verification object"); 
            verificationSession.Close(); 
           } 
          }catch (Exception e){ 
           System.out.println("Excepton occured in Creating Verification object"); 
           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("===================================="); 
           trace("DocumentType: " + document.getDocumentDefinition().getName()); 
           trace("===================================="); 

           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(); 
       DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\TestBatch"); 
       DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\BatchTypes"); 
       DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\ProjectIsOpen"); 
       DeleteDirectoryOrFileIntializer("C:\\Users\\Nitin\\FlexicaptureTest\\flexiverificationtest\\flexitest.fcproj.sync"); 

      } 

    } 


     public static void DeleteDirectoryOrFileIntializer(String args) 
     { 

      File directory = new File(args); 

      //make sure directory exists 
      if(!directory.exists()){ 

       System.exit(0); 

      }else{ 

       try{ 

        delete(directory); 

       }catch(IOException e){ 
        e.printStackTrace(); 
        System.exit(0); 
       } 
      } 

      System.out.println("Deleteing files/Director : " +args+ " successfully Done"); 
     } 

     public static void delete(File file) 
      throws IOException{ 

      if(file.isDirectory()){ 

       //directory is empty, then delete it 
       if(file.list().length==0){ 

        file.delete(); 

       }else{ 

        //list all the directory contents 
        String files[] = file.list(); 

        for (String temp : files) { 
         //construct the file structure 
         File fileDelete = new File(file, temp); 

         //recursive delete 
        delete(fileDelete); 
        } 

        //check the directory again, if empty then delete it 
        if(file.list().length==0){ 
        file.delete(); 
        } 
       } 

      }else{ 
       //if file, then delete it 
       file.delete(); 
      } 
     } 






} 

回答

0

請在文檔處理之前將IEngine :: EnableRecognitionVariants設置爲TRUE。
我爲ABBYY工作,隨時準備爲您提供意見。

+0

可以在這個問題上回答我:http://stackoverflow.com/questions/24034598/flexicapture-processor-recognize-only-first-page-of-document – nitin

+0

因爲我知道你已經解決了這個問題。 –

+0

是的,謝謝你,張貼後我得到了解決方案:) – nitin