Flexicapture 10 SDK verification step issue

961 Views Asked by At

I'm trying to use flexicapture SDK for verification step. when i'm trying to obtain Recognized word count from IText object it returns 0 (zero). int wordCount = text.getRecognizedWordsCount() ;
wordCount is zero here ...

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 suggest some solution; My main task to get Every fieldValue, for each word or each character we need to confidence level.

// © ABBYY. 2012.

// SAMPLES code is property of ABBYY, exclusive rights are reserved.

//

// DEVELOPER is allowed to incorporate SAMPLES into his own APPLICATION and modify it under

// the terms of License Agreement between ABBYY and DEVELOPER.

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






}
1

There are 1 best solutions below

2
On BEST ANSWER

Please set IEngine::EnableRecognitionVariants to TRUE before the document processing.
I work for ABBYY and ready to help you in comments.